mirror of
https://git.huckle.dev/Huckles-Minecraft-Archive/jpexs-decompiler.git
synced 2026-09-28 11:11:11 +00:00
Fixed AS1/2 - Registers in for..in clause, proper define
This commit is contained in:
@@ -297,7 +297,8 @@ public class ActionGraph extends Graph {
|
||||
checkedLoop = new Loop(localData.loops.size(), null, null);
|
||||
checkedBody.add(new BreakItem(null, null, checkedLoop.id));
|
||||
}
|
||||
list.add(t, new ForInActionItem(null, null, checkedLoop, sti.getObject(), eti.object, checkedBody));
|
||||
sti.setValue(new DirectValueActionItem(Null.INSTANCE));
|
||||
list.add(t, new ForInActionItem(null, null, checkedLoop, (GraphTargetItem) sti/*sti.getObject()*/, eti.object, checkedBody));
|
||||
list.remove(t - 1);
|
||||
t--;
|
||||
}
|
||||
@@ -360,6 +361,10 @@ public class ActionGraph extends Graph {
|
||||
if (item instanceof TemporaryRegister) {
|
||||
return;
|
||||
}
|
||||
//can has definition in for in...
|
||||
if ((ti instanceof ForInActionItem) && (item == ((ForInActionItem) ti).variableName)) {
|
||||
return;
|
||||
}
|
||||
if (item instanceof StoreRegisterActionItem) {
|
||||
StoreRegisterActionItem sr = (StoreRegisterActionItem) item;
|
||||
if (sr.define) {
|
||||
|
||||
+15
-5
@@ -20,7 +20,9 @@ import com.jpexs.decompiler.flash.SWF;
|
||||
import com.jpexs.decompiler.flash.SourceGeneratorLocalData;
|
||||
import com.jpexs.decompiler.flash.action.Action;
|
||||
import com.jpexs.decompiler.flash.action.model.DirectValueActionItem;
|
||||
import com.jpexs.decompiler.flash.action.model.SetTypeActionItem;
|
||||
import com.jpexs.decompiler.flash.action.model.SetVariableActionItem;
|
||||
import com.jpexs.decompiler.flash.action.model.StoreRegisterActionItem;
|
||||
import com.jpexs.decompiler.flash.action.parser.script.ActionSourceGenerator;
|
||||
import com.jpexs.decompiler.flash.action.parser.script.VariableActionItem;
|
||||
import com.jpexs.decompiler.flash.action.swf4.ActionIf;
|
||||
@@ -111,10 +113,16 @@ public class ForInActionItem extends LoopActionItem implements Block {
|
||||
writer.append(" ");
|
||||
}
|
||||
writer.append("(");
|
||||
if ((variableName instanceof DirectValueActionItem) && (((DirectValueActionItem) variableName).value instanceof RegisterNumber)) {
|
||||
writer.append("var ");
|
||||
if (variableName instanceof SetTypeActionItem) {
|
||||
GraphTargetItem vn = ((SetTypeActionItem) variableName).getObject();
|
||||
|
||||
if ((variableName instanceof StoreRegisterActionItem) && ((StoreRegisterActionItem) variableName).define) {
|
||||
writer.append("var ");
|
||||
}
|
||||
|
||||
stripQuotes(vn, localData, writer);
|
||||
}
|
||||
stripQuotes(variableName, localData, writer);
|
||||
|
||||
writer.append(" in ");
|
||||
enumVariable.toString(writer, localData);
|
||||
writer.append(")").startBlock();
|
||||
@@ -161,8 +169,10 @@ public class ForInActionItem extends LoopActionItem implements Block {
|
||||
loopExpr.add(forInEndIf);
|
||||
List<Action> loopBody = new ArrayList<>();
|
||||
|
||||
//assuming (variableName instanceof VariableActionItem)
|
||||
SetVariableActionItem setVar = new SetVariableActionItem(null, null, asGenerator.pushConstTargetItem(((VariableActionItem) variableName).getVariableName()), new DirectValueActionItem(new RegisterNumber(exprReg)));
|
||||
//assuming (variableName instanceof VariableActionItem)
|
||||
VariableActionItem vaact = (VariableActionItem) variableName;
|
||||
GraphTargetItem setVar = vaact.getBoxedValue();
|
||||
setVar.value = new DirectValueActionItem(new RegisterNumber(exprReg));
|
||||
|
||||
loopBody.addAll(asGenerator.toActionList(setVar.toSourceIgnoreReturnValue(localData, generator)));
|
||||
//loopBody.add(new ActionPush(new RegisterNumber(exprReg)));
|
||||
|
||||
Reference in New Issue
Block a user