虽然使用ASM 4.0的Java字节码循环不起作用

时间:2016-05-16 10:19:13

标签: java java-bytecode-asm

我正在使用ASM 4.0编写Java字节码语言的编译器。执行程序会导致程序崩溃。堆栈跟踪的相关部分如下:

java.lang.ArrayIndexOutOfBoundsException: 0
    at org.objectweb.asm.Frame.a(Unknown Source)
    at org.objectweb.asm.Frame.a(Unknown Source)
    at org.objectweb.asm.MethodWriter.visitMaxs(Unknown Source)

问题在于while循环的代码:

Label start = new Label();
Label end = new Label();

methodVisitor.visitLabel(start);
generateCodeForACondition(condition, methodVisitor);

methodVisitor.visitJumpInsn(IFEQ, end);
generateCodeForABody(ws.getBody(), methodVisitor);
methodVisitor.visitJumpInsn(GOTO, start);

methodVisitor.visitLabel(end);

有趣的事实:我的if / else语句的代码与while循环的代码非常相似,但是if / else代码有效,而while循环代码却没有。这意味着generateCodeForACondition和generateCodeForABody方法都能正常工作。

可能是什么问题?

0 个答案:

没有答案