From 2e1a81b34542bca319879d1ececcc168c7d0a78b Mon Sep 17 00:00:00 2001 From: Milo Turner Date: Wed, 7 Feb 2018 12:32:36 -0500 Subject: [PATCH] for/stream can use #:break as advertised (fixes #1910) --- pkgs/racket-test-core/tests/racket/stream.rktl | 5 +++++ racket/collects/racket/stream.rkt | 12 +++++++----- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/pkgs/racket-test-core/tests/racket/stream.rktl b/pkgs/racket-test-core/tests/racket/stream.rktl index 22f419f1b9..e8311d02c2 100644 --- a/pkgs/racket-test-core/tests/racket/stream.rktl +++ b/pkgs/racket-test-core/tests/racket/stream.rktl @@ -62,4 +62,9 @@ (test 1 'for/stream (stream-first (for*/stream ([x '(1 0)]) (/ x)))) (test 625 'for/stream (stream-ref (for/stream ([x (in-naturals)]) (* x x)) 25)) +(test '(0 1 2 3 4 5) stream->list (for/stream ([i (in-naturals)] #:break (> i 5)) i)) +(test '(0 1 2 3 4 5) stream->list (for/stream ([i (in-naturals)]) #:break (> i 5) i)) +(test '(0 1 2 3 4 5) stream->list (for/stream ([i (in-naturals)]) + (define ii (sqr i)) #:break (> ii 30) i)) + (report-errs) diff --git a/racket/collects/racket/stream.rkt b/racket/collects/racket/stream.rkt index 6cafb4b97b..ea770509c9 100644 --- a/racket/collects/racket/stream.rkt +++ b/racket/collects/racket/stream.rkt @@ -317,10 +317,12 @@ (raise-syntax-error (syntax-e #'derived-stx) "missing body expression after sequence bindings" stx #'body)) - #`(sequence->stream - (in-generator - (#,derived-stx #,stx () clauses - (yield (let () . body)) - (values)))))])) + (with-syntax ([((pre-body ...) body*) (split-for-body stx #'body)]) + #`(sequence->stream + (in-generator + (#,derived-stx #,stx () clauses + pre-body ... + (yield (let () . body*)) + (values))))))])) (values (make-for/stream #'for/fold/derived) (make-for/stream #'for*/fold/derived))))