version 1.31, 1997/03/11 16:00:39
|
version 1.35, 1997/10/04 17:33:53
|
Line 85
|
Line 85
|
\ Currently locals may only be |
\ Currently locals may only be |
\ defined at the outer level and TO is not supported. |
\ defined at the outer level and TO is not supported. |
|
|
require search-order.fs |
require search.fs |
require float.fs |
require float.fs |
|
|
: compile-@local ( n -- ) \ gforth compile-fetch-local |
: compile-@local ( n -- ) \ gforth compile-fetch-local |
Line 322 create new-locals-map ( -- wordlist-map
|
Line 322 create new-locals-map ( -- wordlist-map
|
' new-locals-find A, |
' new-locals-find A, |
' new-locals-reveal A, |
' new-locals-reveal A, |
' drop A, \ rehash method |
' drop A, \ rehash method |
|
' drop A, |
|
|
slowvoc @ |
slowvoc @ |
slowvoc on |
slowvoc on |
Line 332 new-locals-map ' new-locals >body cell+
|
Line 333 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 354 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 645 forth definitions
|
Line 647 forth definitions
|
case |
case |
[ ' locals-wordlist ] literal >definer \ value |
[ ' locals-wordlist ] literal >definer \ value |
OF >body POSTPONE Aliteral POSTPONE ! ENDOF |
OF >body POSTPONE Aliteral POSTPONE ! ENDOF |
[ comp' clocal drop ] literal >definer |
\ !! dependent on c: etc. being does>-defining words |
|
\ this works, because >definer uses >does-code in this case, |
|
\ which produces a relocatable address |
|
[ comp' clocal drop >definer ] literal |
OF POSTPONE laddr# >body @ lp-offset, POSTPONE c! ENDOF |
OF POSTPONE laddr# >body @ lp-offset, POSTPONE c! ENDOF |
[ comp' wlocal drop ] literal >definer |
[ comp' wlocal drop >definer ] literal |
OF POSTPONE laddr# >body @ lp-offset, POSTPONE ! ENDOF |
OF POSTPONE laddr# >body @ lp-offset, POSTPONE ! ENDOF |
[ comp' dlocal drop ] literal >definer |
[ comp' dlocal drop >definer ] literal |
OF POSTPONE laddr# >body @ lp-offset, POSTPONE 2! ENDOF |
OF POSTPONE laddr# >body @ lp-offset, POSTPONE 2! ENDOF |
[ comp' flocal drop ] literal >definer |
[ comp' flocal drop >definer ] literal |
OF POSTPONE laddr# >body @ lp-offset, POSTPONE f! ENDOF |
OF POSTPONE laddr# >body @ lp-offset, POSTPONE f! ENDOF |
-&32 throw |
-&32 throw |
endcase ; |
endcase ; |