--- gforth/glocals.fs 2005/12/31 15:46:08 1.57 +++ gforth/glocals.fs 2011/12/21 18:00:00 1.61 @@ -1,12 +1,12 @@ \ 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. \ Gforth is free software; you can redistribute it and/or \ 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. \ This program is distributed in the hope that it will be useful, @@ -15,8 +15,7 @@ \ GNU General Public License for more details. \ You should have received a copy of the GNU General Public License -\ along with this program; if not, write to the Free Software -\ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA. +\ along with this program. If not, see http://www.gnu.org/licenses/. \ More documentation can be found in the manual and in @@ -225,9 +224,12 @@ variable locals-dp \ so here's the speci : create-local ( " name" -- a-addr ) \ defines the local "name"; the offset of the local shall be \ stored in a-addr + dp + locals-dp dpp ! create - immediate restrict - here 0 , ( place for the offset ) ; + immediate restrict + here 0 , ( place for the offset ) + swap dpp ! ; : lp-offset ( n1 -- n2 ) \ converts the offset from the frame start to an offset from lp and @@ -314,10 +316,12 @@ also locals-types \ these "locals" are used for comparison in TO +here locals-dp ! c: some-clocal 2drop d: some-dlocal 2drop f: some-flocal 2drop w: some-wlocal 2drop +locals-dp @ dp ! \ the following gymnastics are for declaring locals without type specifier. \ we exploit a feature of our dictionary: every wordlist @@ -352,12 +356,8 @@ new-locals-map mappedwordlist Constant n \ slowvoc ! \ new-locals-map ' new-locals >body wordlist-map A! \ !! use special access words -variable old-dpp - \ and now, finally, the user interface words : { ( -- latestxt wid 0 ) \ gforth open-brace - dp old-dpp ! - locals-dp dpp ! latestxt get-current get-order new-locals-wl swap 1+ set-order also locals definitions locals-types @@ -368,7 +368,7 @@ locals-types definitions : } ( latestxt wid 0 a-addr1 xt1 ... -- ) \ gforth close-brace \ ends locals definitions - ] old-dpp @ dpp ! + ] begin dup while @@ -686,7 +686,7 @@ forth definitions endcase ; 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 '{' \ implementation is compat/anslocals.fs BEGIN