From 1d52e970a03cc5bbf722fec5c4a37a29a7c7beb6 Mon Sep 17 00:00:00 2001 From: Nathan Marz Date: Thu, 1 Sep 2016 23:20:53 -0400 Subject: [PATCH] another perf enhancement --- src/clj/com/rpl/specter/impl.cljc | 32 +++++++++++++++++++++---------- 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/src/clj/com/rpl/specter/impl.cljc b/src/clj/com/rpl/specter/impl.cljc index 854c2e7..d3b6023 100644 --- a/src/clj/com/rpl/specter/impl.cljc +++ b/src/clj/com/rpl/specter/impl.cljc @@ -257,16 +257,28 @@ (set-cell! cell ret) ret)) -;; TODO: this used to be a macro for clj... check if that's still important -(defn compiled-traverse* [path result-fn structure] - (exec-select* - path - [] - structure - (fn [vals structure] - (if (identical? vals []) - (result-fn structure) - (result-fn (conj vals structure)))))) +#?( + :clj + (defmacro compiled-traverse* [path result-fn structure] + `(exec-select* + ~path + [] + ~structure + (fn [vals# structure#] + (if (identical? vals# []) + (~result-fn structure#) + (~result-fn (conj vals# structure#)))))) + + :cljs + (defn compiled-traverse* [path result-fn structure] + (exec-select* + path + [] + structure + (fn [vals structure] + (if (identical? vals []) + (result-fn structure) + (result-fn (conj vals structure)))))))