Skip to content

Commit

Permalink
Encapsulating namespace access and env creation
Browse files Browse the repository at this point in the history
  • Loading branch information
raph-amiard authored and David Nolen committed Jun 13, 2012
1 parent 9179a35 commit 67f55ee
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 12 deletions.
5 changes: 1 addition & 4 deletions src/clj/cljs/closure.clj
Expand Up @@ -314,17 +314,14 @@
;; Compile ;; Compile
;; ======= ;; =======


(defn empty-env []
{:ns (@comp/namespaces comp/*cljs-ns*) :context :statement :locals {}})

(defn compile-form-seq (defn compile-form-seq
"Compile a sequence of forms to a JavaScript source string." "Compile a sequence of forms to a JavaScript source string."
[forms] [forms]
(comp/with-core-cljs (comp/with-core-cljs
(with-out-str (with-out-str
(binding [comp/*cljs-ns* 'cljs.user] (binding [comp/*cljs-ns* 'cljs.user]
(doseq [form forms] (doseq [form forms]
(comp/emit (comp/analyze (empty-env) form))))))) (comp/emit (comp/analyze (comp/empty-env) form)))))))


(defn output-directory [opts] (defn output-directory [opts]
(or (:output-dir opts) "out")) (or (:output-dir opts) "out"))
Expand Down
15 changes: 12 additions & 3 deletions src/clj/cljs/compiler.clj
Expand Up @@ -48,6 +48,12 @@
'{cljs.core {:name cljs.core} '{cljs.core {:name cljs.core}
cljs.user {:name cljs.user}})) cljs.user {:name cljs.user}}))


(defn get-namespace [key]
(@namespaces key))

(defn set-namespace [key val]
(swap! namespaces assoc key val))

(def ^:dynamic *cljs-ns* 'cljs.user) (def ^:dynamic *cljs-ns* 'cljs.user)
(def ^:dynamic *cljs-file* nil) (def ^:dynamic *cljs-file* nil)
(def ^:dynamic *cljs-warn-on-redef* true) (def ^:dynamic *cljs-warn-on-redef* true)
Expand All @@ -58,6 +64,9 @@
(def ^:dynamic *cljs-static-fns* false) (def ^:dynamic *cljs-static-fns* false)
(def ^:dynamic *position* nil) (def ^:dynamic *position* nil)


(defn empty-env []
{:ns (@namespaces *cljs-ns*) :context :statement :locals {}})

(defmacro ^:private debug-prn (defmacro ^:private debug-prn
[& args] [& args]
`(.println System/err (str ~@args))) `(.println System/err (str ~@args)))
Expand Down Expand Up @@ -1604,11 +1613,11 @@
(binding [*cljs-ns* 'cljs.user (binding [*cljs-ns* 'cljs.user
*cljs-file* (.getPath ^java.net.URL res)] *cljs-file* (.getPath ^java.net.URL res)]
(with-open [r (io/reader res)] (with-open [r (io/reader res)]
(let [env {:ns (@namespaces *cljs-ns*) :context :statement :locals {}} (let [env (empty-env)
pbr (clojure.lang.LineNumberingPushbackReader. r) pbr (clojure.lang.LineNumberingPushbackReader. r)
eof (Object.)] eof (Object.)]
(loop [r (read pbr false eof false)] (loop [r (read pbr false eof false)]
(let [env (assoc env :ns (@namespaces *cljs-ns*))] (let [env (assoc env :ns (get-namespace *cljs-ns*))]
(when-not (identical? eof r) (when-not (identical? eof r)
(analyze env r) (analyze env r)
(recur (read pbr false eof false)))))))))) (recur (read pbr false eof false))))))))))
Expand Down Expand Up @@ -1654,7 +1663,7 @@
ns-name nil ns-name nil
deps nil] deps nil]
(if (seq forms) (if (seq forms)
(let [env {:ns (@namespaces *cljs-ns*) :context :statement :locals {}} (let [env (empty-env)
ast (analyze env (first forms))] ast (analyze env (first forms))]
(do (emit ast) (do (emit ast)
(if (= (:op ast) :ns) (if (= (:op ast) :ns)
Expand Down
10 changes: 5 additions & 5 deletions src/clj/cljs/repl.clj
Expand Up @@ -90,11 +90,11 @@


(defn load-stream [repl-env filename stream] (defn load-stream [repl-env filename stream]
(with-open [r (io/reader stream)] (with-open [r (io/reader stream)]
(let [env {:ns (@comp/namespaces comp/*cljs-ns*) :context :statement :locals {}} (let [env (comp/empty-env)
pbr (clojure.lang.LineNumberingPushbackReader. r) pbr (clojure.lang.LineNumberingPushbackReader. r)
eof (Object.)] eof (Object.)]
(loop [r (read pbr false eof false)] (loop [r (read pbr false eof false)]
(let [env (assoc env :ns (@comp/namespaces comp/*cljs-ns*))] (let [env (assoc env :ns (comp/get-namespace comp/*cljs-ns*))]
(when-not (identical? eof r) (when-not (identical? eof r)
(evaluate-form repl-env env filename r) (evaluate-form repl-env env filename r)
(recur (read pbr false eof false)))))))) (recur (read pbr false eof false))))))))
Expand All @@ -118,7 +118,7 @@


(defn- eval-and-print [repl-env env form] (defn- eval-and-print [repl-env env form]
(let [ret (evaluate-form repl-env (let [ret (evaluate-form repl-env
(assoc env :ns (@comp/namespaces comp/*cljs-ns*)) (assoc env :ns (comp/get-namespace comp/*cljs-ns*))
"<cljs repl>" "<cljs repl>"
form form
(wrap-fn form))] (wrap-fn form))]
Expand All @@ -140,8 +140,8 @@
(let [load-file-fn (fn [repl-env file] (load-file repl-env file))] (let [load-file-fn (fn [repl-env file] (load-file repl-env file))]
{'in-ns (fn [_ quoted-ns] {'in-ns (fn [_ quoted-ns]
(let [ns-name (second quoted-ns)] (let [ns-name (second quoted-ns)]
(when-not (@comp/namespaces ns-name) (when-not (comp/get-namespace ns-name)
(swap! comp/namespaces assoc ns-name {:name ns-name})) (comp/set-namespace ns-name {:name ns-name}))
(set! comp/*cljs-ns* ns-name))) (set! comp/*cljs-ns* ns-name)))
'load-file load-file-fn 'load-file load-file-fn
'clojure.core/load-file load-file-fn 'clojure.core/load-file load-file-fn
Expand Down

0 comments on commit 67f55ee

Please sign in to comment.