summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRich Hickey <richhickey@gmail.com>2010-04-30 15:44:20 -0400
committerRich Hickey <richhickey@gmail.com>2010-04-30 15:44:20 -0400
commit762d1531b6440722d5d1c0dfee4776d99289385e (patch)
tree48a1a86843fa11ab143f924567bfd13b5823f3fb
parentd2fce54ccfcf46815524c2af94d1939573c1e9a9 (diff)
Fix defrecord keyword lookup on fields matching no-arg methods, fixes #329
-rw-r--r--src/clj/clojure/core_deftype.clj2
-rw-r--r--src/jvm/clojure/lang/Compiler.java10
2 files changed, 8 insertions, 4 deletions
diff --git a/src/clj/clojure/core_deftype.clj b/src/clj/clojure/core_deftype.clj
index 82c58a74..960b0e3b 100644
--- a/src/clj/clojure/core_deftype.clj
+++ b/src/clj/clojure/core_deftype.clj
@@ -178,7 +178,7 @@
`(reify clojure.lang.ILookupThunk
(get [~'thunk ~'gtarget]
(if (identical? (class ~'gtarget) ~'gclass)
- (. ~hinted-target ~fld)
+ (. ~hinted-target ~(keyword fld))
~'thunk)))])
base-fields))
nil))))])
diff --git a/src/jvm/clojure/lang/Compiler.java b/src/jvm/clojure/lang/Compiler.java
index 035f78d8..432f452f 100644
--- a/src/jvm/clojure/lang/Compiler.java
+++ b/src/jvm/clojure/lang/Compiler.java
@@ -778,8 +778,10 @@ static public abstract class HostExpr implements Expr, MaybePrimitiveExpr{
Expr instance = null;
if(c == null)
instance = analyze(context == C.EVAL ? context : C.EXPRESSION, RT.second(form));
- boolean maybeField = RT.length(form) == 3 && RT.third(form) instanceof Symbol;
- if(maybeField)
+ boolean maybeField = RT.length(form) == 3 &&
+ (RT.third(form) instanceof Symbol
+ || RT.third(form) instanceof Keyword);
+ if(maybeField && !(RT.third(form) instanceof Keyword))
{
Symbol sym = (Symbol) RT.third(form);
if(c != null)
@@ -789,7 +791,9 @@ static public abstract class HostExpr implements Expr, MaybePrimitiveExpr{
}
if(maybeField) //field
{
- Symbol sym = (Symbol) RT.third(form);
+ Symbol sym = (RT.third(form) instanceof Keyword)?
+ ((Keyword)RT.third(form)).sym
+ :(Symbol) RT.third(form);
Symbol tag = tagOf(form);
if(c != null) {
return new StaticFieldExpr(line, c, munge(sym.name), tag);