; ( xt -- ) Exceptions
; R( -- ) or R( ny -- )
; execute the XT and restore stack frame if an exception is thrown
VE_CATCH:
.db $05, "catch"
.dw VE_HEAD
.set VE_HEAD = VE_CATCH
XT_CATCH:
.dw DO_COLON
PFA_CATCH:
; sp@ >r
.dw XT_SP_FETCH
.dw XT_TO_R
; handler @ >r
.dw XT_HANDLER
.dw XT_FETCH
.dw XT_TO_R
; rp@ handler !
.dw XT_RP_FETCH
.dw XT_HANDLER
.dw XT_STORE
.dw XT_EXECUTE
; r> handler !
.dw XT_R_FROM
.dw XT_HANDLER
.dw XT_STORE
.dw XT_R_FROM
.dw XT_DROP
.dw XT_ZERO
.dw XT_EXIT