satisfies? recognizes reify, consistent with instance?
A reify's protocol methods are instance-local, so they aren't in the global type registry that type-satisfies? consults — satisfies? returned false for a reify even when it implemented the protocol. Check the protocols the reify records on itself (the same :jolt/protocols list instance? uses), matching short names like instance? does. Covers single- and multi-protocol reify.
This commit is contained in:
parent
5a1532167c
commit
236dca28d9
2 changed files with 19 additions and 5 deletions
|
|
@ -42,6 +42,12 @@
|
|||
"(do (defprotocol P (m [_])) (defrecord R [] P (m [_] 1)) (satisfies? P (->R)))"]
|
||||
["satisfies? false" "false"
|
||||
"(do (defprotocol P (m [_])) (defrecord R []) (satisfies? P (->R)))"]
|
||||
["satisfies? reify" "true"
|
||||
"(do (defprotocol P (m [_])) (satisfies? P (reify P (m [_] 1))))"]
|
||||
["satisfies? reify multi-protocol" "[true true]"
|
||||
"(do (defprotocol P (m [_])) (defprotocol Q (n [_])) (let [r (reify P (m [_] 1) Q (n [_] 2))] [(satisfies? P r) (satisfies? Q r)]))"]
|
||||
["satisfies? reify other proto" "false"
|
||||
"(do (defprotocol P (m [_])) (defprotocol Q (n [_])) (satisfies? Q (reify P (m [_] 1))))"]
|
||||
["instance? record" "true"
|
||||
"(do (defrecord R [a]) (instance? R (->R 1)))"]
|
||||
["dot constructor" "5"
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue