]> gitweb.factorcode.org Git - factor.git/blobdiff - basis/compiler/tree/cleanup/cleanup.factor
use reject instead of [ ... not ] filter.
[factor.git] / basis / compiler / tree / cleanup / cleanup.factor
index 07e6f291330da9cc5b34446e4f7fcb36a50f05ef..d610ef17650b2a21994facd2b490f71f6011472f 100644 (file)
@@ -1,26 +1,18 @@
 ! Copyright (C) 2008, 2010 Slava Pestov.
 ! See http://factorcode.org/license.txt for BSD license.
-USING: kernel accessors sequences combinators fry
-classes.algebra namespaces assocs words math math.private
-math.partial-dispatch math.intervals classes classes.tuple
-classes.tuple.private layouts definitions stack-checker.dependencies
-stack-checker.branches
-compiler.utilities
-compiler.tree
-compiler.tree.combinators
-compiler.tree.propagation.info
-compiler.tree.propagation.branches ;
+USING: accessors classes classes.algebra combinators
+compiler.tree compiler.tree.combinators
+compiler.tree.propagation.branches
+compiler.tree.propagation.info compiler.utilities fry kernel
+layouts math math.intervals math.partial-dispatch math.private
+namespaces sequences stack-checker.branches
+stack-checker.dependencies words ;
 IN: compiler.tree.cleanup
 
-! A phase run after propagation to finish the job, so to speak.
-! Codifies speculative inlining decisions, deletes branches
-! marked as never taken, and flattens local recursive blocks
-! that do not call themselves.
-
 GENERIC: delete-node ( node -- )
 
 M: #call-recursive delete-node
-    dup label>> calls>> [ node>> eq? not ] with filter! drop ;
+    dup label>> calls>> [ node>> eq? ] with reject! drop ;
 
 M: #return-recursive delete-node
     label>> f >>return drop ;
@@ -58,14 +50,14 @@ GENERIC: cleanup* ( node -- node/nodes )
 
 : record-predicate-folding ( #call -- )
     >predicate-folding< pick literal?>>
-    [ [ literal>> ] 2dip depends-on-instance-predicate ]
-    [ [ class>> ] 2dip depends-on-class-predicate ]
+    [ [ literal>> ] 2dip add-depends-on-instance-predicate ]
+    [ [ class>> ] 2dip add-depends-on-class-predicate ]
     if ;
 
 : record-folding ( #call -- )
     dup word>> predicate?
     [ record-predicate-folding ]
-    [ word>> depends-on-definition ]
+    [ word>> add-depends-on-definition ]
     if ;
 
 : cleanup-folding ( #call -- nodes )
@@ -74,15 +66,15 @@ GENERIC: cleanup* ( node -- node/nodes )
 ! Method inlining
 : add-method-dependency ( #call -- )
     dup method>> word? [
-        [ [ class>> ] [ word>> ] bi depends-on-generic ]
-        [ [ class>> ] [ word>> ] [ method>> ] tri depends-on-method ]
+        [ [ class>> ] [ word>> ] bi add-depends-on-generic ]
+        [ [ class>> ] [ word>> ] [ method>> ] tri add-depends-on-method ]
         bi
     ] [ drop ] if ;
 
 : record-inlining ( #call -- )
     dup method>>
     [ add-method-dependency ]
-    [ word>> depends-on-definition ] if ;
+    [ word>> add-depends-on-definition ] if ;
 
 : cleanup-inlining ( #call -- nodes )
     [ record-inlining ] [ body>> cleanup ] bi ;