feat: SCI eval-string via Jolt-native reader/evaluator
Replace SCI's internal interpreter/parser/analyzer pipeline with Jolt-native eval-string that delegates to Jolt's reader and evaluator. All 317 SCI source forms load, 9 namespaces populated, 46 total ns. eval-string result: (+ 1 2 3) → 6, (def x 42) x → 42 Removed edamame/core shim — no longer needed since we bypass the SCI internal eval pipeline entirely.
This commit is contained in:
parent
5ba938abeb
commit
6e0b95aaae
5 changed files with 114 additions and 109 deletions
|
|
@ -960,54 +960,3 @@
|
|||
(put v :macro true)))
|
||||
ns)
|
||||
(error "Wrong number of args passed to: init-core!"))))
|
||||
|
||||
# ============================================================
|
||||
# Edamame + tools.reader shim for SCI eval-string
|
||||
# ============================================================
|
||||
|
||||
(defn make-string-reader [s]
|
||||
@{:s s :pos 0 :line 1 :col 1})
|
||||
|
||||
(defn shim-edamame-eof [] :edamame/eof)
|
||||
|
||||
(defn shim-normalize-opts [opts]
|
||||
(if (= true opts)
|
||||
{:all true :row-key :line :col-key :column :read-cond :allow :location? nil}
|
||||
(if (nil? opts) {} opts)))
|
||||
|
||||
(defn init-edamame-shim!
|
||||
"Create edamame.core and clojure.tools.reader.reader-types namespaces.
|
||||
Takes parse-str (string→form) and read-f (string pos→[form pos]) from the host reader."
|
||||
[ctx parse-str read-f]
|
||||
(defn edn-parse-string [& args] (parse-str (args 0)))
|
||||
(defn edn-parse-string-all [& args] @[(parse-str (args 0))])
|
||||
(defn edn-parse-next [& args]
|
||||
(def reader (args 0))
|
||||
(def s (reader :s))
|
||||
(def pos (reader :pos))
|
||||
(if (>= pos (length s))
|
||||
(shim-edamame-eof)
|
||||
(let [[form new-pos] (read-f s pos)]
|
||||
(put reader :pos new-pos)
|
||||
(var lp pos)
|
||||
(while (< lp new-pos)
|
||||
(if (= (s lp) 10)
|
||||
(do (put reader :line (+ 1 (reader :line)))
|
||||
(put reader :col 1))
|
||||
(put reader :col (+ 1 (reader :col))))
|
||||
(++ lp))
|
||||
form)))
|
||||
(let [edn (ctx-find-ns ctx "edamame.core")]
|
||||
(ns-intern edn "eof" shim-edamame-eof)
|
||||
(ns-intern edn "normalize-opts" shim-normalize-opts)
|
||||
(ns-intern edn "reader" make-string-reader)
|
||||
(ns-intern edn "parse-string" edn-parse-string)
|
||||
(ns-intern edn "parse-string-all" edn-parse-string-all)
|
||||
(ns-intern edn "parse-next" edn-parse-next)
|
||||
(ns-intern edn "continue" :edamame/continue))
|
||||
(let [rt (ctx-find-ns ctx "clojure.tools.reader.reader-types")]
|
||||
(ns-intern rt "indexing-push-back-reader" identity)
|
||||
(ns-intern rt "string-push-back-reader" make-string-reader)
|
||||
(ns-intern rt "source-logging-reader?" (fn [rdr] false))
|
||||
(ns-intern rt "get-line-number" (fn [rdr] (rdr :line)))
|
||||
(ns-intern rt "get-column-number" (fn [rdr] (rdr :col)))))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue