From cc08aafdaf089d9fc76d49898fad32ca9f4d952e Mon Sep 17 00:00:00 2001 From: Kevin Ryde Date: Sun, 17 Aug 2003 00:40:33 +0000 Subject: [PATCH] (while): Exercise break and continue from recursive nested loops. --- test-suite/tests/syntax.test | 37 ++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/test-suite/tests/syntax.test b/test-suite/tests/syntax.test index bbdda2735..6aa33eebb 100644 --- a/test-suite/tests/syntax.test +++ b/test-suite/tests/syntax.test @@ -675,6 +675,22 @@ (outer-break) (unreachable))) (unreachable)) + #t) + + (pass-if "from recursive" + (let ((outer-break #f)) + (define (r n) + (while #t + (if (eq? n 'outer) + (begin + (set! outer-break break) + (r 'inner)) + (begin + (outer-break) + (unreachable)))) + (if (eq? n 'inner) + (error "broke only from inner loop"))) + (r 'outer)) #t)) (with-test-prefix "continue" @@ -717,4 +733,25 @@ (while #t (outer-continue) (unreachable))))) + #t) + + (pass-if "from recursive" + (let ((outer-continue #f)) + (define (r n) + (let ((cond (make-iterations-cond 3)) + (first #t)) + (while (begin + (if (and (not first) + (eq? n 'inner)) + (error "continued only to inner loop")) + (cond)) + (set! first #f) + (if (eq? n 'outer) + (begin + (set! outer-continue continue) + (r 'inner)) + (begin + (outer-continue) + (unreachable)))))) + (r 'outer)) #t)))