1 ! Copyright (C) 2008 Slava Pestov.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: namespaces sequences kernel compiler.tree ;
4 IN: compiler.cfg.iterator
8 : >node ( cursor -- ) node-stack get push ;
9 : node> ( -- cursor ) node-stack get pop ;
10 : node@ ( -- cursor ) node-stack get last ;
11 : current-node ( -- node ) node@ first ;
12 : iterate-next ( -- cursor ) node@ rest-slice ;
13 : skip-next ( -- next ) node> rest-slice [ first ] [ >node ] bi ;
15 : iterate-nodes ( cursor quot: ( -- ) -- )
19 [ swap >node call node> drop ] keep iterate-nodes
20 ] if ; inline recursive
24 : tail-phi? ( cursor -- ? )
25 [ first #phi? ] [ rest-slice (tail-call?) ] bi and ;
27 : (tail-call?) ( cursor -- ? )
32 [ #return-recursive? ]
33 [ #terminate? ] tri or or
42 [ first #terminate? not ]