<PRIVATE
: catchstack* ( -- catchstack )
- 1 special-object { vector } declare ; inline
+ 1 context-object { vector } declare ; inline
: >c ( continuation -- ) catchstack* push ;
: dummy-1 ( -- obj ) f ;
: dummy-2 ( obj -- obj ) dup drop ;
-: init-catchstack ( -- ) V{ } clone 1 set-special-object ;
+: catchstack ( -- catchstack ) catchstack* clone ; inline
-PRIVATE>
+: set-catchstack ( catchstack -- )
+ >vector 1 set-context-object ; inline
-: catchstack ( -- catchstack ) catchstack* clone ; inline
+: init-catchstack ( -- ) f set-catchstack ;
-: set-catchstack ( catchstack -- ) >vector 1 set-special-object ; inline
+PRIVATE>
TUPLE: continuation data call retain name catch ;
datastack callstack retainstack namestack catchstack
<continuation> ;
+<PRIVATE
+
: >continuation< ( continuation -- data call retain name catch )
- {
- [ data>> ]
- [ call>> ]
- [ retain>> ]
- [ name>> ]
- [ catch>> ]
- } cleave ;
+ { [ data>> ] [ call>> ] [ retain>> ] [ name>> ] [ catch>> ] } cleave ;
+
+PRIVATE>
: ifcc ( capture restore -- )
[ dummy-1 continuation ] 2dip [ dummy-2 ] prepose ?if ; inline
<PRIVATE
: init-error-handler ( -- )
- V{ } clone set-catchstack
+ init-catchstack
! VM calls on error
[
! 63 = self