33 lines
1.1 KiB
Factor
33 lines
1.1 KiB
Factor
|
! Copyright (C) 2008 Slava Pestov.
|
||
|
! See http://factorcode.org/license.txt for BSD license.
|
||
|
USING: accessors namespaces kernel sequences compiler.tree
|
||
|
stack-checker.visitor ;
|
||
|
IN: compiler.tree.builder
|
||
|
|
||
|
TUPLE: tree-builder first last ;
|
||
|
|
||
|
: node, ( node -- )
|
||
|
dataflow-visitor get swap
|
||
|
over last>>
|
||
|
[ [ [ last>> ] dip >>successor drop ] [ >>last drop ] 2bi ]
|
||
|
[ [ >>first ] [ >>last ] bi drop ]
|
||
|
if ;
|
||
|
|
||
|
M: tree-builder child-visitor tree-builder new ;
|
||
|
M: tree-builder #introduce, #introduce node, ;
|
||
|
M: tree-builder #call, #call node, ;
|
||
|
M: tree-builder #call-recursive, #call-recursive node, ;
|
||
|
M: tree-builder #push, #push node, ;
|
||
|
M: tree-builder #shuffle, #shuffle node, ;
|
||
|
M: tree-builder #drop, #drop node, ;
|
||
|
M: tree-builder #>r, #>r node, ;
|
||
|
M: tree-builder #r>, #r> node, ;
|
||
|
M: tree-builder #return, #return node, ;
|
||
|
M: tree-builder #terminate, #terminate node, ;
|
||
|
M: tree-builder #if, [ first>> ] bi@ #if node, ;
|
||
|
M: tree-builder #dispatch, [ first>> ] map #dispatch node, ;
|
||
|
M: tree-builder #phi, #phi node, ;
|
||
|
M: tree-builder #declare, #declare node, ;
|
||
|
M: tree-builder #recursive, first>> #recursive node, ;
|
||
|
M: tree-builder #copy, #copy node, ;
|