diff options
author | Rich Hickey <richhickey@gmail.com> | 2008-04-06 13:04:49 +0000 |
---|---|---|
committer | Rich Hickey <richhickey@gmail.com> | 2008-04-06 13:04:49 +0000 |
commit | 7105570fc4634d8702fb1e143ce64eb2f75ed56d (patch) | |
tree | 715ce608e869a720eb7e151927624d5433712b75 /src | |
parent | 2c63d7b933fb7a02714cc7864498dea96ca87618 (diff) |
fixed reflective no-arg calls in statement position
Diffstat (limited to 'src')
-rw-r--r-- | src/jvm/clojure/lang/Compiler.java | 23 |
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()); } |