Add display-continuation.
This commit is contained in:
parent
a061a2fa33
commit
c7e5b8e20a
|
@ -84,3 +84,26 @@ Error: exception
|
|||
(channel-maybe-write 32 '#{Byte-vector 10} 0 1 '#{Output-channel 4} ---)
|
||||
|
||||
WARNING: Returning does not work from a scsh with a running REPL!!!
|
||||
|
||||
|
||||
|
||||
(with-fatal-and-capturing-error-handler handler thunk)
|
||||
|
||||
An exception handler with allows to capture the continuation of the
|
||||
exception. Here HANDLER is a procedure like
|
||||
|
||||
(handler condition continuation decline) -> val
|
||||
|
||||
CONDITION and DECLINE are the same as in the usual WITH-HANDLER
|
||||
procedure. CONTINUATION represents the continuation of the
|
||||
exception. However, this is not a procedure but the VM's continuation
|
||||
object. The continuation of HANDLER is the continuation of
|
||||
WITH-FATAL-AND-CAPTURING-ERROR-HANDLER.
|
||||
|
||||
|
||||
(display-continuation continuation [port] -> unspecified
|
||||
|
||||
The procedural analogy to the ,proceed command. Continuation must be a
|
||||
continuation object as captured by
|
||||
WITH-FATAL-AND-CAPTURING-ERROR-HANDLER, not a procedure as captured by
|
||||
CALL-WITH-CURRENT-CONTINUATION.
|
|
@ -5,7 +5,7 @@
|
|||
;;; the distribution.
|
||||
|
||||
;; From SUnet plus one more call/cc to capture the continuation of the error
|
||||
(define (with-fatal-and-capturing-error-handler* handler thunk)
|
||||
(define (with-fatal-and-capturing-error-handler handler thunk)
|
||||
(call-with-current-continuation
|
||||
(lambda (accept)
|
||||
((call-with-current-continuation
|
||||
|
@ -23,7 +23,7 @@
|
|||
(lambda () (call-with-values thunk accept)))))))))
|
||||
|
||||
(define (with-inspecting-handler port prepare thunk)
|
||||
(with-fatal-and-capturing-error-handler*
|
||||
(with-fatal-and-capturing-error-handler
|
||||
(lambda (condition condition-continuation more)
|
||||
(with-handler
|
||||
(lambda (c2 m2)
|
||||
|
@ -37,3 +37,16 @@
|
|||
(with-continuation condition-continuation (lambda () res)))
|
||||
(more))))
|
||||
thunk))
|
||||
|
||||
(define display-preview (eval 'display-preview
|
||||
(rt-structure->environment (reify-structure 'debugging))))
|
||||
|
||||
(define (display-continuation continuation . maybe-port)
|
||||
(let ((out (if (null? maybe-port)
|
||||
(current-output-port)
|
||||
(car maybe-port))))
|
||||
(if continuation
|
||||
(display-preview (continuation-preview continuation)
|
||||
out)
|
||||
(display 'bottom-contination out))))
|
||||
|
|
@ -3,7 +3,9 @@
|
|||
remote-repl))
|
||||
|
||||
(define-interface inspect-exception-interface
|
||||
(export with-inspecting-handler))
|
||||
(export with-inspecting-handler
|
||||
with-fatal-and-capturing-error-handler
|
||||
display-continuation))
|
||||
|
||||
(define-interface socket2stdports-interface
|
||||
(export socket<->stdports))
|
||||
|
|
|
@ -10,6 +10,8 @@
|
|||
(define-structure inspect-exception inspect-exception-interface
|
||||
|
||||
(open scheme-with-scsh
|
||||
rt-modules
|
||||
exceptions
|
||||
conditions
|
||||
escapes
|
||||
handle
|
||||
|
@ -20,4 +22,4 @@
|
|||
(open scheme-with-scsh
|
||||
handle
|
||||
threads)
|
||||
(files socket2stdport))
|
||||
(files socket2stdport))
|
||||
|
|
Loading…
Reference in New Issue