More AS1/2 increment,decrement,compound using PushDuplicate

This commit is contained in:
Jindra Petřík
2026-02-09 17:19:11 +01:00
parent a2d10314a0
commit bfc9ab13d4
3 changed files with 68 additions and 2 deletions

View File

@@ -26,6 +26,7 @@ import com.jpexs.decompiler.flash.action.model.CompoundableBinaryOpAs12;
import com.jpexs.decompiler.flash.action.model.ConstantPool;
import com.jpexs.decompiler.flash.action.model.DecrementActionItem;
import com.jpexs.decompiler.flash.action.model.DirectValueActionItem;
import com.jpexs.decompiler.flash.action.model.EvalActionItem;
import com.jpexs.decompiler.flash.action.model.GetVariableActionItem;
import com.jpexs.decompiler.flash.action.model.IncrementActionItem;
import com.jpexs.decompiler.flash.action.model.PostDecrementActionItem;
@@ -43,6 +44,7 @@ import com.jpexs.decompiler.graph.GraphTargetItem;
import com.jpexs.decompiler.graph.SecondPassData;
import com.jpexs.decompiler.graph.TranslateStack;
import com.jpexs.decompiler.graph.model.CompoundableBinaryOp;
import com.jpexs.decompiler.graph.model.DuplicateItem;
import com.jpexs.decompiler.graph.model.LocalData;
import com.jpexs.helpers.utf8.Utf8Helper;
import java.util.HashMap;
@@ -125,6 +127,14 @@ public class ActionSetVariable extends Action implements StoreTypeAction {
return;
}
}
if (((IncrementActionItem) value).object instanceof EvalActionItem) {
if (((IncrementActionItem) value).object.value instanceof DuplicateItem) {
if (((IncrementActionItem) value).object.value.value == name) {
output.add(new PostIncrementActionItem(this, lineStartAction, new GetVariableActionItem(null, null, name)));
return;
}
}
}
}
if (value instanceof DecrementActionItem) {
if (((DecrementActionItem) value).object instanceof GetVariableActionItem) {
@@ -136,6 +146,14 @@ public class ActionSetVariable extends Action implements StoreTypeAction {
return;
}
}
if (((DecrementActionItem) value).object instanceof EvalActionItem) {
if (((DecrementActionItem) value).object.value instanceof DuplicateItem) {
if (((DecrementActionItem) value).object.value.value == name) {
output.add(new PostDecrementActionItem(this, lineStartAction, new GetVariableActionItem(null, null, name)));
return;
}
}
}
}
SetVariableActionItem setVar = new SetVariableActionItem(this, lineStartAction, name, value);
@@ -154,6 +172,13 @@ public class ActionSetVariable extends Action implements StoreTypeAction {
setVar.setCompoundValue(binaryOp.getRightSide());
setVar.setCompoundOperator(binaryOp.getOperator());
}
} else if (
binaryOp.getLeftSide() instanceof EvalActionItem
&& binaryOp.getLeftSide().value instanceof DuplicateItem
&& binaryOp.getLeftSide().value.value == name
) {
setVar.setCompoundValue(binaryOp.getRightSide());
setVar.setCompoundOperator(binaryOp.getOperator());
}
}
}