diff --git a/pkgs/racket-test/tests/racket/contract/prof.rkt b/pkgs/racket-test/tests/racket/contract/prof.rkt index 33ac45faa4..4570d03a49 100644 --- a/pkgs/racket-test/tests/racket/contract/prof.rkt +++ b/pkgs/racket-test/tests/racket/contract/prof.rkt @@ -583,4 +583,18 @@ marked?) #t) + (test/spec-passed + 'contract-marks63 + '(let () + (eval '(require racket/sequence)) + (eval '(sequence->list (contract (sequence/c pos-blame?) (in-range 3) 'pos 'neg))))) + + (test/spec-passed + 'contract-marks64 + '(let () + (eval '(require racket/sequence racket/dict)) + (eval '(sequence-ref (contract (sequence/c pos-blame? pos-blame?) + (in-dict '((1 . 2) (3 . 4))) 'pos 'neg) + 0)))) + ) diff --git a/racket/collects/racket/sequence.rkt b/racket/collects/racket/sequence.rkt index d8d1e26848..f07d4b9c72 100644 --- a/racket/collects/racket/sequence.rkt +++ b/racket/collects/racket/sequence.rkt @@ -218,6 +218,7 @@ orig-blame #:missing-party neg-party seq '(expected: "a sequence" given: "~e") seq)) + (define blame+neg-party (cons orig-blame neg-party)) (define result-seq (make-do-sequence (lambda () @@ -228,7 +229,9 @@ next (case-lambda [(elem) - (p elem neg-party)] + (with-contract-continuation-mark + blame+neg-party + (p elem neg-party))] [elems (define n-elems (length elems)) (raise-blame-error @@ -251,6 +254,7 @@ orig-blame #:missing-party neg-party seq '(expected: "a sequence" given: "~e") seq)) + (define blame+neg-party (cons orig-blame neg-party)) (define result-seq (make-do-sequence (lambda () @@ -260,17 +264,19 @@ (call-with-values next (lambda elems - (define n-elems (length elems)) - (unless (= n-elems n-cs) - (raise-blame-error - blame #:missing-party neg-party seq - '(expected: "a sequence of ~a values" given: "~a values\n values: ~e") - n-cs n-elems elems)) - (apply - values - (for/list ([elem (in-list elems)] - [p (in-list ps)]) - (p elem neg-party)))))) + (with-contract-continuation-mark + blame+neg-party + (define n-elems (length elems)) + (unless (= n-elems n-cs) + (raise-blame-error + blame #:missing-party neg-party seq + '(expected: "a sequence of ~a values" given: "~a values\n values: ~e") + n-cs n-elems elems)) + (apply + values + (for/list ([elem (in-list elems)] + [p (in-list ps)]) + (p elem neg-party))))))) add1 0 (lambda (idx)