Previous: syntaxes blocking, Up: syntaxes [Contents][Index]
Build and return a thunk that, wherever it is called, evaluates ?thunk in the dynamic environment of the macro use and returns its return values. If ?thunk raises an exception: apply the procedure ?exception-retvals-maker to the raised object and return its return values.
Exceptions raised by ?exception-retvals-maker are not blocked.
Usage examples:
(import (only (vicare checks)
with-result
add-result))
(define parm
(make-parameter #f))
(with-result
(parameterise ((parm 'outer))
(let* ((counter 0)
(thunk (parameterise ((parm 'inner))
(with-current-dynamic-environment
values
(lambda ()
(set! counter (+ 1 counter))
(add-result (list 'inside-thunk (parm))))))))
(add-result (parm))
(add-result 'calling-thunk-1)
(thunk)
(add-result 'calling-thunk-2)
(thunk)
counter)))
⇒ (2 (outer
calling-thunk-1 (inside-thunk inner)
calling-thunk-2 (inside-thunk inner)))
(with-result
(parameterise ((parm 'outer))
(let* ((counter 0)
(thunk (parameterise ((parm 'inner))
(with-current-dynamic-environment
values
(lambda ()
(set! counter (+ 1 counter))
(add-result (list 'inside-thunk (parm)))
(add-result 'raise-exception)
(raise 123))))))
(add-result (parm))
(add-result 'calling-thunk-1)
(let ((A (thunk)))
(add-result 'calling-thunk-2)
(let ((B (thunk)))
(values A B counter))))))
⇒ (123 123 2
(outer
calling-thunk-1 (inside-thunk inner) raise-exception
calling-thunk-2 (inside-thunk inner) raise-exception))
Previous: syntaxes blocking, Up: syntaxes [Contents][Index]
This document describes version 0.1.0-devel.1 of MMCK Exceptional Conditions.