jolt/jolt-core/clojure/core
Yogthos 42da5cef9a Step 4: evaluator eager assumptions — lazy rest + lazy mapcat
Fix & rest destructuring (evaluator.janet): when the original
value is a lazy-seq, derive & rest by walking ls-rest vi steps
instead of slicing the eagerly-realized array from d-realize.

Rewrite core-mapcat as a lazy state machine (core.janet): step
through input colls one element at a time, call f on each tuple,
then yield from f's result collection. No apply-forcing —
all input colls are walked lazily via lazy-from + seq-done?.

Add mapcat to core-renames (compiler.janet) and remove from
Clojure overlay (10-seq.clj) — compile mode now emits direct
calls to the lazy core-mapcat, fixing the pre-existing
protocol-on-record compile error.

Tests: re-enabled mapcat infinite harness case, added 2 & rest
laziness cases. 21/21 lazy-infinite, 229x3 conformance, 32/32 specs.
2026-06-08 10:46:42 -04:00
..
00-kernel.clj core: staged-bootstrap kernel tier; move second/peek/subvec/mapv/update to Clojure 2026-06-06 13:15:17 -04:00
00-syntax.clj core: port when-let to the overlay — finishes the Phase 3 macro migration 2026-06-07 19:49:27 -04:00
10-seq.clj Step 4: evaluator eager assumptions — lazy rest + lazy mapcat 2026-06-08 10:46:42 -04:00
20-coll.clj Step 2e: tree-seq/xml-seq in Clojure overlay 2026-06-08 08:47:23 -04:00
30-macros.clj core: port when-let to the overlay — finishes the Phase 3 macro migration 2026-06-07 19:49:27 -04:00
MIGRATION.md migration doc: phase 3 status + the hot-macro expansion-speed finding 2026-06-07 08:47:04 -04:00