Make define-type work at top-level

Closes PR 12913

original commit: f3e6276f9b2e0a50d54cc83ba05dcf670b5146da
This commit is contained in:
Asumu Takikawa 2013-05-13 16:47:35 -04:00
parent 02bc10ef98
commit f6230841c0
2 changed files with 21 additions and 3 deletions

View File

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

View File

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