jolt/jolt-core/clojure/core
Yogthos 21cd88deee letfn is a macro over a letfn* special form (Clojure semantics)
jolt modelled letfn as a special form directly, so (macroexpand-1 '(letfn …))
returned the form unchanged. Clojure's letfn is a macro that expands to letfn*,
and macroexpansion tooling (tools.macro, tools.analyzer) depends on that — its
special-form handlers key on letfn*, not letfn.

Split it the Clojure way:
- letfn* is now the special form (analyzer), taking flat name/fn-form pairs
  [name1 fn1 name2 fn2 …] — the letrec :let lowering is unchanged.
- letfn is a macro (00-syntax) turning each (name [params] body*) spec into a
  name + (fn name [params] body*) binding, so it expands to letfn*.

So (macroexpand-1 '(letfn [(f [x] x)] (f 1))) now yields
(letfn* [f (fn f [x] x)] (f 1)), and clojure.tools.macro passes its whole suite
(macrolet / symbol-macrolet / mexpand-all). Listed in docs + site.

make test green (+1 corpus row, 0 new divergences), shakesmoke byte-identical.
One re-mint (analyzer + the letfn macro); selfhost holds.
2026-06-27 17:26:18 -04:00
..
00-kernel.clj Host interop fixes: ==/time/subvec/defonce + corpus cleanup 2026-06-21 15:36:41 -04:00
00-syntax.clj letfn is a macro over a letfn* special form (Clojure semantics) 2026-06-27 17:26:18 -04:00
10-seq.clj Clean up codebase: rename stdlib layer, strip porting residue, fix tooling 2026-06-22 22:18:00 -04:00
20-coll.clj Fix general gaps the hiccup suite shook out 2026-06-26 20:15:39 -04:00
21-coll.clj Small maps preserve insertion order 2026-06-27 05:48:17 -04:00
22-coll.clj data.priority-map: deftype interop fixes (rseq, arity-overload, empty, Sorted) 2026-06-27 16:48:14 -04:00
25-sorted.clj Clean up codebase: rename stdlib layer, strip porting residue, fix tooling 2026-06-22 22:18:00 -04:00
30-macros.clj General fixes shaken out by running core.logic's test suite 2026-06-27 09:20:11 -04:00
40-lazy.clj Match Clojure's lazy seq realization model 2026-06-26 19:41:02 -04:00
50-io.clj type returns the JVM class (Clojure semantics) (#244) 2026-06-26 21:14:06 +00:00