From f95175264df36c3d8fe2113aa9af92cda0f2f5c8 Mon Sep 17 00:00:00 2001 From: Rich Hickey Date: Sat, 13 Dec 2008 02:37:12 +0000 Subject: [PATCH] force instance member interpretation of (.method ClassName), e.g. (.getMethods String) works --- src/jvm/clojure/lang/Compiler.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/jvm/clojure/lang/Compiler.java b/src/jvm/clojure/lang/Compiler.java index ef73432d2a..3ca5570e17 100644 --- a/src/jvm/clojure/lang/Compiler.java +++ b/src/jvm/clojure/lang/Compiler.java @@ -66,6 +66,7 @@ public class Compiler implements Opcodes{ static final Symbol LIST = Symbol.create("clojure.core", "list"); static final Symbol HASHMAP = Symbol.create("clojure.core", "hash-map"); static final Symbol VECTOR = Symbol.create("clojure.core", "vector"); +static final Symbol IDENTITY = Symbol.create("clojure.core", "identity"); static final Symbol _AMP_ = Symbol.create("&"); static final Symbol ISEQ = Symbol.create("clojure.lang.ISeq"); @@ -4041,7 +4042,12 @@ public static Object macroexpand1(Object x) throws Exception{ throw new IllegalArgumentException( "Malformed member expression, expecting (.member target ...)"); Symbol meth = Symbol.intern(sname.substring(1)); - return RT.listStar(DOT, RT.second(form), meth, form.rest().rest()); + Object target = RT.second(form); + if(HostExpr.maybeClass(target,false) != null) + { + target = RT.list(IDENTITY, target); + } + return RT.listStar(DOT, target, meth, form.rest().rest()); } else if(namesStaticMember(sym)) {