Don't forget to pop the condition off the stack
This commit is contained in:
@@ -114,12 +114,14 @@ fun interpreterLoop(
|
|||||||
RETURN -> return ValueReturned(VOID_VALUE)
|
RETURN -> return ValueReturned(VOID_VALUE)
|
||||||
IFEQ, IFNE, IFLT, IFGE, IFGT, IFLE, IFNULL, IFNONNULL -> {
|
IFEQ, IFNE, IFLT, IFGE, IFGT, IFLE, IFNULL, IFNONNULL -> {
|
||||||
if (interpreter.checkUnaryCondition(frame.getStack(0)!!, insnOpcode)) {
|
if (interpreter.checkUnaryCondition(frame.getStack(0)!!, insnOpcode)) {
|
||||||
|
frame.execute(currentInsn, interpreter)
|
||||||
goto((currentInsn as JumpInsnNode).label)
|
goto((currentInsn as JumpInsnNode).label)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
IF_ICMPEQ, IF_ICMPNE, IF_ICMPLT, IF_ICMPGE, IF_ICMPGT, IF_ICMPLE, IF_ACMPEQ, IF_ACMPNE -> {
|
IF_ICMPEQ, IF_ICMPNE, IF_ICMPLT, IF_ICMPGE, IF_ICMPGT, IF_ICMPLE, IF_ACMPEQ, IF_ACMPNE -> {
|
||||||
if (interpreter.checkBinaryCondition(frame.getStack(0)!!, frame.getStack(1)!!, insnOpcode)) {
|
if (interpreter.checkBinaryCondition(frame.getStack(0)!!, frame.getStack(1)!!, insnOpcode)) {
|
||||||
|
frame.execute(currentInsn, interpreter)
|
||||||
goto((currentInsn as JumpInsnNode).label)
|
goto((currentInsn as JumpInsnNode).label)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -35,4 +35,31 @@ class TestData {
|
|||||||
static double returnDouble() {
|
static double returnDouble() {
|
||||||
return 2.0d;
|
return 2.0d;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int variable() {
|
||||||
|
int i = 153;
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int unaryMinus() {
|
||||||
|
int i = 153;
|
||||||
|
return -i;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int ifThen() {
|
||||||
|
boolean a = true;
|
||||||
|
if (a)
|
||||||
|
return 2;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int ifElse() {
|
||||||
|
boolean a = false;
|
||||||
|
if (a) {
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user