diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/CoerceAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/CoerceAVM2Item.java index da8502bcb..19021b7a6 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/CoerceAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/CoerceAVM2Item.java @@ -59,6 +59,11 @@ public class CoerceAVM2Item extends AVM2Item { return value.getNotCoerced(); } + @Override + public GraphTargetItem getNotCoercedNoDup() { + return value.getNotCoercedNoDup(); + } + @Override public boolean isCompileTime(Set dependencies) { if (dependencies.contains(value)) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/ConvertAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/ConvertAVM2Item.java index 9d0efb1a8..df8f80b4e 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/ConvertAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/ConvertAVM2Item.java @@ -43,6 +43,11 @@ public class ConvertAVM2Item extends AVM2Item { return value.getNotCoerced(); } + @Override + public GraphTargetItem getNotCoercedNoDup() { + return value.getNotCoercedNoDup(); + } + @Override public Object getResult() { switch (type.toString()) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/TemporaryRegister.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/TemporaryRegister.java index 86f66c90a..6f868a800 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/TemporaryRegister.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/TemporaryRegister.java @@ -73,4 +73,9 @@ public class TemporaryRegister extends ActionItem { public GraphTargetItem getNotCoerced() { return value.getNotCoerced(); } + + @Override + public GraphTargetItem getNotCoercedNoDup() { + return value.getNotCoercedNoDup(); + } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/Graph.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/Graph.java index 46b002c91..ee7485dec 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/Graph.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/Graph.java @@ -2004,12 +2004,12 @@ public class Graph { if (onTrue.size() == 2) { GraphTargetItem rightSide = ((PushItem) onTrue.get(1)).value; GraphTargetItem prevExpr = stack.pop(); - GraphTargetItem leftSide = expr; + GraphTargetItem leftSide = expr.getNotCoercedNoDup(); if (leftSide instanceof DuplicateItem) { isIf = false; stack.push(new OrItem(null, prevExpr, rightSide)); - } else if (leftSide.invert(null) instanceof DuplicateItem) { + } else if (leftSide.invert(null).getNotCoercedNoDup() instanceof DuplicateItem) { isIf = false; stack.push(new AndItem(null, prevExpr, rightSide)); } else if (prevExpr instanceof FalseItem) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/GraphTargetItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/GraphTargetItem.java index 7d20140c9..106470a0a 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/GraphTargetItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/GraphTargetItem.java @@ -250,6 +250,10 @@ public abstract class GraphTargetItem implements Serializable, Cloneable { return this; } + public GraphTargetItem getNotCoercedNoDup() { + return getNotCoerced(); + } + public GraphTargetItem getThroughRegister() { return this; } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/DuplicateItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/DuplicateItem.java index a8913c328..1e281d25a 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/DuplicateItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/DuplicateItem.java @@ -57,6 +57,11 @@ public class DuplicateItem extends GraphTargetItem implements SimpleValue { return value.getNotCoerced(); } + @Override + public GraphTargetItem getNotCoercedNoDup() { + return this; + } + @Override public GraphTargetItem getThroughRegister() { return value.getThroughRegister(); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/PushItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/PushItem.java index af6d23b77..43a24f5d5 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/PushItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/PushItem.java @@ -62,4 +62,9 @@ public class PushItem extends GraphTargetItem { public GraphTargetItem getThroughRegister() { return value.getThroughRegister(); } + + @Override + public GraphTargetItem getNotCoercedNoDup() { + return value.getNotCoercedNoDup(); + } }