From 5fa40de5468c3e775b0a3ebe2fb7fcf0f69a56fe Mon Sep 17 00:00:00 2001 From: Asumu Takikawa Date: Tue, 20 Oct 2015 18:34:46 -0400 Subject: [PATCH] Avoid ignoring class/unit forms at the top-level Possibly a better long-term solution (for after the release) is to not use the ignore property here and instead just use the ignore table. --- .../typed-racket/typecheck/toplevel-trampoline.rkt | 10 ++++++++-- typed-racket-test/fail/top-level-unit-and-class.rkt | 8 ++++++++ 2 files changed, 16 insertions(+), 2 deletions(-) create mode 100644 typed-racket-test/fail/top-level-unit-and-class.rkt diff --git a/typed-racket-lib/typed-racket/typecheck/toplevel-trampoline.rkt b/typed-racket-lib/typed-racket/typecheck/toplevel-trampoline.rkt index 2e66d7cf..1402f7c1 100644 --- a/typed-racket-lib/typed-racket/typecheck/toplevel-trampoline.rkt +++ b/typed-racket-lib/typed-racket/typecheck/toplevel-trampoline.rkt @@ -65,8 +65,14 @@ (local-expand/capture* #'e 'top-level (kernel-form-identifier-list)))) (syntax-parse head-expanded #:literal-sets (kernel-literals) - [(begin (define-values (n) _) ... (~or _:ignore^ _:ignore-some^)) - #'e] + [(begin (define-values (n) _) ... + (~and (~or _:ignore^ _:ignore-some^) + (~not (~or _:tr:class^ + _:tr:unit^ + _:tr:unit:invoke^ + _:tr:unit:compound^ + _:tr:unit:from-context^)))) + head-expanded] ;; keep trampolining on begins [(begin (define-values (n) e-rhs) ... (begin e ... e-last)) #`(begin (tc-toplevel-trampoline orig-stx (define-values (n) e-rhs)) diff --git a/typed-racket-test/fail/top-level-unit-and-class.rkt b/typed-racket-test/fail/top-level-unit-and-class.rkt new file mode 100644 index 00000000..24876886 --- /dev/null +++ b/typed-racket-test/fail/top-level-unit-and-class.rkt @@ -0,0 +1,8 @@ +#lang racket/load + +;; A test for GH issue #220 + +(require typed/racket) + +(class object% (super-new) (+ 1 "foo")) +(unit (import) (export) (+ 1 "foo"))