From fcc6797a84dfe51a99db30a17249f1263e5a5a1f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=C5=99=C3=ADk?= Date: Sun, 28 Nov 2021 14:27:35 +0100 Subject: [PATCH] switch fix again --- .../decompiler/flash/action/ActionGraph.java | 21 ++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/ActionGraph.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/ActionGraph.java index 162710abb..00b55db9e 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/ActionGraph.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/ActionGraph.java @@ -60,6 +60,7 @@ import com.jpexs.decompiler.graph.SecondPassData; import com.jpexs.decompiler.graph.StopPartKind; import com.jpexs.decompiler.graph.ThrowState; import com.jpexs.decompiler.graph.TranslateStack; +import com.jpexs.decompiler.graph.model.BinaryOpItem; import com.jpexs.decompiler.graph.model.BreakItem; import com.jpexs.decompiler.graph.model.GotoItem; import com.jpexs.decompiler.graph.model.IfItem; @@ -546,11 +547,14 @@ public class ActionGraph extends Graph { boolean canUseBlock = true; if (item instanceof IfItem) { IfItem ii = (IfItem) item; - if (ii.expression instanceof StrictNeqActionItem) { + boolean isNeq = true; + if ((ii.expression instanceof StrictNeqActionItem) || (ii.expression instanceof StrictEqActionItem)) { + isNeq = (ii.expression instanceof StrictNeqActionItem); + List switchParts = new ArrayList<>(); List switchExpressions = new ArrayList<>(); List switchOnFalseParts = new ArrayList<>(); - StrictNeqActionItem sneq = (StrictNeqActionItem) ii.expression; + BinaryOpItem sneq = (BinaryOpItem) ii.expression; if (sneq.leftSide instanceof StoreRegisterActionItem) { StoreRegisterActionItem sr = (StoreRegisterActionItem) sneq.leftSide; int regId = sr.register.number; @@ -561,10 +565,13 @@ public class ActionGraph extends Graph { IfItem ii2 = ii; while (true) { - if (!ii2.onTrue.isEmpty() && (ii2.onTrue.get(0) instanceof IfItem)) { - ii2 = (IfItem) ii2.onTrue.get(0); - if (ii2.expression instanceof StrictNeqActionItem) { - sneq = (StrictNeqActionItem) ii2.expression; + if ((isNeq && (!ii2.onTrue.isEmpty() && (ii2.onTrue.get(0) instanceof IfItem))) + || (!isNeq && (!ii2.onFalse.isEmpty() && (ii2.onFalse.get(0) instanceof IfItem)))) { + ii2 = (IfItem) (isNeq ? ii2.onTrue.get(0) : ii2.onFalse.get(0)); + System.err.println("" + ii2.expression.getClass().getSimpleName()); + if ((ii2.expression instanceof StrictNeqActionItem) || (ii2.expression instanceof StrictEqActionItem)) { + isNeq = (ii2.expression instanceof StrictNeqActionItem); + sneq = ((BinaryOpItem) ii2.expression); if (sneq.leftSide instanceof DirectValueActionItem) { DirectValueActionItem dv = (DirectValueActionItem) sneq.leftSide; if (dv.value instanceof RegisterNumber) { @@ -573,7 +580,7 @@ public class ActionGraph extends Graph { switchParts.add(ii2.decisionPart); switchOnFalseParts.add(ii2.onTruePart); switchExpressions.add(sneq.rightSide); - walkNext.add(ii2.onFalse); + walkNext.add(isNeq ? ii2.onFalse : ii2.onTrue); } else { break; }