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)
|
||||
|
|
|
|||
|
|
@ -1061,9 +1061,9 @@
|
|||
(lambda (argv expr . _values) (let fnrec2128 ((argv argv) (expr expr) (_values (list->cseq _values))) (let* ((c (jolt-count argv))) (let* ((_a$2132 (var-deref "clojure.core" "__sqcat")) (_a$2133 (jolt-invoke (var-deref "clojure.core" "__sq1") (jolt-symbol #f "do"))) (_a$2134 (let* ((_a$2130 (lambda (a) (let fnrec2129 ((a a)) (jolt-invoke (var-deref "clojure.template" "apply-template") argv expr a)))) (_a$2131 (jolt-invoke (var-deref "clojure.core" "partition") c _values))) (jolt-map _a$2130 _a$2131)))) (jolt-invoke _a$2132 _a$2133 _a$2134))))))
|
||||
(mark-macro! "clojure.template" "do-template"))
|
||||
(guard (e (#t #f))
|
||||
(def-var! "clojure.edn" "edn->value" (letrec ((edn->value (lambda (opts x) (let fnrec2135 ((opts opts) (x x)) (if (jolt= (keyword "jolt" "set") (jolt-get x (keyword "jolt" "type"))) (let* ((_a$2139 (var-deref "clojure.core" "with-meta")) (_a$2140 (jolt-invoke (var-deref "clojure.core" "set") (let* ((_a$2137 (lambda (v) (let fnrec2136 ((v v)) (edn->value opts v)))) (_a$2138 (jolt-get x (keyword #f "value")))) (jolt-map _a$2137 _a$2138)))) (_a$2141 (jolt-invoke (var-deref "clojure.core" "meta") x))) (jolt-invoke _a$2139 _a$2140 _a$2141)) (if (jolt= (keyword "jolt" "tagged") (jolt-get x (keyword "jolt" "type"))) (let* ((tag (jolt-get x (keyword #f "tag"))) (v (edn->value opts (jolt-get x (keyword #f "form")))) (tag-sym (let* ((n (jolt-invoke (var-deref "clojure.core" "name") tag))) (jolt-invoke (var-deref "clojure.core" "symbol") (if (jolt= "#" (jolt-invoke (var-deref "clojure.core" "subs") n 0 1)) (jolt-invoke (var-deref "clojure.core" "subs") n 1) n)))) (custom (jolt-get (jolt-get opts (keyword #f "readers")) tag-sym))) (if (jolt-truthy? custom) (jolt-invoke custom v) (if (jolt-truthy? (jolt-get opts (keyword #f "default"))) (jolt-invoke (jolt-get opts (keyword #f "default")) tag-sym v) (if (jolt-truthy? (keyword #f "else")) (jolt-invoke (var-deref "clojure.core" "__read-tagged") tag v) jolt-nil)))) (if (jolt-truthy? (jolt-invoke (var-deref "clojure.core" "map?") x)) (let* ((_a$2147 (var-deref "clojure.core" "with-meta")) (_a$2148 (let* ((_a$2145 (jolt-hash-map)) (_a$2146 (jolt-map (lambda (e) (let fnrec2142 ((e e)) (let* ((_o$2143 (edn->value opts (jolt-invoke (var-deref "clojure.core" "key") e))) (_o$2144 (edn->value opts (jolt-invoke (var-deref "clojure.core" "val") e)))) (jolt-vector _o$2143 _o$2144)))) x))) (jolt-into _a$2145 _a$2146))) (_a$2149 (jolt-invoke (var-deref "clojure.core" "meta") x))) (jolt-invoke _a$2147 _a$2148 _a$2149)) (if (jolt-truthy? (jolt-invoke (var-deref "clojure.core" "vector?") x)) (let* ((_a$2151 (var-deref "clojure.core" "with-meta")) (_a$2152 (jolt-invoke (var-deref "clojure.core" "mapv") (lambda (v) (let fnrec2150 ((v v)) (edn->value opts v))) x)) (_a$2153 (jolt-invoke (var-deref "clojure.core" "meta") x))) (jolt-invoke _a$2151 _a$2152 _a$2153)) (if (jolt-truthy? (jolt-invoke (var-deref "clojure.core" "set?") x)) (let* ((_a$2155 (var-deref "clojure.core" "with-meta")) (_a$2156 (jolt-invoke (var-deref "clojure.core" "set") (jolt-map (lambda (v) (let fnrec2154 ((v v)) (edn->value opts v))) x))) (_a$2157 (jolt-invoke (var-deref "clojure.core" "meta") x))) (jolt-invoke _a$2155 _a$2156 _a$2157)) (if (jolt-truthy? (jolt-invoke (var-deref "clojure.core" "seq?") x)) (let* ((_a$2159 (var-deref "clojure.core" "with-meta")) (_a$2160 (jolt-map (lambda (v) (let fnrec2158 ((v v)) (edn->value opts v))) x)) (_a$2161 (jolt-invoke (var-deref "clojure.core" "meta") x))) (jolt-invoke _a$2159 _a$2160 _a$2161)) (if (jolt-truthy? (keyword #f "else")) x jolt-nil))))))))))) edn->value)))
|
||||
(def-var! "clojure.edn" "edn->value" (letrec ((edn->value (lambda (opts x) (let fnrec2135 ((opts opts) (x x)) (if (jolt= (keyword "jolt" "set") (jolt-get x (keyword "jolt" "type"))) (let* ((_a$2139 (var-deref "clojure.core" "with-meta")) (_a$2140 (jolt-invoke (var-deref "clojure.core" "set") (let* ((_a$2137 (lambda (v) (let fnrec2136 ((v v)) (edn->value opts v)))) (_a$2138 (jolt-get x (keyword #f "value")))) (jolt-map _a$2137 _a$2138)))) (_a$2141 (edn->value opts (jolt-invoke (var-deref "clojure.core" "meta") x)))) (jolt-invoke _a$2139 _a$2140 _a$2141)) (if (jolt= (keyword "jolt" "tagged") (jolt-get x (keyword "jolt" "type"))) (let* ((tag (jolt-get x (keyword #f "tag"))) (v (edn->value opts (jolt-get x (keyword #f "form")))) (tag-sym (let* ((n (jolt-invoke (var-deref "clojure.core" "name") tag))) (jolt-invoke (var-deref "clojure.core" "symbol") (if (jolt= "#" (jolt-invoke (var-deref "clojure.core" "subs") n 0 1)) (jolt-invoke (var-deref "clojure.core" "subs") n 1) n)))) (custom (jolt-get (jolt-get opts (keyword #f "readers")) tag-sym))) (if (jolt-truthy? custom) (jolt-invoke custom v) (if (jolt-truthy? (jolt-get opts (keyword #f "default"))) (jolt-invoke (jolt-get opts (keyword #f "default")) tag-sym v) (if (jolt-truthy? (keyword #f "else")) (jolt-invoke (var-deref "clojure.core" "__read-tagged") tag v) jolt-nil)))) (if (jolt-truthy? (jolt-invoke (var-deref "clojure.core" "map?") x)) (let* ((_a$2147 (var-deref "clojure.core" "with-meta")) (_a$2148 (let* ((_a$2145 (jolt-hash-map)) (_a$2146 (jolt-map (lambda (e) (let fnrec2142 ((e e)) (let* ((_o$2143 (edn->value opts (jolt-invoke (var-deref "clojure.core" "key") e))) (_o$2144 (edn->value opts (jolt-invoke (var-deref "clojure.core" "val") e)))) (jolt-vector _o$2143 _o$2144)))) x))) (jolt-into _a$2145 _a$2146))) (_a$2149 (edn->value opts (jolt-invoke (var-deref "clojure.core" "meta") x)))) (jolt-invoke _a$2147 _a$2148 _a$2149)) (if (jolt-truthy? (jolt-invoke (var-deref "clojure.core" "vector?") x)) (let* ((_a$2151 (var-deref "clojure.core" "with-meta")) (_a$2152 (jolt-invoke (var-deref "clojure.core" "mapv") (lambda (v) (let fnrec2150 ((v v)) (edn->value opts v))) x)) (_a$2153 (edn->value opts (jolt-invoke (var-deref "clojure.core" "meta") x)))) (jolt-invoke _a$2151 _a$2152 _a$2153)) (if (jolt-truthy? (jolt-invoke (var-deref "clojure.core" "set?") x)) (let* ((_a$2155 (var-deref "clojure.core" "with-meta")) (_a$2156 (jolt-invoke (var-deref "clojure.core" "set") (jolt-map (lambda (v) (let fnrec2154 ((v v)) (edn->value opts v))) x))) (_a$2157 (edn->value opts (jolt-invoke (var-deref "clojure.core" "meta") x)))) (jolt-invoke _a$2155 _a$2156 _a$2157)) (if (jolt-truthy? (jolt-invoke (var-deref "clojure.core" "seq?") x)) (let* ((_a$2159 (var-deref "clojure.core" "with-meta")) (_a$2160 (jolt-map (lambda (v) (let fnrec2158 ((v v)) (edn->value opts v))) x)) (_a$2161 (edn->value opts (jolt-invoke (var-deref "clojure.core" "meta") x)))) (jolt-invoke _a$2159 _a$2160 _a$2161)) (if (jolt-truthy? (keyword #f "else")) x jolt-nil))))))))))) edn->value)))
|
||||
(guard (e (#t #f))
|
||||
(def-var! "clojure.edn" "read-edn" (letrec ((read-edn (lambda (opts s) (let fnrec2162 ((opts opts) (s s)) (if (jolt-truthy? (let* ((or__26__auto (jolt-nil? s))) (if (jolt-truthy? or__26__auto) or__26__auto (jolt-invoke (var-deref "clojure.string" "blank?") s)))) (jolt-get opts (keyword #f "eof") jolt-nil) (jolt-invoke (var-deref "clojure.edn" "edn->value") opts (jolt-invoke (var-deref "clojure.core" "read-string") s))))))) read-edn)))
|
||||
(def-var! "clojure.edn" "read-edn" (letrec ((read-edn (lambda (opts s) (let fnrec2162 ((opts opts) (s s)) (if (jolt-truthy? (let* ((or__26__auto (jolt-nil? s))) (if (jolt-truthy? or__26__auto) or__26__auto (jolt-invoke (var-deref "clojure.string" "blank?") s)))) (jolt-get opts (keyword #f "eof") jolt-nil) (jolt-invoke (var-deref "clojure.edn" "edn->value") opts (jolt-invoke (var-deref "clojure.core" "__read-form-raw") s))))))) read-edn)))
|
||||
(guard (e (#t #f))
|
||||
(def-var-with-meta! "clojure.edn" "read-string" (letrec ((read-string (case-lambda ((s) (let fnrec2163 ((s s)) (jolt-invoke (var-deref "clojure.edn" "read-edn") (jolt-hash-map) s))) ((opts s) (let fnrec2164 ((opts opts) (s s)) (jolt-invoke (var-deref "clojure.edn" "read-edn") opts s)))))) read-string) (let* ((_o$2165 (keyword #f "doc")) (_o$2166 "Reads one object from the string s. Returns the :eof option value (default\n nil) for nil or blank input. opts is an options map; :eof sets the value\n returned at end of input.")) (jolt-hash-map _o$2165 _o$2166))))
|
||||
(guard (e (#t #f))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue