diff --git a/collects/racket/generator.rkt b/collects/racket/generator.rkt index 2db0bd0014..1ce50ac7e4 100644 --- a/collects/racket/generator.rkt +++ b/collects/racket/generator.rkt @@ -113,9 +113,11 @@ (lambda (stx) (syntax-case stx () [((id ...) (_ body0 body ...)) + (with-syntax ([(stops ...) (syntax-case #'((id stop-value) ...) () + [((x v) ...) #'(v ...)])]) #'[(id ...) - (in-producer (generator () body0 body ... stop-value) - stop-value)]]))) + (in-producer (generator () body0 body ... (values stops ...)) + (lambda xs (eq? (car xs) stop-value)))])]))) (define (sequence->generator sequence) (generator () (for ([i sequence]) (yield i)))) diff --git a/collects/tests/racket/for.rktl b/collects/tests/racket/for.rktl index 2780ce238f..cd0ed75a4a 100644 --- a/collects/tests/racket/for.rktl +++ b/collects/tests/racket/for.rktl @@ -242,6 +242,13 @@ (for/list ([(x i) (in-indexed (in-generator (yield 1) (yield 2) (yield 3)))]) (list x i))) +(test '[(1 2) (3 4)] 'for*-generator + (for*/list ([(n after) + (in-generator + (yield 1 2) + (yield 3 4))]) + (list n after))) + (let ([helper (lambda (i) (yield (add1 i)))]) (test '(1 2 3) 'parameterized-yield