| : create-local ( " name" -- a-addr ) |
: create-local ( " name" -- a-addr ) |
| \ defines the local "name"; the offset of the local shall be |
\ defines the local "name"; the offset of the local shall be |
| \ stored in a-addr |
\ stored in a-addr |
| |
dp |
| |
locals-dp dpp ! |
| create |
create |
| immediate restrict |
immediate restrict |
| here 0 , ( place for the offset ) ; |
here 0 , ( place for the offset ) |
| |
swap dpp ! ; |
| |
|
| : lp-offset ( n1 -- n2 ) |
: lp-offset ( n1 -- n2 ) |
| \ converts the offset from the frame start to an offset from lp and |
\ converts the offset from the frame start to an offset from lp and |
| |
|
| \ these "locals" are used for comparison in TO |
\ these "locals" are used for comparison in TO |
| |
|
| |
here locals-dp ! |
| c: some-clocal 2drop |
c: some-clocal 2drop |
| d: some-dlocal 2drop |
d: some-dlocal 2drop |
| f: some-flocal 2drop |
f: some-flocal 2drop |
| w: some-wlocal 2drop |
w: some-wlocal 2drop |
| |
locals-dp @ dp ! |
| |
|
| \ the following gymnastics are for declaring locals without type specifier. |
\ the following gymnastics are for declaring locals without type specifier. |
| \ we exploit a feature of our dictionary: every wordlist |
\ we exploit a feature of our dictionary: every wordlist |
| \ slowvoc ! |
\ slowvoc ! |
| \ new-locals-map ' new-locals >body wordlist-map A! \ !! use special access words |
\ new-locals-map ' new-locals >body wordlist-map A! \ !! use special access words |
| |
|
| variable old-dpp |
|
| |
|
| \ and now, finally, the user interface words |
\ and now, finally, the user interface words |
| : { ( -- latestxt wid 0 ) \ gforth open-brace |
: { ( -- latestxt wid 0 ) \ gforth open-brace |
| dp old-dpp ! |
|
| locals-dp dpp ! |
|
| latestxt get-current |
latestxt get-current |
| get-order new-locals-wl swap 1+ set-order |
get-order new-locals-wl swap 1+ set-order |
| also locals definitions locals-types |
also locals definitions locals-types |
| |
|
| : } ( latestxt wid 0 a-addr1 xt1 ... -- ) \ gforth close-brace |
: } ( latestxt wid 0 a-addr1 xt1 ... -- ) \ gforth close-brace |
| \ ends locals definitions |
\ ends locals definitions |
| ] old-dpp @ dpp ! |
] |
| begin |
begin |
| dup |
dup |
| while |
while |