[gforth] / gforth / except.fs  

gforth: gforth/except.fs

Diff for /gforth/except.fs between version 1.16 and 1.17

version 1.16, Sun Feb 18 17:57:12 2007 UTC version 1.17, Sun Feb 18 18:30:51 2007 UTC
Line 92 
Line 92 
     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
   
 : (recover) ( -- )  : (endtry) ( -- )
     \ normal end of try block: restore handler, forget rest      \ normal end of try block: restore handler, forget rest
     r>      r>
     r> handler !      r> handler !
Line 102 
Line 102 
     rdrop \ recovery address      rdrop \ recovery address
     >r ;      >r ;
   
 : recover ( compilation  orig1 -- orig2 ; run-time  -- ) \ gforth  : handler-intro, ( -- )
     \ !! check using a special tag  
     POSTPONE else  
     docol: here 0 , 0 , code-address! \ start a colon def      docol: here 0 , 0 , code-address! \ start a colon def
     postpone rdrop                    \ drop the return address      postpone rdrop                    \ drop the return address
   ;
   
   : iferror ( compilation  orig1 -- orig2 ; run-time  -- ) \ gforth
       \ !! check using a special tag
       POSTPONE else handler-intro,
   ; immediate compile-only
   
   : restore ( compilation  orig1 -- ; run-time  -- ) \ gforth
       POSTPONE iferror POSTPONE then
 ; immediate compile-only  ; immediate compile-only
   
 : endtry ( compilation  orig -- ; run-time  -- ) \ gforth  : endtry ( compilation  -- ; run-time  -- ) \ gforth
     POSTPONE then      POSTPONE (endtry)
     POSTPONE (recover)  
 ; immediate compile-only  ; 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
     recover      iferror
         nip          nip
     endtry ;      then endtry ;
 is catch  is catch
   
 :noname ( y1 .. ym error/0 -- y1 .. ym / z1 .. zn error ) \ exception  :noname ( y1 .. ym error/0 -- y1 .. ym / z1 .. zn error ) \ exception


Generate output suitable for use with a patch program
Legend:
Removed from v.1.16  
changed lines
  Added in v.1.17

CVS Admin

Powered by ViewCVS 1.0-dev
(Powered by ViewCVS)

ViewCVS and CVS Help