diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/AVM2Code.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/AVM2Code.java index 1d048900c..65896eb3e 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/AVM2Code.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/AVM2Code.java @@ -324,6 +324,8 @@ public class AVM2Code implements Cloneable { private static final boolean DEBUG_MODE = false; + public static final boolean USE_KILL_INS = false; + public static int toSourceLimit = -1; public List code; @@ -1490,7 +1492,7 @@ public class AVM2Code implements Cloneable { List output = new ArrayList<>(input); for (int i = 0; i < output.size(); i++) { if (output.get(i) instanceof SetLocalAVM2Item) { - if (isKilled(((SetLocalAVM2Item) output.get(i)).regIndex, 0, code.size() - 1)) { + if (USE_KILL_INS && isKilled(((SetLocalAVM2Item) output.get(i)).regIndex, 0, code.size() - 1)) { SetLocalAVM2Item lsi = (SetLocalAVM2Item) output.get(i); if (i + 1 < output.size()) { if (output.get(i + 1) instanceof ExitItem) { @@ -1627,11 +1629,11 @@ public class AVM2Code implements Cloneable { } } }*/ - if ((ins.definition instanceof GetLocalTypeIns) && (!output.isEmpty()) && (output.get(output.size() - 1) instanceof SetLocalAVM2Item) && (((SetLocalAVM2Item) output.get(output.size() - 1)).regIndex == ((GetLocalTypeIns) ins.definition).getRegisterId(ins)) && isKilled(((SetLocalAVM2Item) output.get(output.size() - 1)).regIndex, start, end)) { + if (USE_KILL_INS && (ins.definition instanceof GetLocalTypeIns) && (!output.isEmpty()) && (output.get(output.size() - 1) instanceof SetLocalAVM2Item) && (((SetLocalAVM2Item) output.get(output.size() - 1)).regIndex == ((GetLocalTypeIns) ins.definition).getRegisterId(ins)) && isKilled(((SetLocalAVM2Item) output.get(output.size() - 1)).regIndex, start, end)) { SetLocalAVM2Item slt = (SetLocalAVM2Item) output.remove(output.size() - 1); stack.push(slt.getValue()); ip++; - } else if ((ins.definition instanceof SetLocalTypeIns) && (ip + 1 <= end) && (isKilled(((SetLocalTypeIns) ins.definition).getRegisterId(ins), ip, end))) { // set_local_x,get_local_x..kill x + } else if (USE_KILL_INS && (ins.definition instanceof SetLocalTypeIns) && (ip + 1 <= end) && (isKilled(((SetLocalTypeIns) ins.definition).getRegisterId(ins), ip, end))) { // set_local_x,get_local_x..kill x AVM2Instruction insAfter = code.get(ip + 1); if ((insAfter.definition instanceof GetLocalTypeIns) && (((GetLocalTypeIns) insAfter.definition).getRegisterId(insAfter) == ((SetLocalTypeIns) ins.definition).getRegisterId(ins))) { GraphTargetItem before = stack.peek(); @@ -1670,7 +1672,7 @@ public class AVM2Code implements Cloneable { } else if (processJumps && (insAfter.definition instanceof IfTrueIns)) { //stack.add("(" + stack.pop() + ")||"); isAnd = false; - } else if (insAfter.definition instanceof SetLocalTypeIns) { + } else if (USE_KILL_INS && insAfter.definition instanceof SetLocalTypeIns) { // chained assignments int reg = (((SetLocalTypeIns) insAfter.definition).getRegisterId(insAfter)); for (int t = ip + 1; t <= end - 1; t++) { @@ -1697,7 +1699,7 @@ public class AVM2Code implements Cloneable { } } } - if (!isKilled(reg, 0, end)) { + if (USE_KILL_INS && !isKilled(reg, 0, end)) { GraphTargetItem vx = stack.pop().getThroughDuplicate(); int dupCnt = 1; for (int i = ip - 1; i >= start; i--) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/graph/AVM2Graph.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/graph/AVM2Graph.java index 100f70ad0..6a8d4a144 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/graph/AVM2Graph.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/graph/AVM2Graph.java @@ -466,7 +466,7 @@ public class AVM2Graph extends Graph { if (part.nextParts.isEmpty()) { if (avm2code.code.get(part.end).definition instanceof ReturnValueIns) { //returns in finally clause if (part.getHeight() >= 3) { - if (avm2code.code.get(part.getPosAt(part.getHeight() - 2)).definition instanceof KillIns) { + if (AVM2Code.USE_KILL_INS && avm2code.code.get(part.getPosAt(part.getHeight() - 2)).definition instanceof KillIns) { if (avm2code.code.get(part.getPosAt(part.getHeight() - 3)).definition instanceof GetLocalTypeIns) { if (output.size() >= 2) { if (output.get(output.size() - 2) instanceof SetLocalAVM2Item) { @@ -951,7 +951,7 @@ public class AVM2Graph extends Graph { continue; } } - if (avm2code.isKilled(ri.regIndex, 0, Integer.MAX_VALUE)) { + if (AVM2Code.USE_KILL_INS && avm2code.isKilled(ri.regIndex, 0, Integer.MAX_VALUE)) { if (i + 1 < list.size()) { if (list.get(i + 1) instanceof SwitchItem) { SwitchItem si = (SwitchItem) list.get(i + 1); @@ -1049,7 +1049,7 @@ public class AVM2Graph extends Graph { } for (GraphTargetItem i : output) { if (i instanceof SetLocalAVM2Item) { - if (avm2code.isKilled(((SetLocalAVM2Item) i).regIndex, 0, avm2code.code.size() - 1)) { + if (AVM2Code.USE_KILL_INS && avm2code.isKilled(((SetLocalAVM2Item) i).regIndex, 0, avm2code.code.size() - 1)) { continue; } }