From: Tim Vaughan Date: Wed, 1 Aug 2018 09:38:53 +0000 (+0200) Subject: Return stack restore working. X-Git-Url: https://thelambdalab.xyz/gitweb/index.cgi?a=commitdiff_plain;h=b445670c931b81438c8e84a79e11500197829fa0;p=scheme.forth.jl.git Return stack restore working. --- diff --git a/src/scheme.4th b/src/scheme.4th index 4f04d8c..0dec215 100644 --- a/src/scheme.4th +++ b/src/scheme.4th @@ -564,6 +564,10 @@ global-env obj! : continuation->rstack-list drop pair-type cdr ; +: stack-list-len ( stack-list -- n ) + car drop +; + : restore-param-stack ( continuation -- obj_stack ) continuation->pstack-list 2dup >R >R @@ -588,10 +592,7 @@ global-env obj! 2drop ; -: list->pad ( list -- n ) - - 2dup car drop -rot \ keep length of list on stack - 2dup cdr 2swap car drop \ get length from list +: list->pad ( list n -- ) pad + 1- \ final dest addr pad \ initial dest addr @@ -606,19 +607,20 @@ global-env obj! : restore-return-stack ( continuation -- ) - trace - continuation->rstack-list - list->pad - dup - RSP0 + RSP! \ expand return stack to accommodate entries + 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 - - trace ; : restore-continuation ( continuation -- ) @@ -626,12 +628,11 @@ global-env obj! \ contents of continuation object. 2dup >R >R + restore-param-stack - ." ====== PARAM STACK RESTORED ======" cr - trace - R> R> + restore-return-stack ;