我正在使用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方法都能正常工作。
可能是什么问题?