|
206 | 206 | (apply merge
|
207 | 207 | ((juxt :requires :require-macros)
|
208 | 208 | (ana/get-namespace ana/*cljs-ns*)))]
|
209 |
| - (reader/read {:read-cond :allow :features #{:cljs}} |
210 |
| - (readers/source-logging-push-back-reader |
211 |
| - (java.io.StringReader. form-str)))))) |
| 209 | + (let [rdr (readers/source-logging-push-back-reader |
| 210 | + (java.io.StringReader. form-str)) |
| 211 | + eof (Object.)] |
| 212 | + (take-while #(not= % eof) |
| 213 | + (repeatedly |
| 214 | + #(reader/read {:read-cond :allow |
| 215 | + :features #{:cljs} |
| 216 | + :eof eof} |
| 217 | + rdr))))))) |
212 | 218 |
|
213 | 219 | (defn eval-cljs [repl-env env form opts]
|
214 | 220 | (cljs.repl/evaluate-form repl-env
|
|
242 | 248 | special-fns (merge cljs.repl/default-special-fns (:special-fns repl-options))
|
243 | 249 | is-special-fn? (set (keys special-fns))]
|
244 | 250 | (try
|
245 |
| - (let [form (read-cljs-string code) |
246 |
| - env (assoc (ana/empty-env) :ns (ana/get-namespace init-ns)) |
247 |
| - result (when form |
248 |
| - (if (and (seq? form) (is-special-fn? (first form))) |
249 |
| - (do ((get special-fns (first form)) repl-env env form repl-options) |
250 |
| - nil) |
251 |
| - (eval-cljs repl-env env form repl-options)))] |
252 |
| - (.flush ^Writer *out*) |
253 |
| - (.flush ^Writer *err*) |
254 |
| - (when (and |
255 |
| - (or (not ns) |
256 |
| - (not= init-ns ana/*cljs-ns*)) |
257 |
| - ana/*cljs-ns*) |
258 |
| - (swap! session assoc #'ana/*cljs-ns* ana/*cljs-ns*)) |
259 |
| - (transport/send |
260 |
| - transport |
261 |
| - (response-for msg |
262 |
| - {:value (or result "nil") |
263 |
| - :printed-value 1 |
264 |
| - :ns (@session #'ana/*cljs-ns*)}))) |
| 251 | + (let [forms (read-cljs-string code)] |
| 252 | + (doseq [form forms] |
| 253 | + (let [env (assoc (ana/empty-env) :ns (ana/get-namespace init-ns)) |
| 254 | + result (when form |
| 255 | + (if (and (seq? form) (is-special-fn? (first form))) |
| 256 | + (do ((get special-fns (first form)) repl-env env form repl-options) |
| 257 | + nil) |
| 258 | + (eval-cljs repl-env env form repl-options)))] |
| 259 | + (.flush ^Writer *out*) |
| 260 | + (.flush ^Writer *err*) |
| 261 | + (when (and |
| 262 | + (or (not ns) |
| 263 | + (not= init-ns ana/*cljs-ns*)) |
| 264 | + ana/*cljs-ns*) |
| 265 | + (swap! session assoc #'ana/*cljs-ns* ana/*cljs-ns*)) |
| 266 | + (transport/send |
| 267 | + transport |
| 268 | + (response-for msg |
| 269 | + {:value (or result "nil") |
| 270 | + :printed-value 1 |
| 271 | + :ns (@session #'ana/*cljs-ns*)}))))) |
265 | 272 | (catch Throwable t
|
266 | 273 | (repl-caught session transport msg t repl-env repl-options)))))))
|
267 | 274 |
|
|
0 commit comments