From 2bd20a652e7ae523871e165ebfcb616153d2eadd Mon Sep 17 00:00:00 2001 From: Asumu Takikawa Date: Wed, 7 May 2014 10:51:13 -0400 Subject: [PATCH] Fix registration of Opaque type alias in REPL Closes PR 14487 --- .../typed-racket-lib/typed-racket/base-env/prims.rkt | 8 ++++++-- .../tests/typed-racket/unit-tests/interactive-tests.rkt | 7 +++++++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/pkgs/typed-racket-pkgs/typed-racket-lib/typed-racket/base-env/prims.rkt b/pkgs/typed-racket-pkgs/typed-racket-lib/typed-racket/base-env/prims.rkt index 82601a9e5e..e49446fbd1 100644 --- a/pkgs/typed-racket-pkgs/typed-racket-lib/typed-racket/base-env/prims.rkt +++ b/pkgs/typed-racket-pkgs/typed-racket-lib/typed-racket/base-env/prims.rkt @@ -139,7 +139,7 @@ This file defines two sorts of primitives. All of them are provided into any mod [syntax/define (normalize-definition)] [typed-racket/private/parse-type (parse-type)] [typed-racket/private/type-contract (type->contract type->contract-fail)] - [typed-racket/env/type-name-env (register-type-name)])) + [typed-racket/env/type-alias-env (register-resolved-type-alias)])) (define-for-syntax (with-type* expr ty) (with-type #`(ann #,expr #,ty))) @@ -380,7 +380,11 @@ This file defines two sorts of primitives. All of them are provided into any mod (pattern #:name-exists)) (syntax-parse stx [(_ ty:id pred:id lib (~optional ne:name-exists-kw) ...) - (register-type-name #'ty (make-Opaque #'pred)) + ;; This line appears redundant with the use of `define-type-alias` below, but + ;; it's actually necessary for top-level uses because this opaque type may appear + ;; in subsequent `require/typed` clauses, which needs to parse the types at + ;; expansion-time, not at typechecking time when aliases are installed. + (register-resolved-type-alias #'ty (make-Opaque #'pred)) (with-syntax ([hidden (generate-temporary #'pred)]) (quasisyntax/loc stx (begin diff --git a/pkgs/typed-racket-pkgs/typed-racket-test/tests/typed-racket/unit-tests/interactive-tests.rkt b/pkgs/typed-racket-pkgs/typed-racket-test/tests/typed-racket/unit-tests/interactive-tests.rkt index eca80deb95..ac749dba6e 100644 --- a/pkgs/typed-racket-pkgs/typed-racket-test/tests/typed-racket/unit-tests/interactive-tests.rkt +++ b/pkgs/typed-racket-pkgs/typed-racket-test/tests/typed-racket/unit-tests/interactive-tests.rkt @@ -100,6 +100,13 @@ (test-form #rx"^$" (struct foo ())) + ;; PR 14487 + (test-form-not-exn + (require/typed racket/base + [#:opaque Evt evt?] + [alarm-evt (Real -> Evt)] + [sync (Evt -> Any)])) + ;; PR 14380 (test-form-not-exn (begin - (void)))