type returns the JVM class (Clojure semantics) (#244)
(type x) was jolt's internal taxonomy keyword (:string/:set/:jolt/inst), which breaks any library dispatching a multimethod on [(type a) (type b)] against java/clojure.lang classes (e.g. clojure.tools.logging.test's matchers). Make the PUBLIC clojure.core/type Clojure's (or (:type meta) (class x)). The taxonomy keyword stays the core model: natives-meta.ss keeps jolt-type and exposes it as __type-tag, which print-method/print-dup dispatch on (so #uuid/#regex/ records still print). The JVM mapping lives in the java host layer — host-class.ss defines the public type next to (class …), and a jinst now reports java.util.Date (was :jolt/inst). So the core emits the taxonomy and the java layer remaps it in one place. unit.edn's type suite updated to the class names. make test green. Co-authored-by: Yogthos <yogthos@gmail.com>
This commit is contained in:
parent
6c03dffd00
commit
687dc60af6
8 changed files with 56 additions and 36 deletions
|
|
@ -132,4 +132,10 @@
|
|||
((procedure? x) ty-fn)
|
||||
(else ty-object))))
|
||||
|
||||
;; jolt-type is the keyword TAXONOMY (:string/:set/:jolt/inst/…) — jolt's native
|
||||
;; value model, with no JVM in it. print-method/print-dup dispatch on it (via
|
||||
;; __type-tag). The PUBLIC clojure.core/type is Clojure's (or (:type meta) (class
|
||||
;; x)) — a JVM class — but that mapping belongs to the java host layer (host-class.ss
|
||||
;; rebinds `type` next to `class`), so this core layer stays JVM-free.
|
||||
(def-var! "clojure.core" "__type-tag" jolt-type)
|
||||
(def-var! "clojure.core" "type" jolt-type)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue