From 8bee052a78e8c5461acf918617a267f06d0a7fbb Mon Sep 17 00:00:00 2001 From: wangxiang <276644985@qq.com> Date: Thu, 27 Jul 2023 11:17:06 +0800 Subject: [PATCH] update IFEQ --- .../jvm/instruction/comparisons/IFEQ.java | 16 +++++++++++---- src/test/java/haidnor/jvm/test/TestJVM.java | 5 +++++ .../haidnor/jvm/test/demo/demo_foreach_2.java | 20 +++++++++++++++++++ 3 files changed, 37 insertions(+), 4 deletions(-) create mode 100644 src/test/java/haidnor/jvm/test/demo/demo_foreach_2.java 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); + } + } + +}