diff --git a/alterator/interfaces/guile/algo.scm b/alterator/interfaces/guile/algo.scm index a773183..aadc8df 100644 --- a/alterator/interfaces/guile/algo.scm +++ b/alterator/interfaces/guile/algo.scm @@ -155,10 +155,12 @@ ;; Implement call/cc in terms of shift (define (call-with-current-continuation p) - (let ((st (current-dynamic-state))) + (let ((st0 (make-dynamic-state (current-dynamic-state)))) (shift k - (with-dynamic-state st - (lambda () - (p k)))))) + (let ((st1 (make-dynamic-state (current-dynamic-state)))) + (set-current-dynamic-state st0) + (p (lambda (x) + (set-current-dynamic-state st1) + (k x))))))) (define call/cc call-with-current-continuation)