(class x) returns a JVM-faithful Class value
class / .getClass now return a Class value that renders like the JVM — (str c)/.toString -> "class <name>", pr -> "<name>", .getName/.getSimpleName/ .getCanonicalName work — but stays = and hash equal to its name string, so (= (class x) String), class-keyed maps, multimethod dispatch on class, and instance? keep working against the bare class-name tokens. instance? unwraps a Class passed as the type arg. clojure.test/class-match? no longer assumes (class e) is a string (a jolt-ism; on the JVM a Class isn't a string either) — reads the name via .getName. Matches JVM Class.toString, which libraries surface in error messages (clojure.data.json DJSON-54 expects "...of class java.net.URI"). data.json suite 139/139 bar the one UTF-16 surrogate test (Unicode-scalar char model). 5 corpus rows certified vs JVM; make test + shakesmoke green, 0 new divergences.
This commit is contained in:
parent
9092b30f8b
commit
8c7b98e5f2
5 changed files with 43 additions and 8 deletions
|
|
@ -41,11 +41,17 @@
|
|||
;; (thrown? Class …) match (records.ss ex-info-map?/ex-info-class).
|
||||
((ex-info-map? x) (ex-info-class x))
|
||||
(else (jolt-str-render-one (jolt-type x)))))
|
||||
(define (jolt-class x)
|
||||
;; the class NAME of x (string), or nil for nil. (class x) wraps it in a Class
|
||||
;; value (make-class-obj, host-static-classes.ss) so it renders like a JVM Class
|
||||
;; while staying = its name string.
|
||||
(define (jolt-class-name x)
|
||||
(let loop ((as jolt-class-arms))
|
||||
(cond ((null? as) (jolt-class-base x))
|
||||
(((caar as) x) ((cdar as) x))
|
||||
(else (loop (cdr as))))))
|
||||
(define (jolt-class x)
|
||||
(let ((n (jolt-class-name x)))
|
||||
(if (jolt-nil? n) jolt-nil (make-class-obj n))))
|
||||
|
||||
(def-var! "clojure.core" "class" jolt-class)
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue