destructors: use hash-sets to keep track of disposables.
parent
4b5833f252
commit
26506a4b0b
|
@ -72,7 +72,7 @@ M: realloc-error summary
|
|||
[ <malloc-ptr> unregister-disposable ] when* ;
|
||||
|
||||
: malloc-exists? ( alien -- ? )
|
||||
<malloc-ptr> disposables get key? ;
|
||||
<malloc-ptr> disposables get in? ;
|
||||
|
||||
PRIVATE>
|
||||
|
||||
|
|
|
@ -1,16 +1,19 @@
|
|||
! Copyright (C) 2009 Slava Pestov.
|
||||
! See http://factorcode.org/license.txt for BSD license.
|
||||
USING: assocs classes destructors fry kernel math namespaces
|
||||
prettyprint sequences sets sorting continuations accessors arrays
|
||||
io io.styles combinators.smart ;
|
||||
USING: accessors arrays assocs classes combinators.smart
|
||||
continuations destructors fry io io.styles kernel namespaces
|
||||
prettyprint sequences sets sorting ;
|
||||
FROM: sets => members ;
|
||||
IN: tools.destructors
|
||||
|
||||
<PRIVATE
|
||||
|
||||
: class-tally ( assoc -- assoc' )
|
||||
H{ } clone [ [ keys ] dip '[ dup class-of _ push-at ] each ] keep ;
|
||||
: class-tally ( set -- assoc' )
|
||||
H{ } clone [
|
||||
[ members ] dip '[ dup class-of _ push-at ] each
|
||||
] keep ;
|
||||
|
||||
: (disposables.) ( assoc -- )
|
||||
: (disposables.) ( set -- )
|
||||
class-tally >alist [ first2 [ length ] keep 3array ] map [ second ] sort-with
|
||||
standard-table-style [
|
||||
[
|
||||
|
@ -39,7 +42,7 @@ PRIVATE>
|
|||
disposables get (disposables.) ;
|
||||
|
||||
: disposables-of-class. ( class -- )
|
||||
[ disposables get values sort-disposables ] dip
|
||||
[ disposables get members sort-disposables ] dip
|
||||
'[ _ instance? ] filter stack. ;
|
||||
|
||||
: leaks ( quot -- )
|
||||
|
@ -48,4 +51,4 @@ PRIVATE>
|
|||
[
|
||||
[ call disposables get clone ] dip
|
||||
] [ f debug-leaks? set-global ] [ ] cleanup
|
||||
assoc-diff (disposables.) ; inline
|
||||
diff (disposables.) ; inline
|
||||
|
|
|
@ -17,10 +17,10 @@ SLOT: continuation
|
|||
|
||||
: register-disposable ( obj -- )
|
||||
debug-leaks? get-global [ current-continuation >>continuation ] when
|
||||
disposables get conjoin ;
|
||||
disposables get adjoin ;
|
||||
|
||||
: unregister-disposable ( obj -- )
|
||||
disposables get 2dup key? [ delete-at ] [ drop already-unregistered ] if ;
|
||||
disposables get 2dup in? [ delete ] [ drop already-unregistered ] if ;
|
||||
|
||||
PRIVATE>
|
||||
|
||||
|
@ -92,7 +92,7 @@ PRIVATE>
|
|||
] with-scope ; inline
|
||||
|
||||
[
|
||||
H{ } clone disposables set-global
|
||||
HS{ } clone disposables set-global
|
||||
V{ } clone always-destructors set-global
|
||||
V{ } clone error-destructors set-global
|
||||
] "destructors" add-startup-hook
|
||||
|
|
Loading…
Reference in New Issue