0

В API ASM Tree у меня есть InsnList, содержащий список инструкций в методе.Разбиение InsnList на базовые блоки

Я хочу разбить это на базовые блоки: последовательность инструкций, так что каждая команда, кроме последней, имеет ровно один преемник и такая, что никакая команда, кроме первой, не может быть целью прыжка.

Как бы это осуществить?

ответ

2

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

 Смежные вопросы

  • Нет связанных вопросов^_^