X-Git-Url: https://thelambdalab.xyz/gitweb/index.cgi?a=blobdiff_plain;ds=sidebyside;f=src%2Fscheme.4th;h=0dec2150fe1d77d44b2592c6d7c8a60b30f3343c;hb=b445670c931b81438c8e84a79e11500197829fa0;hp=2edd16da5fc43309c34387e9c4eb10afa0770ed3;hpb=c6aa8bc94536cbac6a7df5ad6872131665aeefeb;p=scheme.forth.jl.git diff --git a/src/scheme.4th b/src/scheme.4th index 2edd16d..0dec215 100644 --- a/src/scheme.4th +++ b/src/scheme.4th @@ -564,8 +564,11 @@ global-env obj! : continuation->rstack-list drop pair-type cdr ; -: restore-param-stack ( continuation -- obj_stack continuation ) +: stack-list-len ( stack-list -- n ) + car drop +; +: restore-param-stack ( continuation -- obj_stack ) continuation->pstack-list 2dup >R >R @@ -587,12 +590,50 @@ global-env obj! -2 +loop 2drop +; + +: list->pad ( list n -- ) + + pad + 1- \ final dest addr + pad \ initial dest addr + swap + do + 2dup cdr 2swap car + drop i ! + -1 +loop + 2drop ; -: restore-continuation +: restore-return-stack ( continuation -- ) + + continuation->rstack-list + + 2dup stack-list-len -rot ( n stack-list ) + 2dup cdr 2swap stack-list-len ( n list n ) + + list->pad ( n ) + + dup RSP0 + RSP! \ expand return stack to accommodate entries + + ( n ) + 0 \ initial offset + do + pad i + @ RSP0 i 1+ + ! + loop +; + +: 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 ; \ }}} @@ -2125,6 +2166,7 @@ parse-idx-stack parse-idx-sp ! \ }}} +\ DEBUGGING xxxx \ ---- Loading files ---- {{{