diff options
-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(){ |