summaryrefslogtreecommitdiff
path: root/src/jvm/clojure
diff options
context:
space:
mode:
authorRich Hickey <richhickey@gmail.com>2010-03-19 12:10:46 -0400
committerRich Hickey <richhickey@gmail.com>2010-03-19 12:10:46 -0400
commit67864eb0d91867ff03b87d6874be28f1476d27df (patch)
tree76f8c1ec54f39fbc58584e7530e056d81751204f /src/jvm/clojure
parent109b015af4a0ca873412875b6e7705bec067640e (diff)
added IObj and metadata propagation support for reify, so #^{:my :meta} (reify ...) works
Diffstat (limited to 'src/jvm/clojure')
-rw-r--r--src/jvm/clojure/lang/Compiler.java9
1 files changed, 7 insertions, 2 deletions
diff --git a/src/jvm/clojure/lang/Compiler.java b/src/jvm/clojure/lang/Compiler.java
index b484534c..080fc060 100644
--- a/src/jvm/clojure/lang/Compiler.java
+++ b/src/jvm/clojure/lang/Compiler.java
@@ -6010,13 +6010,18 @@ static public class NewInstanceExpr extends ObjExpr{
ISeq rform = RT.next(form);
- IPersistentVector interfaces = (IPersistentVector) RT.first(rform);
+ IPersistentVector interfaces = ((IPersistentVector) RT.first(rform)).cons(Symbol.intern("clojure.lang.IObj"));
rform = RT.next(rform);
- return build(interfaces, null, null, classname, classname, null, rform);
+ Expr ret = build(interfaces, null, null, classname, classname, null, rform);
+ if(frm instanceof IObj && ((IObj) frm).meta() != null)
+ return new MetaExpr(ret, (MapExpr) MapExpr
+ .parse(context == C.EVAL ? context : C.EXPRESSION, ((IObj) frm).meta()));
+ else
+ return ret;
}
}