From b156727f3c1393d8cc26e1c4569750fd7bb61801 Mon Sep 17 00:00:00 2001 From: Nathan Marz Date: Mon, 23 May 2016 10:01:44 -0400 Subject: [PATCH] fix inline handle params for cljs, most tests passing --- src/clj/com/rpl/specter/impl.cljx | 6 ++++-- src/clj/com/rpl/specter/macros.clj | 7 ++++--- test/com/rpl/specter/core_test.cljx | 2 +- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/src/clj/com/rpl/specter/impl.cljx b/src/clj/com/rpl/specter/impl.cljx index e40d1a4..0388a00 100644 --- a/src/clj/com/rpl/specter/impl.cljx +++ b/src/clj/com/rpl/specter/impl.cljx @@ -18,6 +18,7 @@ (defn spy [e] + (println "SPY:") (println (pr-str e)) e) @@ -680,8 +681,9 @@ #+cljs (defn handle-params [precompiled params-maker possible-params] (let [params (fast-object-array (count params-maker))] - (doseq [i params-maker] - (aset params i ((get possible-params i)))) + ;;TODO: is there a faster way to do this in cljs? + (doseq [i (range (count params-maker))] + (aset params i ((get possible-params (get params-maker i))))) (bind-params* precompiled params 0) )) diff --git a/src/clj/com/rpl/specter/macros.clj b/src/clj/com/rpl/specter/macros.clj index c704aef..cea1cb6 100644 --- a/src/clj/com/rpl/specter/macros.clj +++ b/src/clj/com/rpl/specter/macros.clj @@ -350,7 +350,7 @@ (mapcat (fn [e] (cond (i/fn-invocation? e) - (concat (-> e rest) (ic-possible-params e)) + (concat (rest e) (ic-possible-params e)) (vector? e) (ic-possible-params e) @@ -368,6 +368,7 @@ used-locals (vec (i/walk-select local-syms vector path)) prepared-path (ic-prepare-path local-syms (walk/macroexpand-all (vec path))) possible-params (vec (ic-possible-params path)) + ;; TODO: unclear if using long here versus string makes ;; a significant difference ;; - but using random longs creates possibility of collisions @@ -410,12 +411,12 @@ ~precompiled-sym (.-precompiled info#) ~params-maker-sym (.-params-maker info#)] - (if (some? ~precompiled-sym) + (if (nil? ~precompiled-sym) + (i/comp-paths* ~(vec path)) (if (nil? ~params-maker-sym) ~precompiled-sym ~handle-params-code ) - (i/comp-paths* ~(vec path)) )) )) diff --git a/test/com/rpl/specter/core_test.cljx b/test/com/rpl/specter/core_test.cljx index d1ebab5..e97d5ce 100644 --- a/test/com/rpl/specter/core_test.cljx +++ b/test/com/rpl/specter/core_test.cljx @@ -239,7 +239,7 @@ (deftest atom-test (let [v (transform s/ATOM inc (atom 1))] - (is (instance? clojure.lang.Atom v)) + (is (instance? #+clj clojure.lang.Atom #+cljs cljs.core/Atom v)) (is (= 2 (select-one s/ATOM v) @v)))) (defspec view-test