Add equality operations for Reps.

This speeds up microbenchmarks by 50%, and new-metrics.rkt by 30%.

original commit: 5cf65e28fc23b371f6c70ddeef5ffbc9dcdec3eb
This commit is contained in:
Eric Dobson 2014-06-23 23:20:38 -07:00
parent 0acb67a97f
commit f55296aa2d

View File

@ -30,7 +30,12 @@
;; free-vars: cached free type variables
;; free-idxs: cached free dot sequence variables
;; stx: originating syntax for error-reporting
(define-struct Rep (seq free-vars free-idxs stx) #:transparent)
(define-struct Rep (seq free-vars free-idxs stx) #:transparent
#:methods gen:equal+hash
[(define (equal-proc x y recur)
(eq? (unsafe-Rep-seq x) (unsafe-Rep-seq y)))
(define (hash-proc x recur) (unsafe-Rep-seq x))
(define (hash2-proc x recur) (unsafe-Rep-seq x))])
;; evil tricks for hygienic yet unhygienic-looking reference
;; in say def-type for type-ref-id