version 1.29, 1997/01/01 16:26:02
|
version 1.30, 1997/03/04 17:49:51
|
Line 497 forth definitions
|
Line 497 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 617 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 643 forth definitions
|
Line 643 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 ; |