factor/core/compiler/compiler.factor

84 lines
2.1 KiB
Factor
Raw Normal View History

2008-01-01 14:54:14 -05:00
! Copyright (C) 2004, 2008 Slava Pestov.
2007-09-20 18:09:08 -04:00
! See http://factorcode.org/license.txt for BSD license.
USING: kernel namespaces arrays sequences io inference.backend
2008-04-07 21:07:30 -04:00
inference.state generator debugger words compiler.units
continuations vocabs assocs alien.compiler dlists optimizer
definitions math compiler.errors threads graphs generic
2008-05-07 08:49:36 -04:00
inference combinators ;
2007-09-20 18:09:08 -04:00
IN: compiler
2008-01-01 14:54:14 -05:00
: ripple-up ( word -- )
2008-01-12 04:25:16 -05:00
compiled-usage [ drop queue-compile ] assoc-each ;
: save-effect ( word effect -- )
2008-05-07 08:49:36 -04:00
[
over "compiled-effect" word-prop = [
dup "compiled-uses" word-prop
[ dup ripple-up ] when
] unless drop
]
[ "compiled-effect" set-word-prop ] 2bi ;
2008-05-07 08:49:36 -04:00
: compile-begins ( word -- )
f swap compiler-error ;
2008-01-01 14:54:14 -05:00
2008-05-07 08:49:36 -04:00
: compile-failed ( word error -- )
[ swap compiler-error ]
[
2008-05-07 08:49:36 -04:00
drop
[ f swap compiled get set-at ]
[ f save-effect ]
bi
] 2bi ;
2008-01-01 14:54:14 -05:00
2008-05-07 08:49:36 -04:00
: compile-succeeded ( effect word -- )
[ swap save-effect ]
[ compiled-unxref ]
[
dup compiled-crossref?
[ dependencies get compiled-xref ] [ drop ] if
] tri ;
2008-01-01 14:54:14 -05:00
: (compile) ( word -- )
2008-05-07 08:49:36 -04:00
[
H{ } clone dependencies set
{
[ compile-begins ]
[
[ word-dataflow ] [ compile-failed return ] recover
optimize
]
[ dup generate ]
[ compile-succeeded ]
} cleave
] curry with-return ;
: compile-loop ( assoc -- )
2007-12-30 16:09:21 -05:00
dup assoc-empty? [ drop ] [
dup delete-any drop (compile)
2007-12-30 16:09:21 -05:00
yield
compile-loop
] if ;
: decompile ( word -- )
f 2array 1array t modify-code-heap ;
: optimized-recompile-hook ( words -- alist )
[
H{ } clone compile-queue set
H{ } clone compiled set
2008-02-25 04:38:37 -05:00
[ queue-compile ] each
compile-queue get compile-loop
2008-02-17 19:38:29 -05:00
compiled get >alist
] with-scope ;
2007-09-20 18:09:08 -04:00
: enable-compiler ( -- )
[ optimized-recompile-hook ] recompile-hook set-global ;
: disable-compiler ( -- )
[ default-recompile-hook ] recompile-hook set-global ;
: recompile-all ( -- )
forget-errors all-words compile ;