jolt/jolt-core/clojure/core
Yogthos f18ae3bd46 macroexpand-first analyzer order; one macro path; defmacro/letfn fixes
The analyzer checked special forms before expanding macros, the reverse of the
canonical read -> macroexpand -> analyze order (Clojure/CLJS analyze-seq). Move
macroexpansion to the front of analyze-list. Knock-on fixes:

- letfn was both a (broken) macro expanding to let* AND a primitive special
  (analyze-letfn, proper letrec*). Macroexpand-first surfaced the macro, breaking
  mutual recursion; remove the macro, keep letfn a primitive.
- defmacro is now compiled by the analyzer (a :set-var-style :defmacro node that
  defs the expander fn via the fn macro — so destructuring arglists desugar — and
  marks the var a macro), so a non-top-level (when … (defmacro …)) works. The
  runtime spine's separate top-level defmacro interception is removed: one path.

SCI load 162 -> 202/218.
2026-06-22 00:54:16 -04:00
..
00-kernel.clj Host interop fixes: ==/time/subvec/defonce + corpus cleanup 2026-06-21 15:36:41 -04:00
00-syntax.clj Scrub dangling Janet references; drop dead Janet-coupled files 2026-06-21 12:01:04 -04:00
10-seq.clj Scrub dangling Janet references; drop dead Janet-coupled files 2026-06-21 12:01:04 -04:00
20-coll.clj real BigDecimal type (bigdec, M literals) 2026-06-22 00:01:01 -04:00
25-sorted.clj sorted-map entries are real map-entries (jolt-jk23) 2026-06-21 16:43:05 -04:00
30-macros.clj macroexpand-first analyzer order; one macro path; defmacro/letfn fixes 2026-06-22 00:54:16 -04:00
40-lazy.clj Scrub dangling Janet references; drop dead Janet-coupled files 2026-06-21 12:01:04 -04:00
50-io.clj *in* is a Reader, not a map 2026-06-21 23:45:24 -04:00