1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-04-30 20:00:19 +02:00
guile/test-suite/vm/t-call-cc.scm
Andreas Rottmann 13f1461c24 Add VM test for call/cc in non-tail position
* test-suite/vm/t-call-cc.scm: Add test case using call/cc in a non-tail
  position.
2011-03-20 01:00:09 +01:00

30 lines
801 B
Scheme

(let ((set-counter2 #f))
(define (get-counter2)
(call/cc
(lambda (k)
(set! set-counter2 k)
1)))
(define (loop counter1)
(let ((counter2 (get-counter2)))
(set! counter1 (1+ counter1))
(cond ((not (= counter1 counter2))
(error "bad call/cc behaviour" counter1 counter2))
((> counter1 10)
#t)
(else
(set-counter2 (1+ counter2))))))
(loop 0))
(let* ((next #f)
(counter 0)
(result (call/cc
(lambda (k)
(set! next k)
1))))
(set! counter (+ 1 counter))
(cond ((not (= counter result))
(error "bad call/cc behaviour" counter result))
((> counter 10)
#t)
(else
(next (+ 1 counter)))))