From fe296a8c4da6a27bf12aeaf358261c1c37e2903b Mon Sep 17 00:00:00 2001 From: Eric Dobson Date: Tue, 24 Jun 2014 09:25:30 -0700 Subject: [PATCH] Make interning work on Rep-seq for Reps with complicated fields. This gives ~3% improvement in new-metrics.rkt original commit: 8fb166d67fa6378c90b2cd5e30c0fcf35d330dd4 --- .../typed-racket-lib/typed-racket/rep/filter-rep.rkt | 2 ++ .../typed-racket-lib/typed-racket/rep/type-rep.rkt | 8 +++++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/pkgs/typed-racket-pkgs/typed-racket-lib/typed-racket/rep/filter-rep.rkt b/pkgs/typed-racket-pkgs/typed-racket-lib/typed-racket/rep/filter-rep.rkt index f5edf2ae..cb7235e6 100644 --- a/pkgs/typed-racket-pkgs/typed-racket-lib/typed-racket/rep/filter-rep.rkt +++ b/pkgs/typed-racket-pkgs/typed-racket-lib/typed-racket/rep/filter-rep.rkt @@ -47,11 +47,13 @@ (def-filter OrFilter ([fs (and/c (length>=/c 2) (listof (or/c TypeFilter? NotTypeFilter? ImpFilter?)))]) + [#:intern (map Rep-seq fs)] [#:fold-rhs (*OrFilter (map filter-rec-id fs))] [#:frees (λ (f) (combine-frees (map f fs)))]) (def-filter AndFilter ([fs (and/c (length>=/c 2) (listof (or/c OrFilter? TypeFilter? NotTypeFilter? ImpFilter?)))]) + [#:intern (map Rep-seq fs)] [#:fold-rhs (*AndFilter (map filter-rec-id fs))] [#:frees (λ (f) (combine-frees (map f fs)))]) diff --git a/pkgs/typed-racket-pkgs/typed-racket-lib/typed-racket/rep/type-rep.rkt b/pkgs/typed-racket-pkgs/typed-racket-lib/typed-racket/rep/type-rep.rkt index dc5f3c21..65b02a9f 100644 --- a/pkgs/typed-racket-pkgs/typed-racket-lib/typed-racket/rep/type-rep.rkt +++ b/pkgs/typed-racket-pkgs/typed-racket-lib/typed-racket/rep/type-rep.rkt @@ -171,6 +171,7 @@ ;; elems are all Types (def-type HeterogeneousVector ([elems (listof Type/c)]) + [#:intern (map Rep-seq elems)] [#:frees (λ (f) (make-invariant (combine-frees (map f elems))))] [#:key 'vector] [#:fold-rhs (*HeterogeneousVector (map type-rec-id elems))]) @@ -292,6 +293,7 @@ [#:fold-rhs (*Result (type-rec-id t) (filter-rec-id f) (object-rec-id o))]) (def-type Values ([rs (listof Result?)]) + [#:intern (map Rep-seq rs)] [#:frees (λ (f) (combine-frees (map f rs)))] [#:fold-rhs (*Values (map type-rec-id rs))]) @@ -300,6 +302,7 @@ [#:fold-rhs #:base]) (def-type ValuesDots ([rs (listof Result?)] [dty Type/c] [dbound (or/c symbol? natural-number/c)]) + [#:intern (list (map Rep-seq rs) (Rep-seq dty) dbound)] [#:frees (if (symbol? dbound) (free-vars-remove (combine-frees (map free-vars* (cons dty rs))) dbound) (combine-frees (map free-vars* (cons dty rs)))) @@ -353,6 +356,7 @@ ;; arities : Listof[arr] (def-type Function ([arities (listof arr?)]) + [#:intern (map Rep-seq arities)] [#:key 'procedure] [#:frees (λ (f) (combine-frees (map f arities)))] [#:fold-rhs (*Function (map type-rec-id arities))]) @@ -361,7 +365,7 @@ (def-type fld ([t Type/c] [acc identifier?] [mutable? boolean?]) [#:frees (λ (f) (if mutable? (make-invariant (f t)) (f t)))] [#:fold-rhs (*fld (type-rec-id t) acc mutable?)] - [#:intern (list t (hash-id acc) mutable?)]) + [#:intern (list (Rep-seq t) (hash-id acc) mutable?)]) ;; name : identifier ;; parent : Struct @@ -433,6 +437,7 @@ (and sorted? (type