version 1.21, 2007/12/31 18:40:24
|
version 1.22, 2010/08/31 20:10:59
|
Line 75 Variable first-throw
|
Line 75 Variable first-throw
|
\G backtrace. |
\G backtrace. |
first-throw on ; |
first-throw on ; |
|
|
|
: (try0) ( -- aoldhandler ) |
|
first-throw on |
|
handler @ ; |
|
|
|
[undefined] (try1) [if] |
|
: (try1) ( aoldhandler arecovery -- anewhandler ) |
|
r> |
|
swap >r \ recovery address |
|
sp@ cell+ >r |
|
fp@ >r |
|
lp@ >r |
|
swap >r \ old handler |
|
rp@ swap \ new handler |
|
>r ; |
|
[endif] |
|
|
|
: (try2) |
|
handler ! ; |
|
|
: (try) ( ahandler -- ) |
: (try) ( ahandler -- ) |
first-throw on |
first-throw on |
r> |
r> |
Line 86 Variable first-throw
|
Line 105 Variable first-throw
|
rp@ handler ! |
rp@ handler ! |
>r ; |
>r ; |
|
|
|
\ : try ( compilation -- orig ; run-time -- R:sys1 ) \ gforth |
|
\ \G Start an exception-catching region. |
|
\ POSTPONE ahead here >r >mark 1 cs-roll POSTPONE then |
|
\ r> POSTPONE literal POSTPONE (try) ; immediate compile-only |
|
|
: try ( compilation -- orig ; run-time -- R:sys1 ) \ gforth |
: try ( compilation -- orig ; run-time -- R:sys1 ) \ gforth |
\G Start an exception-catching region. |
\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 |
POSTPONE (try0) r> POSTPONE literal POSTPONE (try1) POSTPONE (try2) |
|
; immediate compile-only |
|
|
|
|
: (endtry) ( -- ) |
: (endtry) ( -- ) |
\ normal end of try block: restore handler, forget rest |
\ normal end of try block: restore handler, forget rest |