diff --git a/collects/mzlib/contract.ss b/collects/mzlib/contract.ss index 7e127ec..876377c 100644 --- a/collects/mzlib/contract.ss +++ b/collects/mzlib/contract.ss @@ -2084,7 +2084,8 @@ add struct contracts for immutable structs? ... [rng-id ((coerce/select-contract stx-name rng) pos-blame neg-blame src-info orig-str)]) (let ([res-id (rng-id (val (dom-id x) ...))]) - (check-post-expr->pp/h post-expr src-info pos-blame neg-blame orig-str))))))] + (check-post-expr->pp/h post-expr src-info pos-blame neg-blame orig-str) + res-id)))))] [_ (raise-syntax-error name "unknown result specification" stx (syntax result-stuff))]))))))] [(_ ([x dom] ...) pre-expr . result-stuff) diff --git a/collects/tests/mzscheme/contract-test.ss b/collects/tests/mzscheme/contract-test.ss index f4bb841..ad9b2ca 100644 --- a/collects/tests/mzscheme/contract-test.ss +++ b/collects/tests/mzscheme/contract-test.ss @@ -899,6 +899,74 @@ '->r22 '((contract (->r () rst (listof number?) any/c) (lambda w 1) 'pos 'neg) #f)) + + (test/spec-passed/result + '->r23 + '((contract (->r ((i number?) (j (and/c number? (>=/c i)))) number?) + (λ (i j) 1) + 'pos + 'neg) + 1 + 2) + 1) + + (test/spec-passed/result + '->r24 + '((contract (->r ((i number?) (j (and/c number? (>=/c i)))) any) + (λ (i j) 1) + 'pos + 'neg) + 1 + 2) + 1) + + (test/spec-passed/result + '->r25 + '(call-with-values + (λ () + ((contract (->r ((i number?) (j (and/c number? (>=/c i)))) (values [x number?] [y number?])) + (λ (i j) (values 1 2)) + 'pos + 'neg) + 1 + 2)) + list) + '(1 2)) + + (test/spec-passed/result + '->r26 + '((contract (->r ((i number?) (j (and/c number? (>=/c i)))) rest-args any/c number?) + (λ (i j . z) 1) + 'pos + 'neg) + 1 + 2) + 1) + + (test/spec-passed/result + '->r27 + '((contract (->r ((i number?) (j (and/c number? (>=/c i)))) rest-args any/c any) + (λ (i j . z) 1) + 'pos + 'neg) + 1 + 2) + 1) + +(test/spec-passed/result + '->r28 + '(call-with-values + (λ () + ((contract (->r ((i number?) (j (and/c number? (>=/c i)))) rest-args any/c (values [x number?] [y number?])) + (λ (i j . z) (values 1 2)) + 'pos + 'neg) + 1 + 2)) + list) + '(1 2)) + + (test/pos-blame '->pp1 '((contract (->pp ([x number?]) (= x 1) number? result (= x 2))