diff --git a/collects/mzlib/contract.ss b/collects/mzlib/contract.ss index 7135a59..e60e32d 100644 --- a/collects/mzlib/contract.ss +++ b/collects/mzlib/contract.ss @@ -1401,7 +1401,7 @@ ... (check-contract dom-rest-x arg-rest-x neg-blame pos-blame src-info)))))) (lambda (body stx) (syntax (lambda x (error 'impl-contract "unimplemented for ->* (any case)")))) - (syntax (x (error 'impl-contract "unimplemented for ->* (any case)"))) + (syntax ((dom-x ... . dom-rest-x) (error 'impl-contract "unimplemented for ->* (any case)"))) (syntax (lambda x (error 'impl-contract "unimplemented for ->* (any case)")))))])) ;; ->d/h : stx -> (values (syntax -> syntax) (syntax -> syntax) (syntax -> syntax)) @@ -1454,9 +1454,9 @@ pos-blame neg-blame src-info)))))) - (lambda (body stx) (syntax (lambda x (error 'impl-contract "unimplemented for ->d")))) - (syntax (x (error 'impl-contract "unimplemented for ->d"))) - (syntax (lambda x (error 'impl-contract "unimplemented for ->d"))))))])) + (lambda (body stx) (syntax (lambda x (error 'impl-contract "unimplemented for ->d.1")))) + (syntax ((dom-x ...) (error 'impl-contract "unimplemented for ->d.2"))) + (syntax (lambda x (error 'impl-contract "unimplemented for ->d.3"))))))])) ;; ->d*/h : stx -> (values (syntax -> syntax) (syntax -> syntax) (syntax -> syntax)) (define (->d*/h stx) @@ -1592,7 +1592,7 @@ rng-contracts results)))))))))) (lambda (body stx) (syntax (lambda x (error 'impl-contract "unimplemented for ->d*")))) - (syntax (x (error 'impl-contract "unimplemented for ->d*"))) + (syntax ((dom-x ...) (error 'impl-contract "unimplemented for ->d*"))) (syntax (lambda x (error 'impl-contract "unimplemented for ->d*")))))])) ;; select/h : syntax -> /h-function diff --git a/collects/tests/mzscheme/contract-test.ss b/collects/tests/mzscheme/contract-test.ss index a84c2ad..3478bda 100644 --- a/collects/tests/mzscheme/contract-test.ss +++ b/collects/tests/mzscheme/contract-test.ss @@ -39,6 +39,9 @@ ensure-contract-failed expression)) + (define (test/well-formed stx) + (expand stx)) + (test/spec-passed 'contract-flat1 '(contract not #f 'pos 'neg)) @@ -1105,6 +1108,18 @@ 'pos 'neg) 'not-integer) + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;; ;; + ;; case-> arity tests ;; + ;; ;; + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + (test/well-formed #'(case-> (-> integer? integer?))) + (test/well-formed #'(case-> (-> integer? integer?) (-> integer? integer? integer?))) + (test/well-formed #'(case-> (-> integer? integer?) (-> integer? integer? any))) + (test/well-formed #'(case-> (-> integer? any) (-> integer? integer? any))) + (test/well-formed #'(case-> (integer? integer? . ->d . (lambda x integer?)) ((any?) any? . ->* . (any?)))) ))