Fix [_ _] inline method field binding + Var protocol dispatch
Two gaps reitit-core surfaced (now 322/0/1 -> 327/0/0): - A deftype/defrecord inline method with two _ params, (m [_ _] field), read the field as nil: mk-clause bound fields off (get _ :field) where _ was the first param, but the second _ shadowed it. Each _ param is now renamed to a fresh symbol so the instance is unambiguous. - A var did not dispatch to a protocol's clojure.lang.Var extension (reitit extends Expand to Var for a #'handler route): value-host-tags gained a var arm (Var/clojure.lang.Var/IDeref/IFn) and host-type-set gained Var/IDeref so the extension keys under Var. deftype/defrecord is a seed source, re-minted.
This commit is contained in:
parent
9404512b97
commit
6b99591266
5 changed files with 633 additions and 621 deletions
|
|
@ -570,4 +570,7 @@
|
|||
{:suite "macro-args" :expr "(do (defmacro sm [x] [(set? x) (map? x)]) (sm #{1 2}))" :expected "[true false]"}
|
||||
{:suite "macro-args" :expr "(do (defmacro ws [x] (conj x :z)) (= #{1 :z} (ws #{1})))" :expected "true"}
|
||||
{:suite "macro-args" :expr "(do (defmacro vm [x] (vector? x)) (vm [1 2]))" :expected "true"}
|
||||
{:suite "deftype-method" :expr "(do (defprotocol P (m [_ o])) (defrecord R [n] P (m [_ _] n)) (m (->R 5) :x))" :expected "5"}
|
||||
{:suite "deftype-method" :expr "(do (defprotocol P2 (m2 [_ o])) (deftype T [n] P2 (m2 [_ _] n)) (m2 (->T 7) :x))" :expected "7"}
|
||||
{:suite "protocol-host" :expr "(do (defprotocol Q (e [_])) (extend-protocol Q clojure.lang.Var (e [_] :var)) [(satisfies? Q (var map)) (e (var map))])" :expected "[true :var]"}
|
||||
]
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue