From 99f3f62a6e33deea249198f54549dc429ec2997e Mon Sep 17 00:00:00 2001 From: Asumu Takikawa Date: Wed, 22 Jan 2014 21:28:30 -0500 Subject: [PATCH] Fix parsing for keyword & rest arg function types Closes PR 14309 original commit: b9493ab142e910053ffe7db7d30fe434e8ba2de1 --- .../typed-racket/private/parse-type.rkt | 2 +- .../unit-tests/parse-type-tests.rkt | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/pkgs/typed-racket-pkgs/typed-racket-lib/typed-racket/private/parse-type.rkt b/pkgs/typed-racket-pkgs/typed-racket-lib/typed-racket/private/parse-type.rkt index 93139460..e5749275 100644 --- a/pkgs/typed-racket-pkgs/typed-racket-lib/typed-racket/private/parse-type.rkt +++ b/pkgs/typed-racket-pkgs/typed-racket-lib/typed-racket/private/parse-type.rkt @@ -323,7 +323,7 @@ (parse-type #'rng) : (-FS (attribute latent.positive) (attribute latent.negative)) : (attribute latent.object))] - [(dom:non-keyword-ty ... rest:non-keyword-ty ddd:star kws:keyword-tys ... :->^ rng) + [(dom:non-keyword-ty ... kws:keyword-tys ... rest:non-keyword-ty ddd:star :->^ rng) (make-Function (list (make-arr (parse-types #'(dom ...)) diff --git a/pkgs/typed-racket-pkgs/typed-racket-test/tests/typed-racket/unit-tests/parse-type-tests.rkt b/pkgs/typed-racket-pkgs/typed-racket-test/tests/typed-racket/unit-tests/parse-type-tests.rkt index f8458f98..fdc981ec 100644 --- a/pkgs/typed-racket-pkgs/typed-racket-test/tests/typed-racket/unit-tests/parse-type-tests.rkt +++ b/pkgs/typed-racket-pkgs/typed-racket-test/tests/typed-racket/unit-tests/parse-type-tests.rkt @@ -135,6 +135,24 @@ [FAIL (Struct-Type Integer)] [FAIL (Struct-Type foo)] [Struct-TypeTop (make-StructTypeTop)] + + ;; keyword function types + [(#:a String -> String) + (->optkey [] #:a -String #t -String)] + [([#:a String] -> String) + (->optkey [] #:a -String #f -String)] + [(#:a String #:b String -> String) + (->optkey [] #:a -String #t #:b -String #t -String)] + [([#:a String] #:b String -> String) + (->optkey [] #:a -String #f #:b -String #t -String)] + [(#:a String [#:b String] -> String) + (->optkey [] #:a -String #t #:b -String #f -String)] + [(String #:a String -> String) + (->optkey -String [] #:a -String #t -String)] + [(String #:a String String * -> String) + (->optkey -String [] #:rest -String #:a -String #t -String)] + [(String [#:a String] String * -> String) + (->optkey -String [] #:rest -String #:a -String #f -String)] )) ;; FIXME - add tests for parse-values-type, parse-tc-results