--- gforth/kernel/cond.fs 2003/01/01 17:28:30 1.14 +++ gforth/kernel/cond.fs 2010/12/31 18:09:02 1.24 @@ -1,12 +1,12 @@ \ Structural Conditionals 12dec92py -\ Copyright (C) 1995,1996,1997,2000 Free Software Foundation, Inc. +\ Copyright (C) 1995,1996,1997,2000,2003,2004,2007,2010 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/. 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 @@ -105,10 +104,13 @@ variable backedge-locals \ Structural Conditionals 12dec92py +defer other-control-flow ( -- ) +\ hook for control-flow stuff that's not handled by begin-like etc. + : ?struc ( flag -- ) abort" unstructured " ; : sys? ( sys -- ) dup 0= ?struc ; : >mark ( -- orig ) - cs-push-orig 0 , ; + cs-push-orig 0 , other-control-flow ; : >resolve ( addr -- ) here swap ! basic-block-end ; @@ -148,7 +150,7 @@ immediate restrict \ people who have not been brought up with Forth (or who have been \ brought up with fig-Forth). -: ELSE ( compilation orig1 -- orig2 ; run-time f -- ) \ core +: ELSE ( compilation orig1 -- orig2 ; run-time -- ) \ core POSTPONE ahead 1 cs-roll POSTPONE then ; immediate restrict @@ -222,7 +224,7 @@ Avariable leave-sp leave-stack 3 cells leave-sp ! ; : DONE ( compilation orig -- ; run-time -- ) \ gforth - \ !! the original done had ( addr -- ) + \g resolves all LEAVEs up to the compilaton orig (from a BEGIN) drop >r drop begin leave>