Shake-out from the conformance-library sweep. Host-side fixes (runtime .ss, no re-mint) plus one analyzer change (re-minted): - Exception fidelity: ex-info and host-constructed throwables (RuntimeException. etc.) now carry their JVM class, so (class e), instance? across the exception hierarchy, .getMessage, and clojure.test thrown?/thrown-with-msg? all work. - .getBytes returns a seqable/countable byte-array and honors UTF-16/UTF-32; String. decodes them. ->bytevector accepts byte-arrays (Base64). - Universal .getClass / .toString / .indexOf / .lastIndexOf on any value/seq. - record? uses the host jrec? predicate (the old (get x :jolt/deftype) crashed on a sorted-map by invoking its comparator). - extend-protocol to abstract host types (clojure.lang.Fn/IFn/APersistentVector, java.net.URI) dispatches. - New host classes: clojure.lang.PersistentQueue, java.util.ArrayList, java.net.URI, java.io.File / java.util.UUID ctors, Double/Float ctors+statics, regex instance? Pattern, System/setProperty. - *assert* / *print-readably* are real settable/bindable vars. - (symbol "ns/name") splits the namespace at the last slash. - letfn fn params desugar destructuring (analyzer; re-minted). unit.edn gains exinfo/hostobj/queue/hostctor/destructure regression rows.
25 lines
1.2 KiB
Scheme
25 lines
1.2 KiB
Scheme
;; dynamic vars — the handful of clojure.core dynamic vars that aren't emitted into
|
|
;; the prelude. These two are plain constants; *ns* (a namespace object) needs a
|
|
;; value type with get-see-through and map?=false and is tracked separately. Loaded
|
|
;; from rt.ss after the value model + def-var!.
|
|
|
|
;; *clojure-version* — a map {:major 1 :minor 11 :incremental 0 :qualifier nil}.
|
|
(def-var! "clojure.core" "*clojure-version*"
|
|
(jolt-hash-map (keyword #f "major") 1
|
|
(keyword #f "minor") 11
|
|
(keyword #f "incremental") 0
|
|
(keyword #f "qualifier") jolt-nil))
|
|
|
|
;; *unchecked-math* — jolt does no unchecked-math elision; the var reads false.
|
|
(def-var! "clojure.core" "*unchecked-math*" #f)
|
|
|
|
;; *warn-on-reflection* — jolt has no reflection, so the var reads false; (set!
|
|
;; *warn-on-reflection* …) resolves and updates it (a no-op effect).
|
|
(def-var! "clojure.core" "*warn-on-reflection*" #f)
|
|
|
|
;; *assert* — gates `assert`; settable/bindable (malli.assert toggles it). Default
|
|
;; true, like the JVM.
|
|
(def-var! "clojure.core" "*assert*" #t)
|
|
|
|
;; *print-readably* — bound by pr-family / with-out-str-style code; default true.
|
|
(def-var! "clojure.core" "*print-readably*" #t)
|