diff options
author | Rich Hickey <richhickey@gmail.com> | 2010-04-30 15:44:20 -0400 |
---|---|---|
committer | Rich Hickey <richhickey@gmail.com> | 2010-04-30 15:44:20 -0400 |
commit | 762d1531b6440722d5d1c0dfee4776d99289385e (patch) | |
tree | 48a1a86843fa11ab143f924567bfd13b5823f3fb /src/jvm | |
parent | d2fce54ccfcf46815524c2af94d1939573c1e9a9 (diff) |
Fix defrecord keyword lookup on fields matching no-arg methods, fixes #329
Diffstat (limited to 'src/jvm')
-rw-r--r-- | src/jvm/clojure/lang/Compiler.java | 10 |
1 files changed, 7 insertions, 3 deletions
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); |