From febff6a36631a7997508eb9831cd2a0aa88c04f0 Mon Sep 17 00:00:00 2001
From: Tom Jack <tom@tomoj.la>
Date: Mon, 26 Nov 2012 03:07:51 -0800
Subject: [PATCH] TMACRO-2: protect let-bound symbols from macrolet expansion

---
 src/main/clojure/clojure/tools/macro.clj      |    4 +++-
 src/test/clojure/clojure/tools/test_macro.clj |    6 +++++-
 2 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/src/main/clojure/clojure/tools/macro.clj b/src/main/clojure/clojure/tools/macro.clj
index 33e450d..d755255 100644
--- a/src/main/clojure/clojure/tools/macro.clj
+++ b/src/main/clojure/clojure/tools/macro.clj
@@ -70,7 +70,9 @@
     (seq? form)
       (let [f (first form)]
         (cond (contains? special-forms f) form
-              (contains? macro-fns f)     (apply (get macro-fns f) (rest form))
+              (contains? macro-fns f)     (if (protected? f)
+                                            form
+                                            (apply (get macro-fns f) (rest form)))
               (symbol? f)  (cond
                             (protected? f) form
                             ; macroexpand-1 fails if f names a class
diff --git a/src/test/clojure/clojure/tools/test_macro.clj b/src/test/clojure/clojure/tools/test_macro.clj
index d702ac7..000cdd1 100644
--- a/src/test/clojure/clojure/tools/test_macro.clj
+++ b/src/test/clojure/clojure/tools/test_macro.clj
@@ -17,7 +17,11 @@
 (deftest macrolet-test
   (is (= (macroexpand-1
            '(macro/macrolet [(foo [form] `(~form ~form))]  (foo x)))
-         '(do (x x)))))
+         '(do (x x))))
+  (is (= (macroexpand-1
+           '(macro/macrolet [(foo [form] `(~form ~form))]
+              (let [foo identity] (foo x))))
+         '(do (let* [foo identity] (foo x))))))
 
 (deftest symbol-macrolet-test
   (is (= (macroexpand-1
-- 
1.7.9.5

