summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRich Hickey <richhickey@gmail.com>2008-04-06 13:04:49 +0000
committerRich Hickey <richhickey@gmail.com>2008-04-06 13:04:49 +0000
commit7105570fc4634d8702fb1e143ce64eb2f75ed56d (patch)
tree715ce608e869a720eb7e151927624d5433712b75
parent2c63d7b933fb7a02714cc7864498dea96ca87618 (diff)
fixed reflective no-arg calls in statement position
-rw-r--r--src/jvm/clojure/lang/Compiler.java23
1 files changed, 13 insertions, 10 deletions
diff --git a/src/jvm/clojure/lang/Compiler.java b/src/jvm/clojure/lang/Compiler.java
index 910b2841..c6168cf3 100644
--- a/src/jvm/clojure/lang/Compiler.java
+++ b/src/jvm/clojure/lang/Compiler.java
@@ -798,22 +798,24 @@ static class InstanceFieldExpr extends FieldExpr implements AssignableExpr{
}
public void emit(C context, FnExpr fn, GeneratorAdapter gen){
- if(context != C.STATEMENT)
+ gen.visitLineNumber(line, gen.mark());
+ if(targetClass != null)
{
- gen.visitLineNumber(line, gen.mark());
- if(targetClass != null)
+ if(context != C.STATEMENT)
{
target.emit(C.EXPRESSION, fn, gen);
gen.checkCast(Type.getType(targetClass));
gen.getField(Type.getType(targetClass), fieldName, Type.getType(field.getType()));
HostExpr.emitBoxReturn(fn, gen, field.getType());
}
- else
- {
- target.emit(C.EXPRESSION, fn, gen);
- gen.push(fieldName);
- gen.invokeStatic(REFLECTOR_TYPE, invokeNoArgInstanceMember);
- }
+ }
+ else
+ {
+ target.emit(C.EXPRESSION, fn, gen);
+ gen.push(fieldName);
+ gen.invokeStatic(REFLECTOR_TYPE, invokeNoArgInstanceMember);
+ if(context == C.STATEMENT)
+ gen.pop();
}
}
@@ -3372,7 +3374,8 @@ public static Object macroexpand1(Object x) throws Exception{
if(sym.name.charAt(0) == '.')
{
if(RT.length(form) < 2)
- throw new IllegalArgumentException("Malformed member expression, expecting (.member target ...)");
+ 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());
}