在ASM Tree API中,我有一个InsnList,其中包含方法中的指令列表。
我想将其拆分为基本块:一系列指令,使得除最后一条指令之外的每一条指令只有一个后续指令,并且除了第一条指令之外,任何指令都不能成为跳转的目标。
我将如何实现这一点?
在 Java 中,7+ 堆栈帧将包含在方法操作码中。遍历方法的 InsnList,并按每个 FrameInsn 拆分块。
例:
List<InsnList> l = Lists.newList();
InsnList il = new InsnList();
for (AbstractInsnNode ain : method.instructions.toArray()) {
if (ain.getType == AbstractInsnNode.FRAME){
l.add(il);
il = new InsnList();
} else {
il.add(ain);
}
}