0
ASM Tree APIには、メソッド内の命令のリストを含むInsnListがあります。InsnListを基本ブロックに分割する
これを基本ブロックに分割したい:最後のもの以外の各命令がちょうど1つの後続を持ち、最初の命令以外の命令がジャンプの対象にならないような一連の命令。
これはどのようにして達成できますか?
ASM Tree APIには、メソッド内の命令のリストを含むInsnListがあります。InsnListを基本ブロックに分割する
これを基本ブロックに分割したい:最後のもの以外の各命令がちょうど1つの後続を持ち、最初の命令以外の命令がジャンプの対象にならないような一連の命令。
これはどのようにして達成できますか?
Java 7+のスタックフレームは、メソッドopcodesに含まれます。メソッドの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);
}
}