diff --git a/src/net/cgrand/xforms.cljc b/src/net/cgrand/xforms.cljc index 7c00754..775e94a 100644 --- a/src/net/cgrand/xforms.cljc +++ b/src/net/cgrand/xforms.cljc @@ -105,11 +105,13 @@ (if (destructuring-pair? arg) (let [[karg varg] arg] `([~acc ~karg ~varg] ~@body)) - `([~acc k# v#] (let [~arg - (macros/case - :clj (clojure.lang.MapEntry. k# v#) - :cljs [k# v#] - :cljd (MapEntry k# v#))] ~@body))))) + (let [k (gensym "k__") + v (gensym "v__") + arg-value (macros/case + :clj `(clojure.lang.MapEntry. ~k ~v) + :cljs [k v] + :cljd `(MapEntry ~k ~v))] + `([~acc ~k ~v] (let [~arg ~arg-value] ~@body)))))) (not (arities 2)) (conj (let [[[acc karg varg] & body] (arities 3)] `([~acc [~karg ~varg]] ~@body))))] `(reify diff --git a/test/net/cgrand/xforms_test.cljc b/test/net/cgrand/xforms_test.cljc index 18b9b1f..16c9eb2 100644 --- a/test/net/cgrand/xforms_test.cljc +++ b/test/net/cgrand/xforms_test.cljc @@ -158,3 +158,9 @@ '(a b) false '{foo bar} false '{foo :bar} false))) + +(defmacro wraps-for-with-no-destructuring [] + (x/into [] (x/for [x (range 5)] x))) + +(deftest for-in-macro + (is (= [0 1 2 3 4] (wraps-for-with-no-destructuring))))