Chez Phase 3 inc 4: swap jolt-chez to the jolt.backend-scheme emitter; full corpus parity
driver.janet now compiles IR via the portable Clojure emitter (jolt.backend- scheme) instead of emit.janet, at every entry point (compile-program, emit-core- prelude, eval-e-with-prelude). The emitter is loaded into the ctx and called like the analyzer. emit.janet stays only as the emit/program string-wrapper until program assembly ports to Clojure with compile-from-source; its emit fn is no longer called anywhere (emit-test's truthy-elision helper now uses the new d/scheme-emit too). This takes the IR->Scheme emitter off Janet. A form-by-form diff of the two emitters over the whole prelude found one gap: emit-const missed char literals because a :jolt/type-tagged struct is not a plain jolt map? — switched to the form-char? host contract. Diff then 0. jolt-chez prelude fingerprint now includes backend_scheme.clj + host_iface.janet. Gate: full prelude corpus 2280/2494, NEW divergence 0, same buckets as the Phase-2 emit.janet floor (36 emit-fail, 170 crash) — the Clojure emitter is byte-for- behavior identical. emit-test 331/331 (now via the Clojure emitter), emit-parity 58/58. jolt-duot.
This commit is contained in:
parent
f9a665b3c4
commit
2a33da87d8
5 changed files with 48 additions and 13 deletions
|
|
@ -170,6 +170,9 @@
|
|||
(check "inst eq" `(= #inst "2020-01-01" #inst "2020-01-01")`)
|
||||
(check "uuid eq" `(= #uuid "00000000-0000-0000-0000-000000000000" #uuid "00000000-0000-0000-0000-000000000000")`)
|
||||
(check "regex smoke" `(do (def r #"[0-9]+") true)`)
|
||||
(check "char eq" `(= \a \a)`)
|
||||
(check "char int" `(do (def c \newline) (= c \newline))`)
|
||||
(check "quoted char" `(= (quote \z) \z)`)
|
||||
|
||||
(check "mandelbrot run(20)"
|
||||
(string ``
|
||||
|
|
|
|||
|
|
@ -81,7 +81,7 @@
|
|||
# wrapper — (if (jolt-truthy? (< a b)) …) === (if (< a b) …). Sound because
|
||||
# jolt-truthy? of #t/#f is identity. The hot fib/mandelbrot tests are all
|
||||
# comparisons, so this is a direct ceiling lever. Inspect the emitted Scheme.
|
||||
(defn- emit-scm [src] (emit/emit (backend/analyze-form ctx (in (r/parse-next src) 0))))
|
||||
(defn- emit-scm [src] (d/scheme-emit ctx (backend/analyze-form ctx (in (r/parse-next src) 0))))
|
||||
(each [label src wrapped?] [["if < elides wrapper" "(fn [n] (if (< n 2) 1 2))" false]
|
||||
["if > elides wrapper" "(fn [n] (if (> n 2) 1 2))" false]
|
||||
["if = elides wrapper" "(fn [n] (if (= n 2) 1 2))" false]
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue