refactor: registry pattern for jolt-hash + jolt-class (jolt-lmot)
Replace the set!-capture-and-rebind chains extending jolt-hash (3 sites: inst-time/ host-table/records) and jolt-class (3 sites: bigdec/natives-queue/host-table) with a register-hash-arm! / register-class-arm! registry (the pattern already used by register-str-render!). The base dispatcher walks its arms — disjoint types, so order is immaterial — then falls to the base cases. The entry is stable, so the per-site (def-var! "clojure.core" "class" …) re-points are gone. Behaviour-preserving (runtime .ss, no re-mint): jinst hash, bigdec/queue/record class, record hash, and a sorted-map hashing as its plain map all verified; make test green, 0 new corpus divergences. First two of six dispatchers; get/=/pr-str follow.
This commit is contained in:
parent
bcd752717e
commit
d168d1195b
7 changed files with 34 additions and 19 deletions
|
|
@ -67,8 +67,7 @@
|
|||
(cond ((jrec? a) (and (jrec? b) (jrec=? a b)))
|
||||
((jrec? b) #f)
|
||||
(else (%r-jolt=2 a b)))))
|
||||
(define %r-jolt-hash jolt-hash)
|
||||
(set! jolt-hash (lambda (x) (if (jrec? x) (jrec-hash x) (%r-jolt-hash x))))
|
||||
(register-hash-arm! jrec? jrec-hash)
|
||||
(define %r-jolt-get jolt-get)
|
||||
(set! jolt-get (case-lambda
|
||||
((coll k) (if (jrec? coll) (jrec-lookup coll k jolt-nil) (%r-jolt-get coll k)))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue