version 1.29, 1997/01/01 16:26:02
|
version 1.32, 1997/04/10 15:00:07
|
Line 332 new-locals-map ' new-locals >body cell+
|
Line 332 new-locals-map ' new-locals >body cell+
|
variable old-dpp |
variable old-dpp |
|
|
\ and now, finally, the user interface words |
\ and now, finally, the user interface words |
: { ( -- addr wid 0 ) \ gforth open-brace |
: { ( -- lastxt wid 0 ) \ gforth open-brace |
dp old-dpp ! |
dp old-dpp ! |
locals-dp dpp ! |
locals-dp dpp ! |
|
lastxt get-current |
also new-locals |
also new-locals |
also get-current locals definitions locals-types |
also locals definitions locals-types |
0 TO locals-wordlist |
0 TO locals-wordlist |
0 postpone [ ; immediate |
0 postpone [ ; immediate |
|
|
locals-types definitions |
locals-types definitions |
|
|
: } ( addr wid 0 a-addr1 xt1 ... -- ) \ gforth close-brace |
: } ( lastxt wid 0 a-addr1 xt1 ... -- ) \ gforth close-brace |
\ ends locals definitions |
\ ends locals definitions |
] old-dpp @ dpp ! |
] old-dpp @ dpp ! |
begin |
begin |
Line 352 locals-types definitions
|
Line 353 locals-types definitions
|
repeat |
repeat |
drop |
drop |
locals-size @ alignlp-f locals-size ! \ the strictest alignment |
locals-size @ alignlp-f locals-size ! \ the strictest alignment |
set-current |
|
previous previous |
previous previous |
|
set-current lastcfa ! |
locals-list TO locals-wordlist ; |
locals-list TO locals-wordlist ; |
|
|
: -- ( addr wid 0 ... -- ) \ gforth dash-dash |
: -- ( addr wid 0 ... -- ) \ gforth dash-dash |
Line 497 forth definitions
|
Line 498 forth definitions
|
\ ELSE. However, if ELSE generates an appropriate "lp+!#" before the |
\ ELSE. However, if ELSE generates an appropriate "lp+!#" before the |
\ branch, there will be none after the target <then>. |
\ branch, there will be none after the target <then>. |
|
|
: (then-like) ( orig -- addr ) |
: (then-like) ( orig -- ) |
swap -rot dead-orig = |
dead-orig = |
if |
if |
drop |
>resolve drop |
else |
else |
dead-code @ |
dead-code @ |
if |
if |
set-locals-size-list dead-code off |
>resolve set-locals-size-list dead-code off |
else \ both live |
else \ both live |
dup list-size adjust-locals-size |
over list-size adjust-locals-size |
|
>resolve |
locals-list @ common-list dup list-size adjust-locals-size |
locals-list @ common-list dup list-size adjust-locals-size |
locals-list ! |
locals-list ! |
then |
then |
Line 616 forth definitions
|
Line 618 forth definitions
|
\ this gives a unique identifier for the way the xt was defined |
\ this gives a unique identifier for the way the xt was defined |
\ words defined with different does>-codes have different definers |
\ words defined with different does>-codes have different definers |
\ the definer can be used for comparison and in definer! |
\ the definer can be used for comparison and in definer! |
dup >code-address [ ' spaces >code-address ] Literal = |
dup >does-code |
\ !! this definition will not work on some implementations for `bits' |
?dup-if |
if \ if >code-address delivers the same value for all does>-def'd words |
nip 1 or |
>does-code 1 or \ bit 0 marks special treatment for does codes |
|
else |
else |
>code-address |
>code-address |
then ; |
then ; |
Line 633 forth definitions
|
Line 634 forth definitions
|
then ; |
then ; |
|
|
:noname |
:noname |
' dup >definer [ ' locals-wordlist >definer ] literal = |
' dup >definer [ ' locals-wordlist ] literal >definer = |
if |
if |
>body ! |
>body ! |
else |
else |
Line 643 forth definitions
|
Line 644 forth definitions
|
0 0 0. 0.0e0 { c: clocal w: wlocal d: dlocal f: flocal } |
0 0 0. 0.0e0 { c: clocal w: wlocal d: dlocal f: flocal } |
comp' drop dup >definer |
comp' drop dup >definer |
case |
case |
[ ' locals-wordlist >definer ] literal \ value |
[ ' locals-wordlist ] literal >definer \ value |
OF >body POSTPONE Aliteral POSTPONE ! ENDOF |
OF >body POSTPONE Aliteral POSTPONE ! ENDOF |
[ comp' clocal drop >definer ] literal |
[ comp' clocal drop ] literal >definer |
OF POSTPONE laddr# >body @ lp-offset, POSTPONE c! ENDOF |
OF POSTPONE laddr# >body @ lp-offset, POSTPONE c! ENDOF |
[ comp' wlocal drop >definer ] literal |
[ comp' wlocal drop ] literal >definer |
OF POSTPONE laddr# >body @ lp-offset, POSTPONE ! ENDOF |
OF POSTPONE laddr# >body @ lp-offset, POSTPONE ! ENDOF |
[ comp' dlocal drop >definer ] literal |
[ comp' dlocal drop ] literal >definer |
OF POSTPONE laddr# >body @ lp-offset, POSTPONE 2! ENDOF |
OF POSTPONE laddr# >body @ lp-offset, POSTPONE 2! ENDOF |
[ comp' flocal drop >definer ] literal |
[ comp' flocal drop ] literal >definer |
OF POSTPONE laddr# >body @ lp-offset, POSTPONE f! ENDOF |
OF POSTPONE laddr# >body @ lp-offset, POSTPONE f! ENDOF |
-&32 throw |
-&32 throw |
endcase ; |
endcase ; |