summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStuart Halloway <stu@thinkrelevance.com>2010-05-19 21:16:31 -0400
committerStuart Halloway <stu@thinkrelevance.com>2010-05-20 21:26:35 -0400
commit9c367ff0e3848482b441f3119dc4ad1c400baaf2 (patch)
treed575d46e34c2f55e9b0292c60fc6090887ca0db9
parent56dd2cd8714e30d85a215d520b0248f4783fbbbd (diff)
clear macro meta #352
Signed-off-by: Stuart Halloway <stu@thinkrelevance.com>
-rw-r--r--src/jvm/clojure/lang/Var.java8
-rw-r--r--test/clojure/test_clojure/rt.clj7
2 files changed, 14 insertions, 1 deletions
diff --git a/src/jvm/clojure/lang/Var.java b/src/jvm/clojure/lang/Var.java
index ca429749..12114222 100644
--- a/src/jvm/clojure/lang/Var.java
+++ b/src/jvm/clojure/lang/Var.java
@@ -240,7 +240,7 @@ synchronized public void bindRoot(Object root){
this.root = root;
try
{
- alterMeta(assoc, RT.list(macroKey, RT.F));
+ alterMeta(dissoc, RT.list(macroKey));
}
catch (Exception e)
{
@@ -488,4 +488,10 @@ static IFn assoc = new AFn(){
return RT.assoc(m, k, v);
}
};
+static IFn dissoc = new AFn() {
+ @Override
+ public Object invoke(Object c, Object k) throws Exception {
+ return RT.dissoc(c, k);
+ }
+};
}
diff --git a/test/clojure/test_clojure/rt.clj b/test/clojure/test_clojure/rt.clj
index 007bf811..3a63c029 100644
--- a/test/clojure/test_clojure/rt.clj
+++ b/test/clojure/test_clojure/rt.clj
@@ -65,3 +65,10 @@
(should-print-err-message
#"Reflection warning, clojure/test_clojure/rt.clj:\d+ - call to java.lang.String ctor can't be resolved.\n"
(defn foo [] (String. 1 2 3)))))
+
+(def example-var)
+(deftest binding-root-clears-macro-metadata
+ (alter-meta! #'example-var assoc :macro true)
+ (is (contains? (meta #'example-var) :macro))
+ (.bindRoot #'example-var 0)
+ (is (not (contains? (meta #'example-var) :macro))))