version 1.36, 1998/10/10 10:28:34
|
version 1.41, 1999/05/03 09:46:20
|
Line 1
|
Line 1
|
\ A powerful locals implementation |
\ A powerful locals implementation |
|
|
\ Copyright (C) 1995 Free Software Foundation, Inc. |
\ Copyright (C) 1995,1996,1997,1998 Free Software Foundation, Inc. |
|
|
\ This file is part of Gforth. |
\ This file is part of Gforth. |
|
|
Line 129 require float.fs
|
Line 129 require float.fs
|
slowvoc @ |
slowvoc @ |
slowvoc on \ we want a linked list for the vocabulary locals |
slowvoc on \ we want a linked list for the vocabulary locals |
vocabulary locals \ this contains the local variables |
vocabulary locals \ this contains the local variables |
' locals >body ' locals-list >body ! |
' locals >body wordlist-id ' locals-list >body ! |
slowvoc ! |
slowvoc ! |
|
|
create locals-buffer 1000 allot \ !! limited and unsafe |
create locals-buffer 1000 allot \ !! limited and unsafe |
Line 195 variable locals-dp \ so here's the speci
|
Line 195 variable locals-dp \ so here's the speci
|
faligned nip ; |
faligned nip ; |
|
|
: set-locals-size-list ( list -- ) |
: set-locals-size-list ( list -- ) |
dup locals-list wordlist-id ! |
dup locals-list ! |
list-size locals-size ! ; |
list-size locals-size ! ; |
|
|
: check-begin ( list -- ) |
: check-begin ( list -- ) |
\ warn if list is not a sublist of locals-list |
\ warn if list is not a sublist of locals-list |
locals-list wordlist-id @ sub-list? 0= if |
locals-list @ sub-list? 0= if |
\ !! print current position |
\ !! print current position |
." compiler was overly optimistic about locals at a BEGIN" cr |
." compiler was overly optimistic about locals at a BEGIN" cr |
\ !! print assumption and reality |
\ !! print assumption and reality |
Line 292 locals-types definitions
|
Line 292 locals-types definitions
|
postpone laddr# @ lp-offset, ; |
postpone laddr# @ lp-offset, ; |
|
|
\ you may want to make comments in a locals definitions group: |
\ you may want to make comments in a locals definitions group: |
' \ alias \ immediate |
' \ alias \ ( -- ) \ core-ext,block-ext backslash |
' ( alias ( immediate |
\G Line comment: if @code{BLK} contains 0, parse and discard the remainder |
|
\G of the parse area. Otherwise, parse and discard all subsequent characters in the |
|
\G parse area corresponding to the current line. |
|
immediate |
|
|
|
' ( alias ( ( compilation 'ccc<close-paren>' -- ; run-time -- ) \ core,file paren |
|
\G Comment: parse and discard all subsequent characters in the parse |
|
\G area until ")" is encountered. During interactive input, an end-of-line |
|
\G also acts as a comment terminator. For file input, it does not; if the |
|
\G end-of-file is encountered whilst parsing for the ")" delimiter, Gforth |
|
\G will generate a warning. |
|
immediate |
|
|
forth definitions |
forth definitions |
|
|
Line 324 create new-locals-map ( -- wordlist-map
|
Line 335 create new-locals-map ( -- wordlist-map
|
' drop A, \ rehash method |
' drop A, \ rehash method |
' drop A, |
' drop A, |
|
|
slowvoc @ |
new-locals-map mappedwordlist Constant new-locals-wl |
slowvoc on |
|
vocabulary new-locals |
\ slowvoc @ |
slowvoc ! |
\ slowvoc on |
new-locals-map ' new-locals >body wordlist-map A! \ !! use special access words |
\ vocabulary new-locals |
|
\ slowvoc ! |
|
\ new-locals-map ' new-locals >body wordlist-map A! \ !! use special access words |
|
|
variable old-dpp |
variable old-dpp |
|
|
Line 337 variable old-dpp
|
Line 350 variable old-dpp
|
dp old-dpp ! |
dp old-dpp ! |
locals-dp dpp ! |
locals-dp dpp ! |
lastxt get-current |
lastxt get-current |
also new-locals |
get-order new-locals-wl swap 1+ set-order |
also locals definitions locals-types |
also locals definitions locals-types |
0 TO locals-wordlist |
0 TO locals-wordlist |
0 postpone [ ; immediate |
0 postpone [ ; immediate |
Line 356 locals-types definitions
|
Line 369 locals-types definitions
|
locals-size @ alignlp-f locals-size ! \ the strictest alignment |
locals-size @ alignlp-f locals-size ! \ the strictest alignment |
previous previous |
previous previous |
set-current lastcfa ! |
set-current lastcfa ! |
locals-list TO locals-wordlist ; |
locals-list 0 wordlist-id - TO locals-wordlist ; |
|
|
: -- ( addr wid 0 ... -- ) \ gforth dash-dash |
: -- ( addr wid 0 ... -- ) \ gforth dash-dash |
} |
} |
Line 460 forth definitions
|
Line 473 forth definitions
|
cs-push-part scopestart ; immediate |
cs-push-part scopestart ; immediate |
|
|
: adjust-locals-list ( wid -- ) |
: adjust-locals-list ( wid -- ) |
locals-list wordlist-id @ common-list |
locals-list @ common-list |
dup list-size adjust-locals-size |
dup list-size adjust-locals-size |
locals-list wordlist-id ! ; |
locals-list ! ; |
|
|
: endscope ( compilation scope -- ; run-time -- ) \ gforth |
: endscope ( compilation scope -- ; run-time -- ) \ gforth |
scope? |
scope? |
Line 477 forth definitions
|
Line 490 forth definitions
|
clear-leave-stack |
clear-leave-stack |
0 locals-size ! |
0 locals-size ! |
locals-buffer locals-dp ! |
locals-buffer locals-dp ! |
0 locals-list wordlist-id ! |
0 locals-list ! |
dead-code off |
dead-code off |
defstart ; |
defstart ; |
|
|