From f6230841c080fd477988a9d6b8166450cb8c51cd Mon Sep 17 00:00:00 2001 From: Asumu Takikawa Date: Mon, 13 May 2013 16:47:35 -0400 Subject: [PATCH] Make `define-type` work at top-level Closes PR 12913 original commit: f3e6276f9b2e0a50d54cc83ba05dcf670b5146da --- collects/tests/typed-racket/succeed/pr12913.rkt | 10 ++++++++++ collects/typed-racket/typecheck/tc-toplevel.rkt | 14 +++++++++++--- 2 files changed, 21 insertions(+), 3 deletions(-) create mode 100644 collects/tests/typed-racket/succeed/pr12913.rkt diff --git a/collects/tests/typed-racket/succeed/pr12913.rkt b/collects/tests/typed-racket/succeed/pr12913.rkt new file mode 100644 index 00000000..494553ea --- /dev/null +++ b/collects/tests/typed-racket/succeed/pr12913.rkt @@ -0,0 +1,10 @@ +#lang racket + +;; Test that `define-type` works at the top-level + +(define ns (make-base-namespace)) +(eval '(require typed/racket) ns) +(eval '(define-type Foo (U String Symbol)) ns) +(eval '(: x Foo) ns) +(eval '(define x 'x) ns) + diff --git a/collects/typed-racket/typecheck/tc-toplevel.rkt b/collects/typed-racket/typecheck/tc-toplevel.rkt index 5e1c87a0..39393865 100644 --- a/collects/typed-racket/typecheck/tc-toplevel.rkt +++ b/collects/typed-racket/typecheck/tc-toplevel.rkt @@ -417,7 +417,15 @@ ;; used only from #%top-interaction ;; syntax -> (values #f (or/c void? tc-results/c)) (define (tc-toplevel-form form) - (tc-toplevel/pass1 form) - (begin0 (values #f (tc-toplevel/pass2 form)) - (report-all-errors))) + (syntax-parse form + [((~literal begin) e ...) + (for-each tc-toplevel-form (syntax->list #'(e ...))) + (begin0 (values #f (tc-toplevel/pass2 form)) + (report-all-errors))] + [_ + (when ((internal-syntax-pred define-type-alias-internal) form) + ((compose register-type-alias parse-type-alias) form)) + (tc-toplevel/pass1 form) + (begin0 (values #f (tc-toplevel/pass2 form)) + (report-all-errors))]))