X-Git-Url: https://thelambdalab.xyz/gitweb/index.cgi?a=blobdiff_plain;f=src%2Fscheme.4th;h=4f04d8cab1302ef24d817918cf2c2dd7a31fb554;hb=7e659fc69e0155eb7fe4353debafb830da35097b;hp=93d249650e2fdefa3cc98f31d9fa5a413963e12e;hpb=f71c5f93aefa930fd0ac175416523bc6a101e3df;p=scheme.forth.jl.git diff --git a/src/scheme.4th b/src/scheme.4th index 93d2496..4f04d8c 100644 --- a/src/scheme.4th +++ b/src/scheme.4th @@ -530,6 +530,8 @@ global-env obj! nil rsp@ 1- rsp0 do i 1+ @ fixnum-type 2swap cons loop + + rsp@ 1- rsp0 - fixnum-type 2swap cons ; : cons-param-stack ( -- listobj ) @@ -545,6 +547,8 @@ global-env obj! 2swap cons 2 +loop + + depth 2- fixnum-type 2swap cons ; : make-continuation @@ -560,18 +564,75 @@ global-env obj! : continuation->rstack-list drop pair-type cdr ; -: restore-param-stack ( continuation -- obj_stack continuation ) - - 2dup >R >R +: restore-param-stack ( continuation -- obj_stack ) continuation->pstack-list + 2dup >R >R - ( Idea: allocate stack space first using psp!, + ( Allocate stack space first using psp!, then copy objects from list. ) + + car drop + object-stack-base @ psp0 + + psp! + + R> R> 2dup cdr + 2swap + car drop 2- 0 swap do + + 2dup car + PSP0 object-stack-base @ + i + 2 + ! + PSP0 object-stack-base @ + i + 1 + ! + cdr + + -2 +loop + + 2drop ; -: restore-continuation +: list->pad ( list -- n ) + + 2dup car drop -rot \ keep length of list on stack + 2dup cdr 2swap car drop \ get length from list + + pad + 1- \ final dest addr + pad \ initial dest addr + swap + do + 2dup cdr 2swap car + drop i ! + -1 +loop + + 2drop +; + +: restore-return-stack ( continuation -- ) + + trace + + continuation->rstack-list + list->pad + dup + RSP0 + RSP! \ expand return stack to accommodate entries + + 0 \ initial offset + do + pad i + @ RSP0 i 1+ + ! + loop + + trace +; + +: restore-continuation ( continuation -- ) \ TODO: replace current parameter and return stacks with \ contents of continuation object. + + 2dup >R >R + restore-param-stack + + ." ====== PARAM STACK RESTORED ======" cr + trace + + R> R> + restore-return-stack ; \ }}} @@ -2104,6 +2165,9 @@ parse-idx-stack parse-idx-sp ! \ }}} +\ DEBUGGING +xxxx + \ ---- Loading files ---- {{{ : load ( addr n -- finalResult )