jolt/jolt-core/jolt/passes
Yogthos 4fdc9f165e Thread an immutable env through the type-inference walk
types.clj drove inference through ~14 module-level atoms; the infer walk was
non-reentrant and depended on hidden set-*! install order. Thread one immutable
env (mk-env) through infer instead: it snapshots the installed config
(rtenv/vtypes/record-shapes/protocol-methods/map-shapes?) and carries the
per-run flags and accumulator/guard cells (diags/calls/checking-set/diag-memo).
A fresh env per run makes the pass re-entrant — isolated-diag-count's probe now
runs under a sub-env with its own diags cell instead of save/restoring a shared
atom.

Only state whose lifecycle spans separate API calls stays module-level: a
config-box the set-*! API writes, the escapes/user-sig sweep registries, and a
bridge holding the last checking run's diags for take-diags!. record-type-from-
entry/field-type-from-tag now take the shapes map directly rather than reading a
global.

jolt-ogib.10. Behavior pinned by the new infer gate (23 cases) plus selfhost +
buildsmoke. Re-minted seed.
2026-06-23 09:19:24 -04:00
..
types Extract the type lattice into jolt.passes.types.lattice 2026-06-23 04:31:43 -04:00
fold.clj JVM-semantics fixes and small cleanups 2026-06-23 01:36:51 -04:00
inline.clj Add reduce-ir-children; rebuild the read-only IR walks on it 2026-06-23 01:28:32 -04:00
types.clj Thread an immutable env through the type-inference walk 2026-06-23 09:19:24 -04:00