diff --git a/src/main/java/net/runelite/deob/attributes/code/Instructions.java b/src/main/java/net/runelite/deob/attributes/code/Instructions.java index 54df6cf832..3f923b42a2 100644 --- a/src/main/java/net/runelite/deob/attributes/code/Instructions.java +++ b/src/main/java/net/runelite/deob/attributes/code/Instructions.java @@ -79,6 +79,15 @@ public class Instructions public void remove(Instruction ins) { + for (Instruction i : instructions) + { + if (i instanceof JumpingInstruction) + { + JumpingInstruction j = (JumpingInstruction) i; + assert !j.getJumps().contains(ins); + } + } + ins.remove(); instructions.remove(ins); } diff --git a/src/main/java/net/runelite/deob/deobfuscators/IllegalStateExceptions.java b/src/main/java/net/runelite/deob/deobfuscators/IllegalStateExceptions.java index cdff714ad5..b021725e40 100644 --- a/src/main/java/net/runelite/deob/deobfuscators/IllegalStateExceptions.java +++ b/src/main/java/net/runelite/deob/deobfuscators/IllegalStateExceptions.java @@ -39,6 +39,7 @@ public class IllegalStateExceptions implements Deobfuscator Instructions instructions = c.getInstructions(); instructions.clearBlockGraph(); + instructions.buildJumpGraph(); List ilist = instructions.getInstructions(); for (int i = 0; i < ilist.size(); ++i) @@ -109,7 +110,11 @@ public class IllegalStateExceptions implements Deobfuscator instructions.remove(ins); // insert goto - ilist.add(i, new Goto(instructions, to)); + assert ilist.contains(to); + Goto g = new Goto(instructions, to); + g.jump.add(to); + to.from.add(g); + ilist.add(i, g); ++count; break; @@ -121,17 +126,20 @@ public class IllegalStateExceptions implements Deobfuscator @Override public void run(ClassGroup group) - { + { + group.buildClassGraph(); Execution execution = new Execution(group); execution.populateInitialMethods(); execution.run(); - + int count = 0; int passes = 0; int i; do { i = checkOnce(execution, group); + + System.out.println("ise removal pass " + passes + " removed " + i); count += i; ++passes;