version 1.57, 2005/12/31 15:46:08
|
version 1.61, 2011/12/21 18:00:00
|
Line 1
|
Line 1
|
\ A powerful locals implementation |
\ A powerful locals implementation |
|
|
\ Copyright (C) 1995,1996,1997,1998,2000,2003,2004,2005 Free Software Foundation, Inc. |
\ Copyright (C) 1995,1996,1997,1998,2000,2003,2004,2005,2007 Free Software Foundation, Inc. |
|
|
\ This file is part of Gforth. |
\ This file is part of Gforth. |
|
|
\ Gforth is free software; you can redistribute it and/or |
\ Gforth is free software; you can redistribute it and/or |
\ modify it under the terms of the GNU General Public License |
\ modify it under the terms of the GNU General Public License |
\ as published by the Free Software Foundation; either version 2 |
\ as published by the Free Software Foundation, either version 3 |
\ of the License, or (at your option) any later version. |
\ of the License, or (at your option) any later version. |
|
|
\ This program is distributed in the hope that it will be useful, |
\ This program is distributed in the hope that it will be useful, |
Line 15
|
Line 15
|
\ GNU General Public License for more details. |
\ GNU General Public License for more details. |
|
|
\ You should have received a copy of the GNU General Public License |
\ You should have received a copy of the GNU General Public License |
\ along with this program; if not, write to the Free Software |
\ along with this program. If not, see http://www.gnu.org/licenses/. |
\ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA. |
|
|
|
|
|
\ More documentation can be found in the manual and in |
\ More documentation can be found in the manual and in |
Line 225 variable locals-dp \ so here's the speci
|
Line 224 variable locals-dp \ so here's the speci
|
: 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 |
Line 314 also locals-types
|
Line 316 also locals-types
|
|
|
\ 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 |
Line 352 new-locals-map mappedwordlist Constant n
|
Line 356 new-locals-map mappedwordlist Constant n
|
\ 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 |
Line 368 locals-types definitions
|
Line 368 locals-types definitions
|
|
|
: } ( 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 |
Line 686 forth definitions
|
Line 686 forth definitions
|
endcase ; |
endcase ; |
interpret/compile: TO ( c|w|d|r "name" -- ) \ core-ext,local |
interpret/compile: TO ( c|w|d|r "name" -- ) \ core-ext,local |
|
|
: locals| |
: locals| ( ... "name ..." -- ) \ local-ext locals-bar |
\ don't use 'locals|'! use '{'! A portable and free '{' |
\ don't use 'locals|'! use '{'! A portable and free '{' |
\ implementation is compat/anslocals.fs |
\ implementation is compat/anslocals.fs |
BEGIN |
BEGIN |