diff --git a/src/main/java/haidnor/jvm/instruction/comparisons/IFEQ.java b/src/main/java/haidnor/jvm/instruction/comparisons/IFEQ.java index 98359d8..2d0354f 100644 --- a/src/main/java/haidnor/jvm/instruction/comparisons/IFEQ.java +++ b/src/main/java/haidnor/jvm/instruction/comparisons/IFEQ.java @@ -19,16 +19,24 @@ public class IFEQ extends Instruction { @Override public void execute(Frame frame) { StackValue v1 = frame.pop(); - if ((int) v1.getValue() == 0) { - super.setOffSet(offSet); + if (v1.getValue() instanceof Boolean) { + if (!((boolean) v1.getValue())) { + super.setOffSet(offSet); + } else { + super.setOffSet(3); + } } else { - super.setOffSet(3); + if ((int) v1.getValue() == 0) { + super.setOffSet(offSet); + } else { + super.setOffSet(3); + } } } @Override public String toString() { - return super.index() + " " + this.getClass().getSimpleName() + " " + offSet; + return super.index() + " " + this.getClass().getSimpleName() + " " + offSet; } } diff --git a/src/test/java/haidnor/jvm/test/TestJVM.java b/src/test/java/haidnor/jvm/test/TestJVM.java index 69381a2..6f0c209 100644 --- a/src/test/java/haidnor/jvm/test/TestJVM.java +++ b/src/test/java/haidnor/jvm/test/TestJVM.java @@ -92,6 +92,11 @@ public class TestJVM { runMainClass(demo_foreach.class); } + @Test + public void demo_foreach_2() throws Exception { + runMainClass(demo_foreach_2.class); + } + @Test public void test_8() throws Exception { runMainClass(Demo8.class); diff --git a/src/test/java/haidnor/jvm/test/demo/demo_foreach_2.java b/src/test/java/haidnor/jvm/test/demo/demo_foreach_2.java new file mode 100644 index 0000000..002a36d --- /dev/null +++ b/src/test/java/haidnor/jvm/test/demo/demo_foreach_2.java @@ -0,0 +1,20 @@ +package haidnor.jvm.test.demo; + +import java.util.ArrayList; + +/** + * 需要添加启动参数 + * --add-opens java.base/java.util=ALL-UNNAMED + */ +public class demo_foreach_2 { + + public static void main(String[] args) { + ArrayList list = new ArrayList<>(); + list.add(1); + list.add(2); + for (Integer integer : list) { + System.out.println(integer); + } + } + +}