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))]))