Diff for /gforth/except.fs between versions 1.17 and 1.21

version 1.17, 2007/02/18 18:30:51 version 1.21, 2007/12/31 18:40:24
Line 1 Line 1
 \ catch, throw, etc.  \ catch, throw, etc.
   
 \ Copyright (C) 1999,2000,2003,2006 Free Software Foundation, Inc.  \ Copyright (C) 1999,2000,2003,2006,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.  
   
 \ !! use a separate exception stack?           anton  \ !! use a separate exception stack?           anton
   
Line 87  Variable first-throw Line 86  Variable first-throw
     rp@ handler !      rp@ handler !
     >r ;      >r ;
   
 : try ( compilation  -- orig ; run-time  -- ) \ gforth  : try ( compilation  -- orig ; run-time  -- R:sys1 ) \ gforth
     \ !! does not work correctly for gforth-native      \G Start an exception-catching region.
     POSTPONE ahead here >r >mark 1 cs-roll POSTPONE then      POSTPONE ahead here >r >mark 1 cs-roll POSTPONE then
     r> POSTPONE literal POSTPONE (try) ; immediate compile-only      r> POSTPONE literal POSTPONE (try) ; immediate compile-only
   
Line 108  Variable first-throw Line 107  Variable first-throw
 ;  ;
   
 : iferror ( compilation  orig1 -- orig2 ; run-time  -- ) \ gforth  : iferror ( compilation  orig1 -- orig2 ; run-time  -- ) \ gforth
       \G Starts the exception handling code (executed if there is an
       \G exception between @code{try} and @code{endtry}).  This part has
       \G to be finished with @code{then}.
     \ !! check using a special tag      \ !! check using a special tag
     POSTPONE else handler-intro,      POSTPONE else handler-intro,
 ; immediate compile-only  ; immediate compile-only
   
 : restore ( compilation  orig1 -- ; run-time  -- ) \ gforth  : restore ( compilation  orig1 -- ; run-time  -- ) \ gforth
       \G Starts restoring code, that is executed if there is an
       \G exception, and if there is no exception.
     POSTPONE iferror POSTPONE then      POSTPONE iferror POSTPONE then
 ; immediate compile-only  ; immediate compile-only
   
 : endtry ( compilation  -- ; run-time  -- ) \ gforth  : endtry ( compilation  -- ; run-time  R:sys1 -- ) \ gforth
       \G End an exception-catching region.
     POSTPONE (endtry)      POSTPONE (endtry)
 ; immediate compile-only  ; immediate compile-only
   
   : endtry-iferror ( compilation  orig1 -- orig2 ; run-time  R:sys1 -- ) \ gforth
       \G End an exception-catching region while starting
       \G exception-handling code outside that region (executed if there
       \G is an exception between @code{try} and @code{endtry-iferror}).
       \G This part has to be finished with @code{then} (or
       \G @code{else}...@code{then}).
       POSTPONE (endtry) POSTPONE iferror POSTPONE (endtry)
   ; immediate compile-only
   
 :noname ( x1 .. xn xt -- y1 .. ym 0 / z1 .. zn error ) \ exception  :noname ( x1 .. xn xt -- y1 .. ym 0 / z1 .. zn error ) \ exception
     try      try
         execute 0          execute 0
Line 140  is catch Line 154  is catch
             2 (bye)              2 (bye)
 \           quit  \           quit
         THEN          THEN
         dup rp!          dup rp! ( ... ball frame )
         rdrop          cell+ dup @ lp!
         r> lp!          cell+ dup @ fp!
         r> fp!          cell+ dup @ ( ... ball addr sp ) -rot 2>r sp! drop 2r>
         r> -rot 2>r sp! drop 2r>          cell+ @ perform
         r@ swap rp! perform  
     THEN ;      THEN ;
 is throw  is throw

Removed from v.1.17  
changed lines
  Added in v.1.21


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>