From: Tim Vaughan Date: Wed, 1 Nov 2017 21:43:12 +0000 (+0100) Subject: Working on restore-return-stack X-Git-Url: https://thelambdalab.xyz/gitweb/index.cgi?a=commitdiff_plain;h=d2810af4877d1f166459c6778a00c4bc22292d1f;p=scheme.forth.jl.git Working on restore-return-stack --- diff --git a/src/scheme.4th b/src/scheme.4th index 2edd16d..a360b47 100644 --- a/src/scheme.4th +++ b/src/scheme.4th @@ -564,8 +564,7 @@ global-env obj! : continuation->rstack-list drop pair-type cdr ; -: restore-param-stack ( continuation -- obj_stack continuation ) - +: restore-param-stack ( continuation -- obj_stack ) continuation->pstack-list 2dup >R >R @@ -587,12 +586,40 @@ global-env obj! -2 +loop 2drop +; + +: restore-return-stack ( continuation -- ) + R> \ store top of return stack on PS + continuation->rstack-list + 2dup >R >R + ( Allocate stack space first using rsp!, + then copy objects from list. ) + + car drop + rsp0 + rsp! + + R> R> 2dup cdr + 2swap + car drop 0 swap do + 2dup car drop + rsp0 i + 1 + ! + cdr + 1- +loop + + 2drop + trace + >R \ restore original top of return stack ; -: restore-continuation +: restore-continuation ( continuation -- ) \ TODO: replace current parameter and return stacks with \ contents of continuation object. + + 2dup >R >R + restore-param-stack + R> R> + restore-return-stack ; \ }}}