From 643c20afdb6ef2447fad5d341f77739e9489b0a7 Mon Sep 17 00:00:00 2001 From: Asumu Takikawa Date: Sat, 27 Dec 2014 04:52:53 -0500 Subject: [PATCH] Add missing contract generation error cases Functions with dotted values or AnyValues in the return type aren't yet supported for contract generation. Related to PR 14894 --- typed-racket-lib/typed-racket/private/type-contract.rkt | 8 +++++++- typed-racket-test/unit-tests/contract-tests.rkt | 6 ++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/typed-racket-lib/typed-racket/private/type-contract.rkt b/typed-racket-lib/typed-racket/private/type-contract.rkt index 27014f84..4b5290b8 100644 --- a/typed-racket-lib/typed-racket/private/type-contract.rkt +++ b/typed-racket-lib/typed-racket/private/type-contract.rkt @@ -586,7 +586,13 @@ (if (from-untyped? typed-side) (fail #:reason (~a "cannot generate contract for function type" " with filters or objects.")) - (convert-arr a))])) + (convert-arr a))] + [(arr: dom (? ValuesDots?) rst drst kws) + (fail #:reason (~a "cannot generate contract for function type" + " with dotted return values"))] + [(arr: dom (? AnyValues?) rst drst kws) + (fail #:reason (~a "cannot generate contract for function type" + " with unknown return values"))])) (define arities (for/list ([t arrs]) (match t diff --git a/typed-racket-test/unit-tests/contract-tests.rkt b/typed-racket-test/unit-tests/contract-tests.rkt index a9a426c7..ff857bff 100644 --- a/typed-racket-test/unit-tests/contract-tests.rkt +++ b/typed-racket-test/unit-tests/contract-tests.rkt @@ -160,6 +160,12 @@ (t/fail (-> (-polydots (a) (->... (list) (a a) -Symbol)) Univ) "cannot generate contract for variable arity polymorphic type") + ;; PR 14894 - FIXME: the polydots case may be possible for typed functions + (t/fail (-polydots (a) (->... (list) (a a) (make-ValuesDots null a 'a))) + "dotted return values") + (t/fail (-> ManyUniv) + "unknown return values") + (t/fail (make-Function (list (make-arr* (list) -Boolean #:kws (list (make-Keyword '#:key Univ #f)))