scheme@(guile-user)> (use-modules (ice-9 control)) scheme@(guile-user)> (call/ec (lambda (c) (with-continuation-barrier (lambda () (c "through continuation"))) "c-w-b returned")) $1 = "through continuation" The continuation barrier works fine on call/cc continuations and on throw/catch, but doesn't block call/ec continuations. The manual doesn't mention any difference in behaviour for this case, nor can I see any obvious justification for it. The manual's statement that # Thus, `with-continuation-barrier' returns exactly once. is false in this case. I think a continuation barrier should block the use of the call/ec continuation. -zefram
On Fri 13 Nov 2015 04:31, Zefram <zefram@fysh.org> writes:
> scheme@(guile-user)> (use-modules (ice-9 control))
> scheme@(guile-user)> (call/ec (lambda (c) (with-continuation-barrier (lambda () (c "through continuation"))) "c-w-b returned"))
> $1 = "through continuation"
>
> The continuation barrier works fine on call/cc continuations and
> on throw/catch, but doesn't block call/ec continuations. The manual
> doesn't mention any difference in behaviour for this case, nor can I
> see any obvious justification for it. The manual's statement that
>
> # Thus, `with-continuation-barrier' returns exactly once.
>
> is false in this case. I think a continuation barrier should block the
> use of the call/ec continuation.
I agree, good catch.
Andy
This still exists in 3.0.2 scheme@(guile-user)> ,use (ice-9 control) scheme@(guile-user)> (call/ec (lambda (c) (with-continuation-barrier (lambda () (c "through continuation"))) "c-w-b returned")) $1 = "through continuation" scheme@(guile-user)> (version) $2 = "3.0.2"