fix: assert was a no-op (fell through to Janet builtin); add proper Clojure assert macro that throws on falsy; err-message unwraps ex-info
This commit is contained in:
parent
aeaf1b624c
commit
3e12ef31e3
2 changed files with 19 additions and 2 deletions
|
|
@ -2069,6 +2069,18 @@
|
||||||
@[{:jolt/type :symbol :ns nil :name "for"} bindings for-body]]
|
@[{:jolt/type :symbol :ns nil :name "for"} bindings for-body]]
|
||||||
nil])
|
nil])
|
||||||
|
|
||||||
|
# assert — (assert x) / (assert x message). Throws when x is falsy.
|
||||||
|
(defn core-assert [x & more]
|
||||||
|
(def msg-form
|
||||||
|
(if (> (length more) 0)
|
||||||
|
(first more)
|
||||||
|
(let [b @""] (pr-render b x) (string "Assert failed: " (string b)))))
|
||||||
|
@[{:jolt/type :symbol :ns nil :name "if"}
|
||||||
|
x
|
||||||
|
nil
|
||||||
|
@[{:jolt/type :symbol :ns nil :name "throw"}
|
||||||
|
@[{:jolt/type :symbol :ns nil :name "ex-info"} msg-form {}]]])
|
||||||
|
|
||||||
# resolve stub — returns nil (symbols not found in Jolt's clojure.core)
|
# resolve stub — returns nil (symbols not found in Jolt's clojure.core)
|
||||||
(defn core-resolve [sym] nil)
|
(defn core-resolve [sym] nil)
|
||||||
|
|
||||||
|
|
@ -2481,6 +2493,7 @@
|
||||||
"format" core-format
|
"format" core-format
|
||||||
"letfn" core-letfn
|
"letfn" core-letfn
|
||||||
"doseq" core-doseq
|
"doseq" core-doseq
|
||||||
|
"assert" core-assert
|
||||||
"first" core-first
|
"first" core-first
|
||||||
"rest" core-rest
|
"rest" core-rest
|
||||||
"next" core-next
|
"next" core-next
|
||||||
|
|
@ -2746,7 +2759,7 @@
|
||||||
(defn core-macro-names
|
(defn core-macro-names
|
||||||
"Set of core binding names that are macros."
|
"Set of core binding names that are macros."
|
||||||
[]
|
[]
|
||||||
@{"and" true "or" true "cond" true "case" true "for" true "when" true "when-not" true "if-let" true "when-let" true "if-some" true "when-some" true "doto" true "defn" true "defn-" true "declare" true "fn" true "let" true "loop" true "defrecord" true "defprotocol" true "extend-type" true "extend-protocol" true "extend" true "reify" true "proxy" true "definterface" true "comment" true "binding" true "lazy-seq" true "lazy-cat" true "if-not" true "when-first" true "condp" true "dotimes" true "while" true "some->" true "some->>" true "cond->" true "cond->>" true "as->" true "->" true "->>" true "letfn" true "doseq" true "delay" true})
|
@{"and" true "or" true "cond" true "case" true "for" true "when" true "when-not" true "if-let" true "when-let" true "if-some" true "when-some" true "doto" true "defn" true "defn-" true "declare" true "fn" true "let" true "loop" true "defrecord" true "defprotocol" true "extend-type" true "extend-protocol" true "extend" true "reify" true "proxy" true "definterface" true "comment" true "binding" true "lazy-seq" true "lazy-cat" true "if-not" true "when-first" true "condp" true "dotimes" true "while" true "some->" true "some->>" true "cond->" true "cond->>" true "as->" true "->" true "->>" true "letfn" true "doseq" true "delay" true "assert" true})
|
||||||
|
|
||||||
(def init-core!
|
(def init-core!
|
||||||
(fn [& args]
|
(fn [& args]
|
||||||
|
|
|
||||||
|
|
@ -167,7 +167,11 @@
|
||||||
(cond
|
(cond
|
||||||
(string? err) err
|
(string? err) err
|
||||||
(and (or (table? err) (struct? err)) (= :jolt/exception (get err :jolt/type)))
|
(and (or (table? err) (struct? err)) (= :jolt/exception (get err :jolt/type)))
|
||||||
(let [v (get err :value)] (if (string? v) v (string/format "%q" v)))
|
(err-message (get err :value))
|
||||||
|
(and (or (table? err) (struct? err)) (= :jolt/ex-info (get err :jolt/type)))
|
||||||
|
(let [m (get err :message) d (get err :data)]
|
||||||
|
(if (and d (not (empty? d))) (string m " " (string/format "%q" d)) (string m)))
|
||||||
|
(string? err) err
|
||||||
(string/format "%q" err)))
|
(string/format "%q" err)))
|
||||||
|
|
||||||
(defn- report-error [err fib]
|
(defn- report-error [err fib]
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue