core: three bug fixes — ifn?, prefer-method dispatch, reader comments in map values
ifn? (jolt-1vx) is the canonical IFn set in the overlay: fns, keywords,
symbols, maps (sorted included), sets, vectors, and vars — NOT lists. The
seed version said true for lists and false for struct maps and vars.
Mutable-mode caveat documented (vectors and lists share the array repr
there). 13 predicate rows.
Multimethod dispatch (jolt-heo) now collects EVERY isa-matching method key
and picks the dominant one — x dominates y when prefer-method'd over it or
(isa? x y) — and two matches with no dominant is an ambiguity ERROR, as in
Clojure. It used to take whichever key the table yielded first, silently
ignoring prefer-method. The prefers store upgrades to Clojure's
{x -> set-of-dominated} shape, shared between the dispatch closure and
prefer-method-setup via the var; prefers becomes a macro over a setup fn
(the store lives on the VAR — the multifn value can't carry it, so the old
fn read {} forever). 6 multimethod rows + the conformance row updated to
the canonical shape (335x3).
The reader (jolt-ou8) kept the pending KEY when a comment or #_ sits in a
map's VALUE slot: the old code dropped both, desyncing kv pairing — the
real value became the next key and the closing brace landed in value
position ('Unmatched closing brace'). Selmer's deps.edn (a '; for
development (REPL, etc)' comment between key and value) now parses; 6
reader rows incl. nested commented maps.
Gate: jpm exit 0, conformance 335x3, all tests passed.
This commit is contained in:
parent
19606730a3
commit
c06af7c9f4
9 changed files with 133 additions and 21 deletions
|
|
@ -58,3 +58,15 @@
|
|||
["tagged literal var" "true" "(var? #'+)"]
|
||||
["deref sugar" "5" "(let [a (atom 5)] @a)"]
|
||||
["meta sugar" "{:t 1}" "(meta ^{:t 1} [])"])
|
||||
|
||||
# Comments and #_ discards in a map's VALUE slot keep the pending key
|
||||
# (jolt-ou8: dropping both desynced kv pairing — Selmer's deps.edn, with a
|
||||
# "; for development (REPL, etc)" comment between key and value, read its
|
||||
# closing brace in value position: 'Unmatched closing brace').
|
||||
(defspec "reader / comments inside maps"
|
||||
["comment in value slot" "{:a 1}" "{:a ; note\n 1}"]
|
||||
["comment before key" "{:a 1}" "{; lead\n :a 1}"]
|
||||
["comment between entries" "{:a 1 :b 2}" "{:a 1 ; mid\n :b 2}"]
|
||||
["discard in value slot" "{:a 1}" "{:a #_9 1}"]
|
||||
["comment with parens" "{:a {:b 1}}" "{:a ; dev (REPL, etc)\n {:b 1}}"]
|
||||
["nested with comments" "{:x {:y 2}}" "{:x ; outer\n {:y ; inner\n 2}}"])
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue