From 5f2dfa51442a0adfa20a0aa44bdfb681cd18eca2 Mon Sep 17 00:00:00 2001 From: Vincent St-Amour Date: Sat, 28 Sep 2013 10:53:29 -0400 Subject: [PATCH] Fix reporting of struct constructors in TR. --- .../typed-racket/optimizer/hidden-costs.rkt | 4 +++- .../missed-optimizations/struct-constructor.rkt | 15 +++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 pkgs/typed-racket-pkgs/typed-racket-test/tests/typed-racket/optimizer/missed-optimizations/struct-constructor.rkt diff --git a/pkgs/typed-racket-pkgs/typed-racket-lib/typed-racket/optimizer/hidden-costs.rkt b/pkgs/typed-racket-pkgs/typed-racket-lib/typed-racket/optimizer/hidden-costs.rkt index 1b940b4c51..5f88e395ca 100644 --- a/pkgs/typed-racket-pkgs/typed-racket-lib/typed-racket/optimizer/hidden-costs.rkt +++ b/pkgs/typed-racket-pkgs/typed-racket-lib/typed-racket/optimizer/hidden-costs.rkt @@ -29,6 +29,8 @@ ;; Log calls to struct constructors, so that OC can report those used in ;; hot loops. (pattern (#%plain-app op:id args:opt-expr ...) - #:when (struct-constructor? #'op) + #:when (let ([constructor-for (syntax-property #'op 'constructor-for)]) + (or (and constructor-for (struct-constructor? constructor-for)) + (struct-constructor? #'op))) #:do [(log-optimization-info "struct constructor" #'op)] #:with opt #'(op args.opt ...))) diff --git a/pkgs/typed-racket-pkgs/typed-racket-test/tests/typed-racket/optimizer/missed-optimizations/struct-constructor.rkt b/pkgs/typed-racket-pkgs/typed-racket-test/tests/typed-racket/optimizer/missed-optimizations/struct-constructor.rkt new file mode 100644 index 0000000000..9945db3fe9 --- /dev/null +++ b/pkgs/typed-racket-pkgs/typed-racket-test/tests/typed-racket/optimizer/missed-optimizations/struct-constructor.rkt @@ -0,0 +1,15 @@ +#;#; +#<