Read an unknown #tag as a tagged-literal value
An unknown reader tag produced the reader's internal form
{:jolt/type :jolt/tagged :tag :#foo :form bar}, which tagged-literal? didn't
recognize and which leaked as a raw map when printed:
(tagged-literal? (read-string "#foo bar")) => false ; want true
(pr-str (quote [#foo bar])) => "[{:jolt/type :jolt/tagged ...}]"
Both the data path (rdr-construct-tag) and the compile path (emit-quoted) now
build a real tagged-literal for a tag with no registered reader, like Clojure's
*default-data-reader-fn*, so tagged-literal? / :tag / :form / printing all work.
clojure.edn reads raw forms through a separate __read-form-raw path and applies
:readers/:default itself, so it is unaffected.
Re-mint (backend + reader are seed sources); prelude byte-identical, image only.
make test green (selfhost holds, 0 new/stale), +2 unit rows.
This commit is contained in:
parent
f856c16f06
commit
b4d9eaa527
4 changed files with 114 additions and 99 deletions
|
|
@ -312,6 +312,8 @@
|
|||
{:suite "reader" :expr "(nil? (read-string \"nil\"))" :expected "true"}
|
||||
{:suite "reader" :expr "(true? (read-string \"true\"))" :expected "true"}
|
||||
{:suite "reader" :expr "(false? (read-string \"false\"))" :expected "true"}
|
||||
{:suite "reader" :expr "(let [r (read-string \"#foo bar\")] (and (tagged-literal? r) (= (quote foo) (:tag r)) (= (quote bar) (:form r)) (= \"#foo bar\" (pr-str r))))" :expected "true"}
|
||||
{:suite "reader" :expr "(let [t (first (quote [#foo bar]))] (and (tagged-literal? t) (= (quote foo) (:tag t)) (= \"#foo bar\" (pr-str t))))" :expected "true"}
|
||||
{:suite "reader" :expr "(= \\a (read-string \"\\\\a\"))" :expected "true"}
|
||||
{:suite "reader" :expr "(= \\newline (read-string \"\\\\newline\"))" :expected "true"}
|
||||
{:suite "reader" :expr "(= \\space (read-string \"\\\\space\"))" :expected "true"}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue