jolt/jolt-core/clojure/core
Yogthos 1a1a1134d6 core: move the protocol/type macros to the overlay
defprotocol/defrecord/extend-type/extend-protocol/reify + the extend/proxy/
definterface stubs move to 30-macros (user-facing, not used by the compiler). They
emit Jolt's protocol/type special forms (protocol-dispatch/register-method/
make-reified/deftype).

The one subtlety: a protocol value is a :jolt/type-tagged struct, and the
interpreter can't tell an embedded opaque value from a tagged map literal being
constructed. So defprotocol builds it via a make-protocol fn call (exposed from
core) instead of an embedded literal — a fn result evaluates normally and even
compiles. reify emits a {kw (fn* ...)} map literal that make-reified evaluates
(build-eval-map yields a struct it can iterate, unlike a hash-map phm). defrecord
vecs its spliced field-let bindings (a lazy mapcat seq won't splice) and uses an
explicit fresh-sym for the map-> param (auto-gensym doesn't cross nested
syntax-quotes).

protocols-spec 21/21, conformance 228x3, fixpoint, clojure-test-suite 3930, full
suite green.
2026-06-07 18:06:55 -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: move defn and defn- to the syntax tier 2026-06-07 17:36:06 -04:00
10-seq.clj core: staged-bootstrap kernel tier; move second/peek/subvec/mapv/update to Clojure 2026-06-06 13:15:17 -04:00
20-coll.clj core: move dedupe + seq-to-map-for-destructuring to overlay (+ tests) 2026-06-07 00:14:40 -04:00
30-macros.clj core: move the protocol/type macros to the overlay 2026-06-07 18:06:55 -04:00
MIGRATION.md migration doc: phase 3 status + the hot-macro expansion-speed finding 2026-06-07 08:47:04 -04:00