core: move as->/some->/some->>/doto/when-first macros to overlay
Phase 3 batch 3 (jolt-1j0), 5 macros. Establishes the macro-body toolkit: fresh-sym = (symbol (str (gensym))) for a shared explicit jolt symbol (a bare (gensym) returns a Janet symbol the destructurer rejects), and splicing binding pairs into a TEMPLATE vector so core-let sees a tuple form, not a runtime pvec. when-first stays first-based (lazy-safe): Clojure's (seq coll) form realizes an infinite coll like (repeat nil) under Jolt's eager evaluator and hangs — the per-batch battery caught it (when_first.cljc). Clojure-correct seq form waits on Phase 5 laziness. conformance 228/228 x3, clojure-test-suite 3930, full suite green, bench flat.
This commit is contained in:
parent
e611034550
commit
31a257ce70
3 changed files with 52 additions and 84 deletions
|
|
@ -43,4 +43,15 @@
|
|||
["when-some multi" "14" "(when-some [x 7] (inc x) (* x 2))"]
|
||||
["when-some nil" "nil" "(when-some [x nil] x)"]
|
||||
["while loop" "3" "(let [a (atom 0)] (while (< @a 3) (swap! a inc)) @a)"]
|
||||
["dotimes sum" "10" "(let [a (atom 0)] (dotimes [i 5] (swap! a + i)) @a)"])
|
||||
["dotimes sum" "10" "(let [a (atom 0)] (dotimes [i 5] (swap! a + i)) @a)"]
|
||||
["as-> threads" "12" "(as-> 5 x (+ x 1) (* x 2))"]
|
||||
["as-> no forms" "5" "(as-> 5 x)"]
|
||||
["some-> through" "6" "(some-> {:a {:b 5}} :a :b inc)"]
|
||||
["some-> short-circuit" "nil" "(some-> {:a nil} :a :b)"]
|
||||
["some->> through" "9" "(some->> [1 2 3] (map inc) (reduce +))"]
|
||||
["some->> nil" "nil" "(some->> nil (map inc))"]
|
||||
["doto returns obj" "[1 2]" "(deref (doto (atom []) (swap! conj 1) (swap! conj 2)))"]
|
||||
["when-first" "20" "(when-first [x [10 20 30]] (* x 2))"]
|
||||
["when-first empty" "nil" "(when-first [x []] :body)"]
|
||||
["when-first nil coll" "nil" "(when-first [x nil] :body)"]
|
||||
["when-first range" "0" "(when-first [x (range 5)] x)"])
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue