diff options
author | Rich Hickey <richhickey@gmail.com> | 2010-09-08 14:02:19 -0400 |
---|---|---|
committer | Rich Hickey <richhickey@gmail.com> | 2010-09-08 14:02:19 -0400 |
commit | 099aa8615c378fee98a492837cc0415abd3a6087 (patch) | |
tree | 2116420c215b8cb9f6700a034f6e5498f02a2661 | |
parent | 9b702a06dbbc88eeb7efd3c1afdcb9a437557e8b (diff) |
don't box static method returns in statement context
-rw-r--r-- | src/jvm/clojure/lang/Compiler.java | 17 |
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(){ |