diff --git a/src/clj/com/rpl/specter/impl.cljc b/src/clj/com/rpl/specter/impl.cljc index 3338776..8195273 100644 --- a/src/clj/com/rpl/specter/impl.cljc +++ b/src/clj/com/rpl/specter/impl.cljc @@ -421,8 +421,10 @@ (defrecord LocalSym [val sym]) +;; needs to be named "avar" instead of "var" due to regression in cljs circa +;; 6/26/2017. See https://github.com/nathanmarz/specter/issues/215 (defrecord VarUse - [val var sym]) + [val avar sym]) (defrecord SpecialFormUse [val code]) @@ -686,14 +688,14 @@ (preserve-map magic-precompilation* o) (instance? VarUse o) - (if (dynamic-var? (:var o)) + (if (dynamic-var? (:avar o)) (->DynamicVal (maybe-direct-nav (:sym o) - (or (-> o :var direct-nav?) + (or (-> o :avar direct-nav?) (-> o :sym direct-nav?)))) (maybe-direct-nav (:val o) - (or (-> o :var direct-nav?) + (or (-> o :avar direct-nav?) (-> o :sym direct-nav?) (-> o :val direct-nav?)))) diff --git a/test/com/rpl/specter/core_test.cljc b/test/com/rpl/specter/core_test.cljc index bab6ca4..75331d7 100644 --- a/test/com/rpl/specter/core_test.cljc +++ b/test/com/rpl/specter/core_test.cljc @@ -1577,6 +1577,16 @@ (is (= [1 3 3] (transform MIDDLE inc [1 2 3]))) ) +(def ^:dynamic *dvar* :a) + +(defn dvar-tester [] + (select-any *dvar* {:a 1 :b 2})) + +(deftest dynamic-var-ic-test + (is (= 1 (dvar-tester))) + (is (= 2 (binding [*dvar* :b] (dvar-tester)))) + ) + #?(:clj (do (defprotocolpath FooPP)