diff --git a/pkgs/racket-test-core/tests/racket/for.rktl b/pkgs/racket-test-core/tests/racket/for.rktl index 10d10b90da..a0219efbee 100644 --- a/pkgs/racket-test-core/tests/racket/for.rktl +++ b/pkgs/racket-test-core/tests/racket/for.rktl @@ -98,6 +98,23 @@ (test-sequence [(a b c) (0 1 2)] (in-indexed '(a b c))) +;; Make sure `in-indexed` doesn't provide a bad position to the underlying +;; sequence +(let () + (define pre-poss '()) + (define post-poss '()) + (define naturals-sequence + (make-do-sequence (thunk (values identity + add1 + 1 + (lambda (pos) (set! pre-poss (cons pos pre-poss)) #t) + #f + (lambda (pos val) (set! post-poss (cons pos post-poss)) #t))))) + (let-values (((next? next) (sequence-generate (in-indexed naturals-sequence)))) + (for ((n 3)) (next))) + (test '(3 2 1) values pre-poss) + (test '(2 1) values post-poss)) + (let () (define (counter) (define n 0) (lambda ([d 1]) (set! n (+ d n)) n)) (test-sequence [(1 2 3 4)] (for/list ([x (in-producer (counter))] [y (in-range 4)]) x)) diff --git a/racket/collects/racket/private/for.rkt b/racket/collects/racket/private/for.rkt index 120c73757b..c8b2750e43 100644 --- a/racket/collects/racket/private/for.rkt +++ b/racket/collects/racket/private/for.rkt @@ -1133,7 +1133,7 @@ (and pre-cont? (lambda (val idx) (pre-cont? val))) (and post-cont? - (lambda (pos val idx) (post-cont? pos val)))))))) + (lambda (pos val idx) (post-cont? (car pos) val)))))))) (define (in-value v) (make-do-sequence (lambda ()