summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRich Hickey <richhickey@gmail.com>2010-09-08 14:02:19 -0400
committerRich Hickey <richhickey@gmail.com>2010-09-08 14:02:19 -0400
commit099aa8615c378fee98a492837cc0415abd3a6087 (patch)
tree2116420c215b8cb9f6700a034f6e5498f02a2661
parent9b702a06dbbc88eeb7efd3c1afdcb9a437557e8b (diff)
don't box static method returns in statement context
-rw-r--r--src/jvm/clojure/lang/Compiler.java17
1 files changed, 14 insertions, 3 deletions
diff --git a/src/jvm/clojure/lang/Compiler.java b/src/jvm/clojure/lang/Compiler.java
index d318cde3..ef5f3993 100644
--- a/src/jvm/clojure/lang/Compiler.java
+++ b/src/jvm/clojure/lang/Compiler.java
@@ -1483,7 +1483,18 @@ static class StaticMethodExpr extends MethodExpr{
Method m = new Method(methodName, Type.getReturnType(method), Type.getArgumentTypes(method));
gen.invokeStatic(type, m);
//if(context != C.STATEMENT || method.getReturnType() == Void.TYPE)
- HostExpr.emitBoxReturn(objx, gen, method.getReturnType());
+ Class retClass = method.getReturnType();
+ if(context == C.STATEMENT)
+ {
+ if(retClass == long.class || retClass == double.class)
+ gen.pop2();
+ else if(retClass != void.class)
+ gen.pop();
+ }
+ else
+ {
+ HostExpr.emitBoxReturn(objx, gen, method.getReturnType());
+ }
}
else
{
@@ -1497,9 +1508,9 @@ static class StaticMethodExpr extends MethodExpr{
method.emitClearLocals(gen);
}
gen.invokeStatic(REFLECTOR_TYPE, invokeStaticMethodMethod);
+ if(context == C.STATEMENT)
+ gen.pop();
}
- if(context == C.STATEMENT)
- gen.pop();
}
public boolean hasJavaClass(){