From 309595a09bd744d86f78d2e016253dc2e5a8e851 Mon Sep 17 00:00:00 2001 From: Adam Date: Sun, 13 Sep 2015 19:37:44 -0400 Subject: [PATCH] instructions replace --- .../deob/attributes/code/Instructions.java | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) 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 f0803d1b1c..096bd8d791 100644 --- a/src/main/java/net/runelite/deob/attributes/code/Instructions.java +++ b/src/main/java/net/runelite/deob/attributes/code/Instructions.java @@ -241,4 +241,33 @@ public class Instructions for (Instruction i : instructions) i.renameMethod(oldMethod, newMethod); } + + public void replace(Instruction oldi, Instruction newi) + { + assert oldi != newi; + + assert oldi.getInstructions() == this; + assert newi.getInstructions() == this; + + assert instructions.contains(oldi); + assert !instructions.contains(newi); + + int i = instructions.indexOf(oldi); + instructions.remove(oldi); + instructions.add(i, newi); + + for (Instruction ins : oldi.from) + { + assert ins.jump.contains(oldi); + + ins.jump.remove(oldi); + ins.jump.add(newi); + + ins.replace(oldi, newi); + } + oldi.from.clear(); + + for (net.runelite.deob.attributes.code.Exception e : code.getExceptions().getExceptions()) + e.replace(oldi, newi); + } }