core: start moving clojure.core to Clojure (overlay loaded at init)
Phase 4 kernel-shrink seam. jolt-core/clojure/core.clj holds the Clojure portion of clojure.core; api/init loads it into the clojure.core namespace after init-core! interns the Janet primitives, routed through eval-toplevel so it compiles via the self-hosted pipeline (or interprets when :compile? is off). First three fns moved off the Janet side: ffirst, fnext, nnext (leaf, no internal callers). Same results compiled or interpreted; full suite green; battery holds 3913.
This commit is contained in:
parent
984af02532
commit
30a308f3ef
4 changed files with 43 additions and 6 deletions
|
|
@ -27,6 +27,21 @@
|
|||
x))
|
||||
|
||||
|
||||
(defn- load-core-overlay!
|
||||
"Load the Clojure portion of clojure.core (embedded jolt-core/clojure/core.clj)
|
||||
into the clojure.core namespace, routed through eval-toplevel like any other
|
||||
source (compiled when :compile?, interpreted otherwise)."
|
||||
[ctx]
|
||||
(when-let [src (get stdlib-embed/sources "clojure.core")]
|
||||
(def saved (ctx-current-ns ctx))
|
||||
(ctx-set-current-ns ctx "clojure.core")
|
||||
(var s src)
|
||||
(while (> (length (string/trim s)) 0)
|
||||
(def [form rest] (parse-next s))
|
||||
(set s rest)
|
||||
(when (not (nil? form)) (eval-toplevel ctx form)))
|
||||
(ctx-set-current-ns ctx saved)))
|
||||
|
||||
(defn init
|
||||
"Create a new Jolt evaluation context.
|
||||
opts may contain:
|
||||
|
|
@ -57,6 +72,11 @@
|
|||
(install-async! ctx)
|
||||
# Host contract (ns jolt.host): the seam the portable jolt-core compiler calls.
|
||||
(host/install! ctx)
|
||||
# Clojure portion of clojure.core (jolt-core/clojure/core.clj): fns expressed
|
||||
# in plain Clojure on top of the Janet primitives interned above. Loaded into
|
||||
# clojure.core and compiled by the self-hosted pipeline (or interpreted when
|
||||
# :compile? is off). Phase 4 kernel-shrink seam — see that file.
|
||||
(load-core-overlay! ctx)
|
||||
ctx))
|
||||
|
||||
(defn eval-one
|
||||
|
|
|
|||
|
|
@ -940,10 +940,8 @@
|
|||
(if (jvec? coll) (make-vec dropped) dropped))))))
|
||||
|
||||
(defn core-second [coll] (core-first (core-rest coll)))
|
||||
(defn core-ffirst [coll] (core-first (core-first coll)))
|
||||
(defn core-nfirst [coll] (core-next (core-first coll)))
|
||||
(defn core-fnext [coll] (core-first (core-next coll)))
|
||||
(defn core-nnext [coll] (core-next (core-next coll)))
|
||||
# ffirst / fnext / nnext now live in the Clojure overlay (jolt-core/clojure/core.clj).
|
||||
|
||||
(defn core-last [coll]
|
||||
(let [c (realize-for-iteration coll)]
|
||||
|
|
@ -3809,10 +3807,7 @@
|
|||
"ex-cause" core-ex-cause
|
||||
"prefers" core-prefers
|
||||
"random-uuid" core-random-uuid
|
||||
"ffirst" core-ffirst
|
||||
"nfirst" core-nfirst
|
||||
"fnext" core-fnext
|
||||
"nnext" core-nnext
|
||||
"last" core-last
|
||||
"drop-last" core-drop-last
|
||||
"take-last" core-take-last
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue