edn: read raw forms so a #tag goes through :readers/:default
clojure.edn/read built the built-in #inst/#uuid eagerly (via read-string), so a :readers override couldn't win and #inst applied to a non-string form (aero's #inst ^:ref […]) threw. Read the raw form instead and let edn->value route every tag through :readers then :default then the built-in — matching clojure.edn, where a reader from opts wins. edn->value now also converts the (recursively converted) metadata, since the raw path skips the read-string data seam. aero suite: 59/0/0 (full pass). clojure.edn baked, re-minted.
This commit is contained in:
parent
3491312ca1
commit
135bad9d3a
4 changed files with 18 additions and 8 deletions
|
|
@ -739,3 +739,8 @@
|
|||
(def-var! "clojure.core" "read-string" jolt-read-string)
|
||||
(def-var! "clojure.core" "__parse-next" jolt-parse-next)
|
||||
(def-var! "clojure.core" "__read-tagged" jolt-read-tagged)
|
||||
;; __read-form-raw: the read form WITHOUT building values — set/tagged literals
|
||||
;; stay FORMS. clojure.edn reads this so it applies a #tag through its :readers/
|
||||
;; :default (a #inst can be overridden to defer), rather than read-string building
|
||||
;; the built-in #inst eagerly (which fails on a non-string like #inst ^:ref […]).
|
||||
(def-var! "clojure.core" "__read-form-raw" jolt-read-form-raw)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue