| \ Structural Conditionals 12dec92py |
\ Structural Conditionals 12dec92py |
| |
|
| \ Copyright (C) 1995,1996,1997 Free Software Foundation, Inc. |
\ Copyright (C) 1995-2003 Free Software Foundation, Inc. |
| |
|
| \ This file is part of Gforth. |
\ This file is part of Gforth. |
| |
|
| |
|
| \ 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, write to the Free Software |
| \ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
\ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA. |
| |
|
| here 0 , \ just a dummy, the real value of locals-list is patched into it in glocals.fs |
here 0 , \ just a dummy, the real value of locals-list is patched into it in glocals.fs |
| AConstant locals-list \ acts like a variable that contains |
AConstant locals-list \ acts like a variable that contains |
| : sys? ( sys -- ) dup 0= ?struc ; |
: sys? ( sys -- ) dup 0= ?struc ; |
| : >mark ( -- orig ) |
: >mark ( -- orig ) |
| cs-push-orig 0 , ; |
cs-push-orig 0 , ; |
| : >resolve ( addr -- ) here over - swap ! ; |
: >resolve ( addr -- ) |
| : <resolve ( addr -- ) here - , ; |
here swap ! |
| |
basic-block-end ; |
| |
: <resolve ( addr -- ) , ; |
| |
|
| : BUT |
: BUT |
| 1 cs-roll ; immediate restrict |
1 cs-roll ; immediate restrict |
| ' noop IS begin-like |
' noop IS begin-like |
| |
|
| : BEGIN ( compilation -- dest ; run-time -- ) \ core |
: BEGIN ( compilation -- dest ; run-time -- ) \ core |
| begin-like cs-push-part dest ; immediate restrict |
begin-like cs-push-part dest |
| |
basic-block-end ; immediate restrict |
| |
|
| Defer again-like ( dest -- addr ) |
Defer again-like ( dest -- addr ) |
| ' nip IS again-like |
' nip IS again-like |
| : AGAIN ( compilation dest -- ; run-time -- ) \ core-ext |
: AGAIN ( compilation dest -- ; run-time -- ) \ core-ext |
| dest? again-like POSTPONE branch <resolve ; immediate restrict |
dest? again-like POSTPONE branch <resolve ; immediate restrict |
| |
|
| Defer until-like |
Defer until-like ( list addr xt1 xt2 -- ) |
| : until, ( list addr xt1 xt2 -- ) drop compile, <resolve drop ; |
:noname ( list addr xt1 xt2 -- ) |
| ' until, IS until-like |
drop compile, <resolve drop ; |
| |
IS until-like |
| |
|
| : UNTIL ( compilation dest -- ; run-time f -- ) \ core |
: UNTIL ( compilation dest -- ; run-time f -- ) \ core |
| dest? ['] ?branch ['] ?branch-lp+!# until-like ; immediate restrict |
dest? ['] ?branch ['] ?branch-lp+!# until-like ; immediate restrict |
| \G @code{UNLOOP} any outstanding @code{?DO}...@code{LOOP}s. |
\G @code{UNLOOP} any outstanding @code{?DO}...@code{LOOP}s. |
| exit-like |
exit-like |
| POSTPONE ;s |
POSTPONE ;s |
| |
basic-block-end |
| POSTPONE unreachable ; immediate restrict |
POSTPONE unreachable ; immediate restrict |
| |
|
| : ?EXIT ( -- ) ( compilation -- ; run-time nest-sys f -- | nest-sys ) \ gforth |
: ?EXIT ( -- ) ( compilation -- ; run-time nest-sys f -- | nest-sys ) \ gforth |