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 | |
parent | d2fce54ccfcf46815524c2af94d1939573c1e9a9 (diff) |
Fix defrecord keyword lookup on fields matching no-arg methods, fixes #329
-rw-r--r-- | src/clj/clojure/core_deftype.clj | 2 | ||||
-rw-r--r-- | src/jvm/clojure/lang/Compiler.java | 10 |
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); |