]> gitweb.factorcode.org Git - factor.git/commitdiff
destructors: use hash-sets to keep track of disposables.
authorJohn Benediktsson <mrjbq7@gmail.com>
Sat, 9 Mar 2013 00:30:33 +0000 (16:30 -0800)
committerJohn Benediktsson <mrjbq7@gmail.com>
Sat, 9 Mar 2013 00:30:33 +0000 (16:30 -0800)
basis/libc/libc.factor
basis/tools/destructors/destructors.factor
core/destructors/destructors.factor

index 6b025e957adf6554136a4ef99fdf054b36c22652..95ed73c7e609955b54b02ccfbc09536bebf5abdd 100644 (file)
@@ -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>
 
index a8a1b35e8764ac86fd046ebee158e047a84e3a62..b923c7ba94371fbf45d38ad2e6c5fabf32678bb1 100644 (file)
@@ -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
index 0cb15ad40ac3d529ba5d00977e99d63855ce8a85..7aa3fd247636314d8fd16fa5acb3c4afdd29c05f 100755 (executable)
@@ -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