From 2b2dc2de890c059eab4f87eff6db2aa3dc796c13 Mon Sep 17 00:00:00 2001 From: Michiel Borkent Date: Sat, 21 May 2022 21:11:01 +0200 Subject: [PATCH] wip --- deps.edn | 4 +++- src/scittle/core.cljs | 44 ++++++++++++++++++------------------------- 2 files changed, 21 insertions(+), 27 deletions(-) diff --git a/deps.edn b/deps.edn index f9461c6..b86c4e9 100644 --- a/deps.edn +++ b/deps.edn @@ -2,7 +2,9 @@ :deps {org.clojure/clojure {:mvn/version "1.10.3"} - org.babashka/sci {:mvn/version "0.3.5"} + org.babashka/sci #_{:mvn/version "0.3.5"} + {:git/url "https://github.com/babashka/sci" + :git/sha "b95519dc283bebafa3dcce01c3e9eaaa568d0fcb"} reagent/reagent {:mvn/version "1.1.0"} cljsjs/react {:mvn/version "17.0.2-0"} cljsjs/react-dom {:mvn/version "17.0.2-0"} diff --git a/src/scittle/core.cljs b/src/scittle/core.cljs index 12c3afa..137434b 100644 --- a/src/scittle/core.cljs +++ b/src/scittle/core.cljs @@ -3,6 +3,7 @@ (:require [cljs.reader :refer [read-string]] [goog.object :as gobject] [goog.string] + [sci.async :as scia] [sci.core :as sci] [scittle.impl.common :refer [cljns]] [scittle.impl.error :as error])) @@ -30,32 +31,24 @@ 'get gobject/get}}) (def !sci-ctx (atom (sci/init {:namespaces namespaces - :classes {'js js/window - :allow :all} - :disable-arity-checks true}))) + :classes {'js js/window + :allow :all} + :disable-arity-checks true}))) (def !last-ns (volatile! @sci/ns)) (defn- -eval-string [s] - (sci/binding [sci/ns @!last-ns] - (let [rdr (sci/reader s)] - (loop [res nil] - (let [form (sci/parse-next @!sci-ctx rdr)] - (if (= :sci.core/eof form) - (do - (vreset! !last-ns @sci/ns) - res) - (recur (sci/eval-form @!sci-ctx form)))))))) + (scia/eval-string* @!sci-ctx s)) (defn ^:export eval-string [s] - (try (-eval-string s) - (catch :default e - (error/error-handler e (:src @!sci-ctx)) - (let [sci-error? (isa? (:type (ex-data e)) :sci/error)] - (throw (if sci-error? - (or (ex-cause e) e) - e)))))) + (.catch (-eval-string s) + (fn [e] + (error/error-handler e (:src @!sci-ctx)) + (let [sci-error? (isa? (:type (ex-data e)) :sci/error)] + (throw (if sci-error? + (or (ex-cause e) e) + e)))))) (defn register-plugin! [plug-in-name sci-opts] plug-in-name ;; unused for now @@ -67,9 +60,9 @@ (let [scittle-id (str (gensym "scittle-tag-"))] (gobject/set tag "scittle_id" scittle-id) (swap! !sci-ctx assoc-in [:src scittle-id] text) - (sci/binding [sci/file scittle-id] - (eval-string text)) - (eval-script-tags* (rest script-tags))) + (-> (sci/binding [sci/file scittle-id] + (eval-string text)) + (.then #(eval-script-tags* (rest script-tags))))) (let [src (.getAttribute tag "src") req (js/XMLHttpRequest.) _ (.open req "GET" src true) @@ -79,9 +72,9 @@ (gobject/set tag "scittle_id" src) ;; save source for error messages (swap! !sci-ctx assoc-in [:src src] response) - (sci/binding [sci/file src] - (eval-string response))) - (eval-script-tags* (rest script-tags)))))] + (-> (sci/binding [sci/file src] + (eval-string response)) + (.then #(eval-script-tags* (rest script-tags))))))))] (.send req))))) (defn ^:export eval-script-tags [] @@ -103,4 +96,3 @@ (enable-console-print!) (sci/alter-var-root sci/print-fn (constantly *print-fn*)) -