From 58e0e8b51c532e4543c00d735048c3d8dc1ddbd7 Mon Sep 17 00:00:00 2001 From: Scott Richmond Date: Fri, 1 Dec 2023 20:33:12 -0500 Subject: [PATCH] npmify the things! --- deps.edn | 2 + package.json | 6 +-- src/ludus/interpreter.cljc | 76 +++++++++++++++++++------------------- src/ludus/node.cljs | 25 ++++++------- src/ludus/prelude.cljc | 2 +- 5 files changed, 56 insertions(+), 55 deletions(-) diff --git a/deps.edn b/deps.edn index dad6c27..97c722b 100644 --- a/deps.edn +++ b/deps.edn @@ -4,6 +4,8 @@ babashka/fs {:mvn/version "0.4.19"} } + :source-paths ["src/ludus"] + :aliases {:main {:exec-fn ludus.core/main!} diff --git a/package.json b/package.json index 2f08378..e41049e 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { - "name": "@ludus/ludus", - "version": "0.1.0-ALPHA", - "description": "Ludus: A friendly, dynamic, functional language", + "name": "@ludus/ludus-js-pure", + "version": "0.1.0-alpha.1", + "description": "A Ludus interpreter in a pure JS function.", "main": "target/js/ludus.js", "directories": {}, "keywords": [], diff --git a/src/ludus/interpreter.cljc b/src/ludus/interpreter.cljc index ae2e35f..c34a36b 100644 --- a/src/ludus/interpreter.cljc +++ b/src/ludus/interpreter.cljc @@ -880,51 +880,51 @@ ;(println context) context)) -;; TODO: update this to use new parser pipeline & new AST representation -(defn interpret - ([source parsed] (interpret source parsed {})) - ([source parsed ctx] - (try - (let [base-ctx (volatile! {::parent (volatile! (merge ludus-prelude ctx))})] - (interpret-ast parsed base-ctx)) - (catch #?(:cljs :default :clj Throwable) e - (println "Ludus panicked!") - (println "On line" (get-in (ex-data e) [:ast :token :line])) - (println ">>> " (get-line source (get-in (ex-data e) [:ast :token :line]))) - (println (ex-message e)) - (pp/pprint (ex-data e) - #?(:clj (System/exit 67)) - ))))) +; ;; TODO: update this to use new parser pipeline & new AST representation +; (defn interpret +; ([source parsed] (interpret source parsed {})) +; ([source parsed ctx] +; (try +; (let [base-ctx (volatile! {::parent (volatile! (merge ludus-prelude ctx))})] +; (interpret-ast parsed base-ctx)) +; (catch #?(:cljs :default :clj Throwable) e +; (println "Ludus panicked!") +; (println "On line" (get-in (ex-data e) [:ast :token :line])) +; (println ">>> " (get-line source (get-in (ex-data e) [:ast :token :line]))) +; (println (ex-message e)) +; (pp/pprint (ex-data e) +; #?(:clj (System/exit 67)) +; ))))) -;; TODO: update this to use new parser pipeline & new AST representation -(defn interpret-file [source path parsed] - (try - (let [base-ctx (volatile! {::parent (volatile! ludus-prelude) :file path})] - (interpret-ast parsed base-ctx)) - (catch clojure.lang.ExceptionInfo e - (println "Ludus panicked in" path) - (println "On line" (get-in (ex-data e) [:ast :token :line])) - (println ">>> " (get-line source (get-in (ex-data e) [:ast :token :line]))) - (println (ex-message e)) - (System/exit 67)))) +; ;; TODO: update this to use new parser pipeline & new AST representation +; (defn interpret-file [source path parsed] +; (try +; (let [base-ctx (volatile! {::parent (volatile! ludus-prelude) :file path})] +; (interpret-ast parsed base-ctx)) +; (catch clojure.lang.ExceptionInfo e +; (println "Ludus panicked in" path) +; (println "On line" (get-in (ex-data e) [:ast :token :line])) +; (println ">>> " (get-line source (get-in (ex-data e) [:ast :token :line]))) +; (println (ex-message e)) +; (System/exit 67)))) -;; TODO: update this to use new parser pipeline & new AST representation -(defn interpret-repl - ([parsed ctx] - (let [orig-ctx @ctx] - (try - (let [result (interpret-ast parsed ctx)] - {:result result :ctx ctx}) - (catch clojure.lang.ExceptionInfo e - (println "Ludus panicked!") - (println (ex-message e)) - {:result :error :ctx (volatile! orig-ctx)}))))) +; ;; TODO: update this to use new parser pipeline & new AST representation +; (defn interpret-repl +; ([parsed ctx] +; (let [orig-ctx @ctx] +; (try +; (let [result (interpret-ast parsed ctx)] +; {:result result :ctx ctx}) +; (catch clojure.lang.ExceptionInfo e +; (println "Ludus panicked!") +; (println (ex-message e)) +; {:result :error :ctx (volatile! orig-ctx)}))))) (defn interpret-safe [source parsed ctx] (try (let [base-ctx (volatile! {::parent (volatile! (merge ludus-prelude ctx))})] (interpret-ast parsed base-ctx)) - (catch Throwable e + (catch #?(:clj Throwable :cljs js/Object) e (println "Ludus panicked!") (println "On line" (get-in (ex-data e) [:ast :token :line])) (println ">>> " (get-line source (get-in (ex-data e) [:ast :token :line]))) diff --git a/src/ludus/node.cljs b/src/ludus/node.cljs index 0b2c337..f25d418 100644 --- a/src/ludus/node.cljs +++ b/src/ludus/node.cljs @@ -1,17 +1,16 @@ (ns ludus.node - ; (:require [ludus.interpreter :as i] - ; [ludus.grammar :as g] - ; [ludus.parser :as p] - ; [ludus.scanner :as s]) + (:require [ludus.interpreter :as i] + [ludus.grammar :as g] + [ludus.parser :as p] + [ludus.scanner :as s]) ) (defn run [source] - (println "Running source!") - (println "(This is a stub.)") - (clj->js { - :result "Hello, world!" - :errors [{:msg "An error"}, {:msg "Another error"}] - :console ["Here's a log.", "Here's another log."] - :draw [[:background 0] - [:fill 255] - [:rect 10 10 50 50]]})) \ No newline at end of file + (let [scanned (s/scan source) + tokens (:tokens scanned) + parsed (p/apply-parser g/script tokens) + result (i/interpret-safe source parsed {})] + (clj->js {:result result + :errors [] + :console [] + :draw []}))) \ No newline at end of file diff --git a/src/ludus/prelude.cljc b/src/ludus/prelude.cljc index 9d9fb43..9f5ab42 100644 --- a/src/ludus/prelude.cljc +++ b/src/ludus/prelude.cljc @@ -5,5 +5,5 @@ (def prelude #?( :clj (slurp "src/ludus/prelude.ld") - :cljs (r/inline "prelude.ld") + :cljs (r/inline "./prelude.ld") )) \ No newline at end of file