Diff for /gforth/except.fs between versions 1.9 and 1.14

version 1.9, 2003/11/23 22:52:29 version 1.14, 2006/12/28 20:53:03
Line 76  Defer store-backtrace Line 76  Defer store-backtrace
   
 \ !! explain handler on-stack structure  \ !! explain handler on-stack structure
   
   Variable first-throw
   : nothrow ( -- ) \ gforth
       \G Use this (or the standard sequence @code{['] false catch drop})
       \G after a @code{catch} or @code{endtry} that does not rethrow;
       \G this ensures that the next @code{throw} will record a
       \G backtrace.
       first-throw on ;
   
 : (try) ( ahandler -- )  : (try) ( ahandler -- )
       first-throw on
     r>      r>
     swap >r \ recovery address      swap >r \ recovery address
     rp@ 'catch >r      rp@ 'catch >r
Line 85  Defer store-backtrace Line 94  Defer store-backtrace
     lp@ >r      lp@ >r
     handler @ >r      handler @ >r
     rp@ handler !      rp@ handler !
     backtrace-empty on  
     >r ;      >r ;
   
 : try ( compilation  -- orig ; run-time  -- ) \ gforth  : try ( compilation  -- orig ; run-time  -- ) \ gforth
Line 126  is catch Line 134  is catch
 :noname ( y1 .. ym error/0 -- y1 .. ym / z1 .. zn error ) \ exception  :noname ( y1 .. ym error/0 -- y1 .. ym / z1 .. zn error ) \ exception
     ?DUP IF      ?DUP IF
         [ here forthstart 9 cells + ! ]          [ here forthstart 9 cells + ! ]
         store-backtrace          first-throw @ IF
               store-backtrace error-stack off
               first-throw off
           THEN
         handler @ ?dup-0=-IF          handler @ ?dup-0=-IF
             >stderr cr ." uncaught exception: " .error cr              >stderr cr ." uncaught exception: " .error cr
             2 (bye)              2 (bye)
Line 140  is catch Line 151  is catch
         rdrop 'throw r> perform          rdrop 'throw r> perform
     THEN ;      THEN ;
 is throw  is throw
   [IFDEF] rethrow
   :noname ( y1 .. ym error/0 -- y1 .. ym / z1 .. zn error ) \ exception
       ?DUP IF
           handler @ ?dup-0=-IF
               >stderr cr ." uncaught exception: " .error cr
               2 (bye)
   \           quit
           THEN
           rp!
           r> handler !
           r> lp!
           r> fp!
           r> swap >r sp! drop r>
           rdrop 'throw r> perform
       THEN ;
   is rethrow
   [THEN]

Removed from v.1.9  
changed lines
  Added in v.1.14


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