1 ! Copyright (C) 2009 Slava Pestov.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: math math.order namespaces accessors kernel layouts combinators
4 combinators.smart assocs sequences cpu.architecture ;
5 IN: compiler.cfg.stack-frame
10 { total-size integer }
11 { gc-root-size integer }
12 { spill-area-size integer }
13 { calls-vm? boolean } ;
15 ! Stack frame utilities
17 stack-frame get [ params>> ] [ return>> ] bi + ;
19 : spill-offset ( n -- offset )
22 : gc-root-base ( -- n )
23 stack-frame get spill-area-size>> param-base + ;
25 : gc-root-offset ( n -- n' ) gc-root-base + ;
27 : (stack-frame-size) ( stack-frame -- n )
37 : max-stack-frame ( frame1 frame2 -- frame3 )
38 [ stack-frame new ] 2dip
40 [ [ params>> ] bi@ max >>params ]
41 [ [ return>> ] bi@ max >>return ]
42 [ [ gc-root-size>> ] bi@ max >>gc-root-size ]
43 [ [ calls-vm?>> ] bi@ or >>calls-vm? ]