Only canonicalize non (symbol/fixnum/struct-type)s, since these are already unique
This commit is contained in:
parent
b1c773ddd4
commit
1724860be2
|
@ -8,6 +8,13 @@
|
||||||
(define sentinel (cons #f #f))
|
(define sentinel (cons #f #f))
|
||||||
|
|
||||||
(define (canonicalize val)
|
(define (canonicalize val)
|
||||||
|
(cond
|
||||||
|
[(or (struct-type? val)
|
||||||
|
(symbol? val)
|
||||||
|
(fixnum? val))
|
||||||
|
;; These values already have unique representations.
|
||||||
|
val]
|
||||||
|
[else
|
||||||
(define b (hash-ref canonical-values
|
(define b (hash-ref canonical-values
|
||||||
val
|
val
|
||||||
(lambda ()
|
(lambda ()
|
||||||
|
@ -17,7 +24,7 @@
|
||||||
(if (not b)
|
(if (not b)
|
||||||
(canonicalize val)
|
(canonicalize val)
|
||||||
(let ((v (weak-box-value b sentinel)))
|
(let ((v (weak-box-value b sentinel)))
|
||||||
(if (eq? v sentinel) (canonicalize val) v))))
|
(if (eq? v sentinel) (canonicalize val) v)))]))
|
||||||
|
|
||||||
(module+ test
|
(module+ test
|
||||||
(require rackunit)
|
(require rackunit)
|
||||||
|
|
Loading…
Reference in New Issue