+ ;; Any unhandled errors are caught
+ (let ((exception-stack #f))
+ (catch #t
+ ;; Run the actual code the user requested
+ (lambda ()
+ body ...)
+ ;; If something bad happened and we didn't catch it,
+ ;; we'll wrap it up in such a way that the continuation
+ ;; can address it
+ ;; @@: For this stack to work doesn't it have to be
+ (lambda (key . args)
+ (cond
+ ((eq? key '%8sync-caught-error)
+ (match args
+ ((orig-key orig-args orig-stacks)
+ (make-wrapped-exception
+ orig-key orig-args
+ (cons exception-stack orig-stacks)))))
+ (else
+ (make-wrapped-exception key args
+ (list exception-stack)))))
+ (lambda _
+ (set! exception-stack (make-stack #t 1 0)))))))