0

Dans l'API ASM Tree, j'ai une InsnList contenant une liste d'instructions dans une méthode. Je veux diviser ceci en blocs de base: une séquence d'instructions telle que chaque instruction, sauf la dernière, ait exactement un successeur, et qu'aucune instruction, sauf la première, ne puisse être la cible d'un saut.Division d'InsnList en blocs de base

Comment est-ce que j'accomplirais ceci?

Répondre

2

Dans Java 7+, les trames de pile seront incluses dans les opcodes de méthode. Itérer à travers InsnList d'une méthode et faire des blocs séparés par chaque FrameInsn.

Exemple:

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); 
    } 
}