From 5cf65e28fc23b371f6c70ddeef5ffbc9dcdec3eb Mon Sep 17 00:00:00 2001 From: Eric Dobson Date: Mon, 23 Jun 2014 23:20:38 -0700 Subject: [PATCH] Add equality operations for Reps. This speeds up microbenchmarks by 50%, and new-metrics.rkt by 30%. --- .../typed-racket-lib/typed-racket/rep/rep-utils.rkt | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/pkgs/typed-racket-pkgs/typed-racket-lib/typed-racket/rep/rep-utils.rkt b/pkgs/typed-racket-pkgs/typed-racket-lib/typed-racket/rep/rep-utils.rkt index 3631af7d86..c842c85211 100644 --- a/pkgs/typed-racket-pkgs/typed-racket-lib/typed-racket/rep/rep-utils.rkt +++ b/pkgs/typed-racket-pkgs/typed-racket-lib/typed-racket/rep/rep-utils.rkt @@ -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