: save/restore-error ( quot -- )
error get-global
+ original-error get-global
error-continuation get-global
- [ call ] 2dip
+ [ call ] 3dip
error-continuation set-global
+ original-error set-global
error set-global ; inline
run-bootstrap-init
f error set-global
+ f original-error set-global
f error-continuation set-global
nano-count swap - bootstrap-time set-global
swap [ set-datastack ] dip
] (( stack quot -- new-stack )) call-effect-unsafe ;
+SYMBOL: original-error
SYMBOL: error
SYMBOL: error-continuation
SYMBOL: error-thread
<PRIVATE
: save-error ( error -- )
- dup error set-global
- compute-restarts restarts set-global ;
+ [ error set-global ]
+ [ compute-restarts restarts set-global ] bi ;
PRIVATE>
dup save-error
catchstack* empty? [
thread-error-hook get-global
- [ (( error -- * )) call-effect-unsafe ] [ die ] if*
+ [ original-error get-global die ] or
+ (( error -- * )) call-effect-unsafe
] when
c> continue-with ;
! 63 = self
63 special-object error-thread set-global
continuation error-continuation set-global
- rethrow
+ [ original-error set-global ] [ rethrow ] bi
] 5 set-special-object
! VM adds this to kernel errors, so that user-space
! can identify them