diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/StackValue.java b/compiler/backend/src/org/jetbrains/jet/codegen/StackValue.java index 726fbc6518a..4dd772af0c2 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/StackValue.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/StackValue.java @@ -212,6 +212,13 @@ public abstract class StackValue { } } + protected static void pop(Type type, InstructionAdapter v) { + if (type.getSize() == 1) + v.pop(); + else + v.pop2(); + } + protected void coerce(Type toType, InstructionAdapter v) { coerce(this.type, toType, v); } @@ -220,10 +227,7 @@ public abstract class StackValue { if (toType.equals(fromType)) return; if (toType.getSort() == Type.VOID && fromType.getSort() != Type.VOID) { - if (fromType.getSize() == 1) - v.pop(); - else - v.pop2(); + pop(fromType, v); } else if (toType.getSort() != Type.VOID && fromType.getSort() == Type.VOID) { if (toType.getSort() == Type.OBJECT) { @@ -357,17 +361,7 @@ public abstract class StackValue { @Override public void put(Type type, InstructionAdapter v) { - if (type == Type.VOID_TYPE && this.type != Type.VOID_TYPE) { - if (this.type.getSize() == 2) { - v.pop2(); - } - else { - v.pop(); - } - } - else { - coerce(type, v); - } + coerce(type, v); } @Override @@ -627,10 +621,7 @@ public abstract class StackValue { method.invoke(v); Type returnType = asmMethod.getReturnType(); if (returnType != Type.VOID_TYPE) { - if (returnType.getSize() == 2) - v.pop2(); - else - v.pop(); + pop(returnType, v); } } else