Skip to content

Commit 8524d7b

Browse files
committed
remove double analysis of forms at the REPL, problematic for macros with side-effects
1 parent 8643c55 commit 8524d7b

1 file changed

Lines changed: 13 additions & 12 deletions

File tree

src/main/clojure/cljs/repl.cljc

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -448,11 +448,9 @@
448448
([repl-env env filename form wrap opts]
449449
(binding [ana/*cljs-file* filename]
450450
(let [env (assoc env
451-
:root-source-info
452-
{:source-type :fragment
453-
:source-form form })
454-
ast (ana/analyze env form nil opts)
455-
js (comp/emit-str ast)
451+
:root-source-info
452+
{:source-type :fragment
453+
:source-form form})
456454
def-emits-var (:def-emits-var opts)
457455
wrap-js
458456
;; TODO: check opts as well - David
@@ -485,13 +483,16 @@
485483
(ana/no-warn
486484
(ana/analyze (assoc env :repl-env repl-env :def-emits-var def-emits-var)
487485
(wrap form) nil opts))))]
488-
(when (= (:op ast) :ns)
489-
(load-dependencies repl-env
490-
(into (vals (:requires ast))
491-
(distinct (vals (:uses ast))))
492-
opts))
486+
;; NOTE: means macros which expand to ns aren't supported for now
487+
;; when eval'ing individual forms at the REPL - David
488+
(when (= 'ns (first form))
489+
(let [ast (ana/analyze env form nil opts)]
490+
(load-dependencies repl-env
491+
(into (vals (:requires ast))
492+
(distinct (vals (:uses ast))))
493+
opts)))
493494
(when *cljs-verbose*
494-
(err-out (println js)))
495+
(err-out (println wrap-js)))
495496
(let [ret (-evaluate repl-env filename (:line (meta form)) wrap-js)]
496497
(case (:status ret)
497498
:error (throw
@@ -506,7 +507,7 @@
506507
:error ret
507508
:repl-env repl-env
508509
:form form
509-
:js js}))
510+
:js wrap-js}))
510511
:success (:value ret)))))))
511512

512513
(defn load-stream [repl-env filename res]

0 commit comments

Comments
 (0)