46 lines
1004 B
Factor
46 lines
1004 B
Factor
! Copyright (C) 2008 Slava Pestov.
|
|
! See http://factorcode.org/license.txt for BSD license.
|
|
USING: kernel accessors sequences words namespaces
|
|
classes.builtin
|
|
compiler.tree
|
|
compiler.tree.builder
|
|
compiler.tree.normalization
|
|
compiler.tree.propagation
|
|
compiler.tree.cleanup
|
|
compiler.tree.def-use
|
|
compiler.tree.dead-code
|
|
compiler.tree.combinators ;
|
|
IN: compiler.tree.finalization
|
|
|
|
GENERIC: finalize* ( node -- nodes )
|
|
|
|
M: #copy finalize* drop f ;
|
|
|
|
M: #shuffle finalize*
|
|
dup shuffle-effect
|
|
[ in>> ] [ out>> ] bi sequence=
|
|
[ drop f ] when ;
|
|
|
|
: builtin-predicate? ( word -- ? )
|
|
"predicating" word-prop builtin-class? ;
|
|
|
|
: splice-quot ( quot -- nodes )
|
|
[
|
|
build-tree
|
|
normalize
|
|
propagate
|
|
cleanup
|
|
compute-def-use
|
|
remove-dead-code
|
|
but-last
|
|
] with-scope ;
|
|
|
|
M: #call finalize*
|
|
dup word>> builtin-predicate? [
|
|
word>> def>> splice-quot
|
|
] when ;
|
|
|
|
M: node finalize* ;
|
|
|
|
: finalize ( nodes -- nodes' ) [ finalize* ] map-nodes ;
|