--- gforth/glocals.fs 1994/07/08 15:00:43 1.4 +++ gforth/glocals.fs 1994/10/24 19:15:58 1.8 @@ -61,22 +61,22 @@ \ Currently locals may only be \ defined at the outer level and TO is not supported. -include float.fs include search-order.fs +include float.fs : compile-@local ( n -- ) case - 0 of postpone @local0 endof - 4 of postpone @local4 endof - 8 of postpone @local8 endof - 12 of postpone @local12 endof + 0 of postpone @local0 endof + 1 cells of postpone @local1 endof + 2 cells of postpone @local2 endof + 3 cells of postpone @local3 endof ( otherwise ) dup postpone @local# , endcase ; : compile-f@local ( n -- ) case - 0 of postpone f@local0 endof - 8 of postpone f@local8 endof + 0 of postpone f@local0 endof + 1 floats of postpone f@local1 endof ( otherwise ) dup postpone f@local# , endcase ; @@ -87,8 +87,11 @@ include search-order.fs \ lp must have the strictest alignment (usually float) across calls; \ for simplicity we align it strictly for every group. +slowvoc @ +slowvoc on \ we want a linked list for the vocabulary locals vocabulary locals \ this contains the local variables ' locals >body ' locals-list >body ! +slowvoc ! create locals-buffer 1000 allot \ !! limited and unsafe \ here the names of the local variables are stored @@ -505,5 +508,10 @@ forth definitions endif endif ; immediate -\ : locals| -\ !! should lie around somewhere +: locals| + BEGIN + name 2dup s" |" compare 0<> + WHILE + (local) + REPEAT + drop 0 (local) ; immediate restrict