Perf: only set bindings when necessary

This commit is contained in:
Peter Taoussanis 2013-08-02 16:28:05 +07:00
parent 4071d0f3ec
commit c69bb0ec5f

View file

@ -96,8 +96,11 @@
"Low-level API. Serializes arg (any Clojure data type) to a DataOutputStream." "Low-level API. Serializes arg (any Clojure data type) to a DataOutputStream."
[^DataOutputStream data-output-stream x & [{:keys [print-dup?] [^DataOutputStream data-output-stream x & [{:keys [print-dup?]
:or {print-dup? true}}]] :or {print-dup? true}}]]
(binding [*print-dup* print-dup?] (if (identical? *print-dup* print-dup?)
(freeze-to-stream data-output-stream x))) (freeze-to-stream data-output-stream x)
(binding [*print-dup* print-dup?] ; Expensive
(freeze-to-stream data-output-stream x))))
(defmacro ^:private freezer (defmacro ^:private freezer
"Helper to extend Freezable protocol." "Helper to extend Freezable protocol."
@ -281,8 +284,10 @@
"Low-level API. Deserializes a frozen object from given DataInputStream to its "Low-level API. Deserializes a frozen object from given DataInputStream to its
original Clojure data type." original Clojure data type."
[data-input-stream & [{:keys [read-eval?]}]] [data-input-stream & [{:keys [read-eval?]}]]
(binding [*read-eval* read-eval?] (if (identical? *read-eval* read-eval?)
(thaw-from-stream data-input-stream))) (thaw-from-stream data-input-stream)
(binding [*read-eval* read-eval?] ; Expensive
(thaw-from-stream data-input-stream))))
(defn- try-parse-header [ba] (defn- try-parse-header [ba]
(when-let [[head-ba data-ba] (utils/ba-split ba 4)] (when-let [[head-ba data-ba] (utils/ba-split ba 4)]