jolt/host/chez
Yogthos c2d977cadf Chez Phase 3 inc6a: zero-Janet spine (analyzer + emitter on Chez), macro-free
Cross-compile jolt.ir + jolt.analyzer + jolt.backend-scheme to Scheme def-var!
forms via the existing Janet emit pipeline (driver/emit-compiler-image) and run
them ON CHEZ over a Scheme jolt.host impl. A macro-free Clojure expression now
compiles and runs with no Janet in the loop: read (reader.ss) -> analyze
(jolt.analyzer on Chez) -> IR -> emit (jolt.backend-scheme on Chez) -> eval.

host/chez/host-contract.ss is the jolt.host contract on Chez (the portable seam
the cross-compiled analyzer/emitter call): form-* over the Chez reader's forms,
resolve-global/compile-ns/host-intern!/late-bind? over the var-cell registry. ctx
is an opaque record carrying the compile ns. Native-op names are declare-var!'d
into clojure.core so +, *, <, ... classify as :var and the emitter's native-op
path lowers them. form-macro? is a #f stub and macro expansion / syntax-quote /
record hints are stubs for inc6b (runtime macros, jolt-r8ku).

host/chez/compile-eval.ss is the spine entry (read-string -> analyze -> emit ->
eval). driver gains emit-compiler-image / ensure-compiler-image (image caching)
and program-zero-janet / eval-zero-janet.

Two bugs fixed in the keeper, not reproduced:
- the Chez reader stores an unqualified symbol's ns as #f, but the analyzer tests
  (nil? ns); hc-sym-ns normalizes #f/'() -> jolt-nil. Without it every handled
  special (if/do/fn*) misanalyzed as a plain invoke.
- char (int->char) was missing from clojure.core on Chez; the emitter's
  chez-str-lit needs it for keyword/string consts. Added jolt-char to converters.ss.

Gate: test/chez/spine-test.janet 15/15 (Chez-hosted analyzer value == Janet-hosted
oracle through the same emitter/RT; only the analysis host differs). Full Janet
gate green (150 files). driver.janet is in the prelude fingerprint so the cache key
moved; prelude content is unchanged. jolt-chez fingerprint/ensure-prelude made
public for the test harness.
2026-06-19 21:16:24 -04:00
..
atoms.ss Chez Phase 2 (inc S): atom watches + validators (jolt-mn9o) 2026-06-19 04:33:07 -04:00
collections.ss Chez Phase 2 (inc U): list? + map-entry-as-vector + clojure.walk (jolt-75sv) 2026-06-19 09:30:18 -04:00
compile-eval.ss Chez Phase 3 inc6a: zero-Janet spine (analyzer + emitter on Chez), macro-free 2026-06-19 21:16:24 -04:00
converters.ss Chez Phase 3 inc6a: zero-Janet spine (analyzer + emitter on Chez), macro-free 2026-06-19 21:16:24 -04:00
dot-forms.ss Chez Phase 2 (inc R): . / .-field dot-form desugar (jolt-kuic) 2026-06-19 00:32:30 -04:00
driver.janet Chez Phase 3 inc6a: zero-Janet spine (analyzer + emitter on Chez), macro-free 2026-06-19 21:16:24 -04:00
dyn-binding.ss Chez Phase 2 (inc M): dynamic var binding (jolt-2o7x) 2026-06-18 18:29:55 -04:00
dynamic-vars.ss Chez Phase 1 (increment 3r): dynamic-var constants 2026-06-18 01:43:16 -04:00
emit.janet Chez Phase 2 (inc X): #inst / #uuid literals + java.time (jolt-at0a) 2026-06-19 11:05:22 -04:00
host-class.ss Chez Phase 2 (inc T): class native + bare class-token resolution (jolt-13zk) 2026-06-19 08:41:45 -04:00
host-contract.ss Chez Phase 3 inc6a: zero-Janet spine (analyzer + emitter on Chez), macro-free 2026-06-19 21:16:24 -04:00
host-static.ss Chez Phase 2 (inc Q): Java class statics + constructors (jolt-avt6) 2026-06-18 23:24:01 -04:00
host-table.ss Chez Phase 2 (inc F): jolt.host ref primitives + sorted collections 2026-06-18 13:14:13 -04:00
inst-time.ss Chez Phase 2 (inc X): #inst / #uuid literals + java.time (jolt-at0a) 2026-06-19 11:05:22 -04:00
io.ss Chez Phase 2 (inc W): reader-coupled io (jolt-at0a) 2026-06-19 10:40:19 -04:00
jolt-chez.janet Chez Phase 3 inc6a: zero-Janet spine (analyzer + emitter on Chez), macro-free 2026-06-19 21:16:24 -04:00
lazy-bridge.ss Chez Phase 2 (inc M): dynamic var binding (jolt-2o7x) 2026-06-18 18:29:55 -04:00
math.ss Chez Phase 2: clojure.set + clojure.math + pprint (jolt-j5vg, jolt-22vo) 2026-06-19 17:06:26 -04:00
multimethods.ss Chez Phase 1 (increment 3q): multimethod dispatch + late-bind 2026-06-18 01:24:01 -04:00
natives-coll.ss Chez Phase 2 (inc A): collection ctors + real map entries 2026-06-18 10:44:33 -04:00
natives-meta.ss Chez Phase 2 (inc N): type (jolt-fmm4) 2026-06-18 19:40:17 -04:00
natives-misc.ss Chez Phase 2 (inc X): #inst / #uuid literals + java.time (jolt-at0a) 2026-06-19 11:05:22 -04:00
natives-num.ss Chez Phase 2 (inc C): bit ops + parse-long/parse-double 2026-06-18 11:20:56 -04:00
natives-seq.ss Chez Phase 1 (increment 3o): transducer arities 2026-06-17 23:51:06 -04:00
natives-str.ss Chez Phase 2 (inc R): . / .-field dot-form desugar (jolt-kuic) 2026-06-19 00:32:30 -04:00
natives-xform.ss Chez Phase 2 (inc H): volatiles + sequence/transduce 2026-06-18 14:47:03 -04:00
ns.ss Chez Phase 2 (inc K): namespace value model (jolt-yxqm) 2026-06-18 16:49:35 -04:00
post-prelude.ss Chez Phase 2 (inc S): atom watches + validators (jolt-mn9o) 2026-06-19 04:33:07 -04:00
predicates.ss Chez Phase 2 (inc U): list? + map-entry-as-vector + clojure.walk (jolt-75sv) 2026-06-19 09:30:18 -04:00
printing.ss Chez Phase 2 (inc B): readable printer + output seams 2026-06-18 11:20:56 -04:00
reader.ss Chez Phase 2 (inc Y): runtime data reader + clojure.edn (jolt-r8ku) 2026-06-19 12:06:44 -04:00
records.ss Chez Phase 2 (inc O): host String methods (jolt-nfca) 2026-06-18 20:36:39 -04:00
regex.ss Chez Phase 1 (increment 3p): misc seq/regex gaps + bug tracking 2026-06-18 00:44:21 -04:00
rt.ss Chez Phase 2: clojure.set + clojure.math + pprint (jolt-j5vg, jolt-22vo) 2026-06-19 17:06:26 -04:00
seq.ss Chez Phase 2 (inc U): list? + map-entry-as-vector + clojure.walk (jolt-75sv) 2026-06-19 09:30:18 -04:00
transients.ss Chez Phase 1 (increment 3p): misc seq/regex gaps + bug tracking 2026-06-18 00:44:21 -04:00
values.ss Chez Phase 1 (increment 3b): seq tier + dynamic IFn dispatch on the Chez RT 2026-06-17 15:19:18 -04:00
vars.ss Chez Phase 2 (inc I+J): first-class vars + scalar natives 2026-06-18 15:44:10 -04:00