Chez Phase 1 (increment 3d): clojure.core prelude emit mode + gap catalog
Add a prelude emit mode to host/chez/emit.janet: when emitting clojure.core itself (not user -e), a non-native clojure.core ref lowers to a runtime var-deref instead of being rejected as out-of-subset, so core fns chain through each other. Default (subset) mode is unchanged — the corpus probe still rejects unimplemented core refs for a clean signal. core-prelude-probe.janet walks the tiers through the live analyzer->emit pipeline and catalogs reach + gaps (macros skipped; analyze-time only). Baseline: 303/355 non-macro core forms emit. Remaining gaps are a tight punch-list for the next increments: :throw (29), :quote (8), :try (2), Java host interop (6), letfn (4), declare (2). Probe has a regression floor. emit-test 83/83 (added prelude-mode lowering assertions); subset probe 619/619 unchanged; full gate green.
This commit is contained in:
parent
45208afff1
commit
8f26433469
4 changed files with 154 additions and 2 deletions
|
|
@ -207,6 +207,23 @@
|
|||
(ok (string "arity: " src) (and (= code 0) (= out want))
|
||||
(string "chez=" out " janet=" want " | " err))))
|
||||
|
||||
# 3h) prelude mode (inc 3d): emitting clojure.core ITSELF, a core->core ref must
|
||||
# lower to a runtime var-deref instead of being rejected as "out of subset".
|
||||
# `frequencies` is a core fn but not a native-op, so it exercises the switch.
|
||||
(let [ir (backend/analyze-form ctx (in (r/parse-next "(fn [x] (frequencies x))") 0))]
|
||||
# subset mode (the default): a non-native core ref is rejected at emit time.
|
||||
(ok "prelude: subset mode rejects non-native core ref"
|
||||
(let [r (protect (emit/emit ir))] (not (r 0))))
|
||||
# prelude mode: the same ref lowers to (var-deref "clojure.core" "frequencies").
|
||||
(emit/set-prelude-mode! true)
|
||||
(def scm (protect (emit/emit ir)))
|
||||
(emit/set-prelude-mode! false)
|
||||
(ok "prelude: mode lowers non-native core ref to var-deref"
|
||||
(and (scm 0)
|
||||
(string/find "var-deref" (scm 1))
|
||||
(string/find "frequencies" (scm 1)))
|
||||
(string/format "%p" scm)))
|
||||
|
||||
# 4) perf signal: emitted fib(30) in-Scheme timing (excludes Chez startup), to
|
||||
# track against the spike ceiling (hand-Scheme fib ~5ms). Informational — the
|
||||
# jolt-truthy? wrapper (~3x) and flonum modeling are known Phase-4 levers.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue