Skip to content

Commit fb12e78

Browse files
committed
CLJS-1296: browser REPL should queue prints before connection then flush after connection
clojure.browser.repl now immediately sets up printing introduce a printing queue upon connection if the queue is not empty flush it
1 parent 49f3ea9 commit fb12e78

File tree

2 files changed

+19
-4
lines changed

2 files changed

+19
-4
lines changed

src/main/cljs/clojure/browser/repl.cljs

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,9 @@
1717
clojure.browser.repl
1818
(:require [goog.dom :as gdom]
1919
[goog.object :as gobj]
20+
[goog.array :as garray]
2021
[goog.userAgent.product :as product]
21-
[clojure.browser.net :as net]
22+
[clojure.browser.net :as net]
2223
[clojure.browser.event :as event]
2324
;; repl-connection callback will receive goog.require('cljs.repl')
2425
;; and monkey-patched require expects to be able to derive it
@@ -27,10 +28,21 @@
2728
[cljs.repl]))
2829

2930
(def xpc-connection (atom nil))
31+
(def print-queue (array))
32+
33+
(defn flush-print-queue! [conn]
34+
(doseq [str print-queue]
35+
(net/transmit conn :print str))
36+
(garray/clear print-queue))
3037

3138
(defn repl-print [data]
32-
(if-let [conn @xpc-connection]
33-
(net/transmit conn :print (pr-str data))))
39+
(.push print-queue (pr-str data))
40+
(when-let [conn @xpc-connection]
41+
(flush-print-queue! conn)))
42+
43+
(set! *print-fn* repl-print)
44+
(set! *print-err-fn* repl-print)
45+
(set! *print-newline* true)
3446

3547
(defn get-ua-product []
3648
(cond

src/main/clojure/cljs/repl/browser.clj

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,10 @@
143143
(cljsc/-compile
144144
'[(set! *print-fn* clojure.browser.repl/repl-print)
145145
(set! *print-err-fn* clojure.browser.repl/repl-print)
146-
(set! *print-newline* true)] {})
146+
(set! *print-newline* true)
147+
(when (pos? (count clojure.browser.repl/print-queue))
148+
(clojure.browser.repl/flush-print-queue!
149+
@clojure.browser.repl/xpc-connection))] {})
147150
identity))
148151

149152
(defn add-in-order [{:keys [expecting fns]} order f]

0 commit comments

Comments
 (0)