diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/localregs/SetLocalTypeIns.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/localregs/SetLocalTypeIns.java index 88e9b35eb..2ce37a46c 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/localregs/SetLocalTypeIns.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/localregs/SetLocalTypeIns.java @@ -125,8 +125,8 @@ public abstract class SetLocalTypeIns extends InstructionDefinition implements S } SetLocalAVM2Item result = new SetLocalAVM2Item(ins, localData.lineStartInstruction, regId, value); - if (value.getNotCoercedNoDup() instanceof CompoundableBinaryOp) { - CompoundableBinaryOp binaryOp = (CompoundableBinaryOp) value.getNotCoercedNoDup(); + if (value.getNotCoerced() instanceof CompoundableBinaryOp) { + CompoundableBinaryOp binaryOp = (CompoundableBinaryOp) value.getNotCoerced(); if (binaryOp.getLeftSide() instanceof LocalRegAVM2Item) { LocalRegAVM2Item loc = (LocalRegAVM2Item) binaryOp.getLeftSide(); if (loc.regIndex == regId) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/SetPropertyIns.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/SetPropertyIns.java index 83bcd5e3a..e747e816b 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/SetPropertyIns.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/SetPropertyIns.java @@ -376,9 +376,9 @@ public class SetPropertyIns extends InstructionDefinition implements SetTypeIns } } - if (value.getNotCoercedNoDup() instanceof CompoundableBinaryOp) { + if (value.getNotCoerced() instanceof CompoundableBinaryOp) { if (!obj.hasSideEffect() && !multiname.hasSideEffect()) { - CompoundableBinaryOp binaryOp = (CompoundableBinaryOp) value.getNotCoercedNoDup(); + CompoundableBinaryOp binaryOp = (CompoundableBinaryOp) value.getNotCoerced(); if (binaryOp.getLeftSide() instanceof GetPropertyAVM2Item) { GetPropertyAVM2Item propItem = (GetPropertyAVM2Item) binaryOp.getLeftSide(); if (Objects.equals(obj, propItem.object.getThroughDuplicate()) && Objects.equals(multiname, propItem.propertyName)) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/SetSlotIns.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/SetSlotIns.java index 1d05285fc..4cb7c3176 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/SetSlotIns.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/SetSlotIns.java @@ -144,9 +144,9 @@ public class SetSlotIns extends InstructionDefinition implements SetTypeIns { SetSlotAVM2Item result = new SetSlotAVM2Item(ins, localData.lineStartInstruction, obj, objnoreg, slotIndex, slotname, value); - if (value.getNotCoercedNoDup() instanceof CompoundableBinaryOp) { + if (value.getNotCoerced() instanceof CompoundableBinaryOp) { if (!obj.hasSideEffect()) { - CompoundableBinaryOp binaryOp = (CompoundableBinaryOp) value.getNotCoercedNoDup(); + CompoundableBinaryOp binaryOp = (CompoundableBinaryOp) value.getNotCoerced(); if (binaryOp.getLeftSide() instanceof GetSlotAVM2Item) { GetSlotAVM2Item getSlot = (GetSlotAVM2Item) binaryOp.getLeftSide(); if (Objects.equals(obj, getSlot.scope.getThroughDuplicate()) && slotIndex == getSlot.slotIndex) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionSetVariable.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionSetVariable.java index d78c028f0..595ce10f0 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionSetVariable.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionSetVariable.java @@ -117,9 +117,13 @@ public class ActionSetVariable extends Action implements StoreTypeAction { SetVariableActionItem setVar = new SetVariableActionItem(this, lineStartAction, name, value); GraphTargetItem ret = setVar; - if (value.getNotCoercedNoDup() instanceof CompoundableBinaryOp) { + GraphTargetItem inside = value.getNotCoercedNoDup(); + if (inside instanceof StoreRegisterActionItem) { + inside = inside.value; + } + if (inside instanceof CompoundableBinaryOp) { if (!name.hasSideEffect()) { - CompoundableBinaryOp binaryOp = (CompoundableBinaryOp) value.getNotCoercedNoDup(); + CompoundableBinaryOp binaryOp = (CompoundableBinaryOp) inside; if (binaryOp.getLeftSide() instanceof GetVariableActionItem) { GetVariableActionItem getVar = (GetVariableActionItem) binaryOp.getLeftSide(); if (GraphTargetItem.objectsValueEquals(name, getVar.name)) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionSetMember.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionSetMember.java index 7cc4ca101..279139235 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionSetMember.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionSetMember.java @@ -116,9 +116,13 @@ public class ActionSetMember extends Action { SetMemberActionItem setMem = new SetMemberActionItem(this, lineStartAction, object, memberName, value); - if (value.getNotCoercedNoDup() instanceof CompoundableBinaryOp) { + GraphTargetItem inside = value.getNotCoercedNoDup(); + if (inside instanceof StoreRegisterActionItem) { + inside = inside.value; + } + if (inside instanceof CompoundableBinaryOp) { if (!object.hasSideEffect() && !memberName.hasSideEffect()) { - CompoundableBinaryOp binaryOp = (CompoundableBinaryOp) value.getNotCoercedNoDup(); + CompoundableBinaryOp binaryOp = (CompoundableBinaryOp) inside; if (binaryOp.getLeftSide() instanceof GetMemberActionItem) { GetMemberActionItem getMember = (GetMemberActionItem) binaryOp.getLeftSide(); if (GraphTargetItem.objectsValueEquals(object, getMember.object.getThroughDuplicate()) && GraphTargetItem.objectsValueEquals(memberName, getMember.memberName)) {