diff --git a/pkgs/racket-test/tests/racket/contract/prof.rkt b/pkgs/racket-test/tests/racket/contract/prof.rkt index 8c6f204bb4..e990c32388 100644 --- a/pkgs/racket-test/tests/racket/contract/prof.rkt +++ b/pkgs/racket-test/tests/racket/contract/prof.rkt @@ -556,4 +556,10 @@ (eval '(set-add s 3)) (eval '(set-member? s 3)))) + (test/spec-passed + 'contract-marks61 + '(let () + (eval '(require racket/stream)) + (eval '(stream-first (contract (stream/c pos-blame?) (in-range 3) 'pos 'neg))))) + ) diff --git a/racket/collects/racket/stream.rkt b/racket/collects/racket/stream.rkt index a2d9220c78..362b3941fa 100644 --- a/racket/collects/racket/stream.rkt +++ b/racket/collects/racket/stream.rkt @@ -256,15 +256,20 @@ (unless (stream? val) (raise-blame-error blame #:missing-party neg-party val '(expected "a stream" given: "~e") val)) + (define blame+neg-party (cons blame neg-party)) (if (list? val) (listof-elem-ctc-neg-acceptor val neg-party) (impersonate/chaperone-stream val - (λ (v) (elem-ctc-late-neg-acceptor v neg-party)) + (λ (v) (with-contract-continuation-mark + blame+neg-party + (elem-ctc-late-neg-acceptor v neg-party))) (λ (v) - (if (list? v) - (listof-elem-ctc-neg-acceptor v neg-party) - (stream/c-late-neg-proj-val-acceptor v neg-party))) + (with-contract-continuation-mark + blame+neg-party + (if (list? v) + (listof-elem-ctc-neg-acceptor v neg-party) + (stream/c-late-neg-proj-val-acceptor v neg-party)))) impersonator-prop:contracted ctc impersonator-prop:blame stream-blame))) stream/c-late-neg-proj-val-acceptor))