]> gitweb.factorcode.org Git - factor.git/blobdiff - basis/compiler/cfg/linearization/linearization.factor
use reject instead of [ ... not ] filter.
[factor.git] / basis / compiler / cfg / linearization / linearization.factor
index 00fc5f6e6c70c17a9ee6a290a220331de4879e7d..998bcdfd09dcea21226e7a3b4cc9ca46b4c464ac 100644 (file)
@@ -16,6 +16,12 @@ SYMBOLS: loop-heads visited ;
 
 : visited? ( bb -- ? ) visited get in? ;
 
+: predecessors-ready? ( bb -- ? )
+    [ predecessors>> ] keep '[
+        _ 2dup back-edge?
+        [ 2drop t ] [ drop visited? ] if
+    ] all? ;
+
 : (find-alternate-loop-head) ( bb -- bb' )
     dup {
         [ predecessor visited? not ]
@@ -32,12 +38,6 @@ SYMBOLS: loop-heads visited ;
         nip (find-alternate-loop-head)
     ] if ;
 
-: predecessors-ready? ( bb -- ? )
-    [ predecessors>> ] keep '[
-        _ 2dup back-edge?
-        [ 2drop t ] [ drop visited? ] if
-    ] all? ;
-
 : sorted-successors ( bb -- seq )
     successors>> <reversed> [ loop-nesting-at ] sort-with ;
 
@@ -45,12 +45,12 @@ SYMBOLS: loop-heads visited ;
     dup visited get ?adjoin [ dup , sorted-successors ] [ drop { } ] if
     [ predecessors-ready? ] filter
     [ dup loop-entry? [ find-alternate-loop-head ] when ] map
-    [ visited? not ] filter ;
+    [ visited? ] reject ;
 
 : (linearization-order) ( cfg -- bbs )
     HS{ } clone visited set
     entry>> <dlist> [ push-back ] keep
-    [ [ process-block ] slurp/replenish-deque ] { } make ;
+    [ dup '[ process-block _ push-all-back ] slurp-deque ] { } make ;
 
 PRIVATE>