]> gitweb.factorcode.org Git - factor.git/blob - basis/compiler/cfg/stacks/vacant/vacant.factor
VM: the small return_address_index function can be implemented in the header
[factor.git] / basis / compiler / cfg / stacks / vacant / vacant.factor
1 USING: accessors arrays assocs compiler.cfg.instructions
2 compiler.cfg.linearization compiler.cfg.stacks.padding fry kernel math
3 sequences ;
4 IN: compiler.cfg.stacks.vacant
5
6 : vacant>bits ( vacant --  bits )
7     [ { } ] [
8         dup supremum 1 + 1 <array>
9         [ '[ _ 0 -rot set-nth ] each ] keep
10     ] if-empty ;
11
12 : state>gc-data ( state -- gc-data )
13     [ second vacant>bits ] map ;
14
15 : set-gc-map ( state gc-map -- )
16     swap state>gc-data first2 -rot >>scrub-d swap >>scrub-r drop ;
17
18 : fill-gc-maps ( cfg -- )
19     [ trace-stack-state ] [ cfg>insns [ gc-map-insn? ] filter ] bi
20     [ [ insn#>> of ] [ gc-map>> ] bi set-gc-map ] with each ;