From 54dfd50b89122fd73d73977ff81b393f620c2785 Mon Sep 17 00:00:00 2001 From: Asumu Takikawa Date: Wed, 5 Nov 2014 13:46:47 -0500 Subject: [PATCH] Unbreak TR's top-level A recent change I made broke optimizations at the top-level --- .../typed-racket-lib/typed-racket/core.rkt | 13 ++++++++----- .../typed-racket/unit-tests/interactive-tests.rkt | 4 ++++ 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/pkgs/typed-racket-pkgs/typed-racket-lib/typed-racket/core.rkt b/pkgs/typed-racket-pkgs/typed-racket-lib/typed-racket/core.rkt index d4dc928e8a..9ce4523632 100644 --- a/pkgs/typed-racket-pkgs/typed-racket-lib/typed-racket/core.rkt +++ b/pkgs/typed-racket-pkgs/typed-racket-lib/typed-racket/core.rkt @@ -73,9 +73,12 @@ (tc-toplevel/full stx #'form (λ (body2 type) (with-syntax* - ([(transformed-body ...) - (change-contract-fixups (flatten-all-begins body2))] - [(optimized-body ...) (maybe-optimize #'(transformed-body ...))]) + ([(optimized-body ...) (maybe-optimize #`(#,body2))] + ;; Transform after optimization for top-level because the flattening will + ;; change syntax object identity (via syntax-track-origin) which doesn't work + ;; for looking up types in the optimizer. + [(transformed-body ...) + (change-contract-fixups (flatten-all-begins #'(begin optimized-body ...)))]) (syntax-parse body2 [_ (let ([ty-str (match type ;; 'no-type means the form is not an expression and @@ -126,5 +129,5 @@ #,(if (unbox include-extra-requires?) extra-requires #'(begin)) - #,(arm #'(begin optimized-body ...))) - (arm #'(begin optimized-body ...))))]))))])) + #,(arm #'(begin transformed-body ...))) + (arm #'(begin transformed-body ...))))]))))])) 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 a8565fc8af..1099a088ea 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,10 @@ (test-form #rx"^$" (struct foo ())) + ;; Make sure that optimized expressions work + (test-form #rx"Flonum" + (+ 1.0 2.0)) + ;; PR 14487 (test-form-not-exn (require/typed racket/base