version 1.46, 2000/09/23 15:46:56
|
version 1.50, 2003/01/19 23:35:29
|
Line 1
|
Line 1
|
\ A powerful locals implementation |
\ A powerful locals implementation |
|
|
\ Copyright (C) 1995,1996,1997,1998,2000 Free Software Foundation, Inc. |
\ Copyright (C) 1995-2003 Free Software Foundation, Inc. |
|
|
\ This file is part of Gforth. |
\ This file is part of Gforth. |
|
|
Line 87
|
Line 87
|
|
|
require search.fs |
require search.fs |
require float.fs |
require float.fs |
|
require extend.fs \ for case |
|
|
: compile-@local ( n -- ) \ gforth compile-fetch-local |
: compile-@local ( n -- ) \ gforth compile-fetch-local |
case |
case |
Line 632 forth definitions
|
Line 633 forth definitions
|
endif ; |
endif ; |
|
|
: >definer ( xt -- definer ) |
: >definer ( xt -- definer ) |
\ this gives a unique identifier for the way the xt was defined |
\G @var{Definer} is a unique identifier for the way the @var{xt} |
\ words defined with different does>-codes have different definers |
\G was defined. Words defined with different @code{does>}-codes |
\ the definer can be used for comparison and in definer! |
\G have different definers. The definer can be used for |
|
\G comparison and in @code{definer!}. |
dup >does-code |
dup >does-code |
?dup-if |
?dup-if |
nip 1 or |
nip 1 or |
Line 643 forth definitions
|
Line 645 forth definitions
|
then ; |
then ; |
|
|
: definer! ( definer xt -- ) |
: definer! ( definer xt -- ) |
\ gives the word represented by xt the behaviour associated with definer |
\G The word represented by @var{xt} changes its behaviour to the |
|
\G behaviour associated with @var{definer}. |
over 1 and if |
over 1 and if |
swap [ 1 invert ] literal and does-code! |
swap [ 1 invert ] literal and does-code! |
else |
else |
Line 682 interpret/compile: TO ( c|w|d|r "name" -
|
Line 685 interpret/compile: TO ( c|w|d|r "name" -
|
\ 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 |
name 2dup s" |" compare 0<> |
name 2dup s" |" str= 0= |
WHILE |
WHILE |
(local) |
(local) |
REPEAT |
REPEAT |