Two Chez reader bugs, both JVM-parity gaps: inc'/+'/foo' (trailing apostrophe) were mis-read as a symbol followed by a quote macro, because the reader treated ' as a terminator. In Clojure ' is a NON-terminating macro char (constituent after the first char). Since the seed is minted on Chez, (def inc' inc) became (def inc 'inc), clobbering inc's var cell with its own symbol -- so (var-get (var inc)) returned the symbol, not the fn. Drop ' from the token terminator set; a leading ' still quotes. ^bytes [b] / ^String [x y] return-type hints: the Chez reader lowered ^meta on a collection to a (with-meta vec meta) form, but emitted a QUALIFIED clojure.core/with-meta while the Janet reader emits a bare with-meta -- so the fn/defn macros' unwrap logic (matching the bare head) slipped past it and choked on a non-vector arglist. Emit bare with-meta to match Janet, and unwrap a (with-meta <vec> _) arglist in analyze-fn as a backstop. Re-minted the seed. zero-janet 2699, prelude 2652, Janet gate 155/0, fixpoint 10/10, bootstrap 6/6, all 0 new divergences. |
||
|---|---|---|
| .. | ||
| image.ss | ||
| prelude.ss | ||
| README.md | ||
Chez bootstrap seed
These two files are the bootstrap compiler for jolt-on-Chez — the seed that makes the build self-hosting with no Janet in the loop:
prelude.ss— theclojure.coreprelude (all tiers + clojure.string/walk/ template/edn/set/pprint) as Schemedef-var!forms.image.ss— the compiler image (jolt.ir+jolt.analyzer+jolt.backend-scheme) as Schemedef-var!forms.
Both are generated, not hand-written. They are checked in because a fresh
checkout must be able to build jolt-on-Chez using only Chez: host/chez/bootstrap.ss
loads this seed, then rebuilds the prelude + image from the .clj/.ss sources via
the on-Chez compiler (read → analyze → emit, all on Chez). The seed is a joint
byte-fixpoint: rebuilding from an up-to-date seed reproduces it exactly
(test/chez/bootstrap-test.janet verifies this).
Janet was used once, historically, to mint the very first seed (the Janet analyzer/
emitter cross-compiled the sources, then the on-Chez compiler iterated to the
fixpoint — see test/chez/fixpoint-test.janet). After that, Janet is never needed
to build or run jolt-on-Chez.
Re-minting
When the seed sources change (the core tiers, the compiler namespaces, the host
contract, the reader, emit-image.ss), the seed drifts and bootstrap-test
fails. Re-mint it:
(import host/chez/driver :as d)
(import host/chez/jolt-chez :as jc)
(def ctx (d/make-ctx))
(d/mint-chez-seed* (jc/ensure-prelude ctx)
(d/ensure-compiler-image ctx "/tmp/stage1.ss")
"host/chez/seed/prelude.ss"
"host/chez/seed/image.ss")
Then commit the refreshed prelude.ss / image.ss.