Make interning work on Rep-seq for Reps with complicated fields.
This gives ~3% improvement in new-metrics.rkt original commit: 8fb166d67fa6378c90b2cd5e30c0fcf35d330dd4
This commit is contained in:
parent
334d9975df
commit
fe296a8c4d
|
@ -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)))])
|
||||
|
||||
|
|
|
@ -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<? last e))
|
||||
e))])
|
||||
sorted?))))])
|
||||
[#:intern (map Rep-seq elems)]
|
||||
[#:frees (λ (f) (combine-frees (map f elems)))]
|
||||
[#:fold-rhs (apply Un (map type-rec-id elems))]
|
||||
[#:key
|
||||
|
@ -539,6 +544,7 @@
|
|||
;; includes lists, vectors, etc
|
||||
;; tys : sequence produces this set of values at each step
|
||||
(def-type Sequence ([tys (listof Type/c)])
|
||||
[#:intern (map Rep-seq tys)]
|
||||
[#:frees (λ (f) (combine-frees (map f tys)))]
|
||||
[#:key #f] [#:fold-rhs (*Sequence (map type-rec-id tys))])
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user