diff --git a/trunk/src/com/jpexs/asdec/abc/avm2/instructions/other/HasNext2Ins.java b/trunk/src/com/jpexs/asdec/abc/avm2/instructions/other/HasNext2Ins.java index 0ea4e1d80..a83323fd2 100644 --- a/trunk/src/com/jpexs/asdec/abc/avm2/instructions/other/HasNext2Ins.java +++ b/trunk/src/com/jpexs/asdec/abc/avm2/instructions/other/HasNext2Ins.java @@ -42,6 +42,6 @@ public class HasNext2Ins extends InstructionDefinition { int objectReg = ins.operands[0]; int indexReg = ins.operands[1]; //stack.push("_loc_" + objectReg + ".hasNext(cnt=_loc_" + indexReg + ")"); - stack.push(new EachTreeItem(ins, new LocalRegTreeItem(ins, indexReg, localRegs.get(indexReg)), new LocalRegTreeItem(ins, objectReg, localRegs.get(objectReg)))); + stack.push(new EachTreeItem(ins, new LocalRegTreeItem(ins, indexReg, localRegs.get(indexReg)), localRegs.get(objectReg))); } } diff --git a/trunk/src/com/jpexs/asdec/abc/avm2/treemodel/CoerceTreeItem.java b/trunk/src/com/jpexs/asdec/abc/avm2/treemodel/CoerceTreeItem.java index 71a933e57..5b76a60ff 100644 --- a/trunk/src/com/jpexs/asdec/abc/avm2/treemodel/CoerceTreeItem.java +++ b/trunk/src/com/jpexs/asdec/abc/avm2/treemodel/CoerceTreeItem.java @@ -38,4 +38,10 @@ public class CoerceTreeItem extends TreeItem { return value.toString(constants); } + @Override + public TreeItem getNotCoerced() { + return value; + } + + } diff --git a/trunk/src/com/jpexs/asdec/abc/avm2/treemodel/InitPropertyTreeItem.java b/trunk/src/com/jpexs/asdec/abc/avm2/treemodel/InitPropertyTreeItem.java index d6584e179..f2829a2d2 100644 --- a/trunk/src/com/jpexs/asdec/abc/avm2/treemodel/InitPropertyTreeItem.java +++ b/trunk/src/com/jpexs/asdec/abc/avm2/treemodel/InitPropertyTreeItem.java @@ -22,7 +22,7 @@ import com.jpexs.asdec.abc.avm2.ConstantPool; import com.jpexs.asdec.abc.avm2.instructions.AVM2Instruction; -public class InitPropertyTreeItem extends TreeItem { +public class InitPropertyTreeItem extends TreeItem implements SetTypeTreeItem{ public TreeItem object; public FullMultinameTreeItem propertyName; public TreeItem value; @@ -39,5 +39,13 @@ public class InitPropertyTreeItem extends TreeItem { return formatProperty(constants, object, propertyName) + hilight("=") + value.toString(constants) + ";"; } + public TreeItem getObject() { + return new GetPropertyTreeItem(instruction, object, propertyName); + } + + public TreeItem getValue() { + return value; + } + } diff --git a/trunk/src/com/jpexs/asdec/abc/avm2/treemodel/SetLocalTreeItem.java b/trunk/src/com/jpexs/asdec/abc/avm2/treemodel/SetLocalTreeItem.java index 58705000c..854419a34 100644 --- a/trunk/src/com/jpexs/asdec/abc/avm2/treemodel/SetLocalTreeItem.java +++ b/trunk/src/com/jpexs/asdec/abc/avm2/treemodel/SetLocalTreeItem.java @@ -23,7 +23,7 @@ import com.jpexs.asdec.abc.avm2.instructions.AVM2Instruction; import com.jpexs.asdec.abc.avm2.instructions.InstructionDefinition; -public class SetLocalTreeItem extends TreeItem { +public class SetLocalTreeItem extends TreeItem implements SetTypeTreeItem { public int regIndex; public TreeItem value; @@ -38,5 +38,13 @@ public class SetLocalTreeItem extends TreeItem { return hilight(InstructionDefinition.localRegName(regIndex) + "=") + value.toString(constants) + ";"; } + public TreeItem getObject() { + return new LocalRegTreeItem(instruction, regIndex, null); + } + + public TreeItem getValue() { + return value; + } + } diff --git a/trunk/src/com/jpexs/asdec/abc/avm2/treemodel/SetPropertyTreeItem.java b/trunk/src/com/jpexs/asdec/abc/avm2/treemodel/SetPropertyTreeItem.java index 86ebeec17..537c836d6 100644 --- a/trunk/src/com/jpexs/asdec/abc/avm2/treemodel/SetPropertyTreeItem.java +++ b/trunk/src/com/jpexs/asdec/abc/avm2/treemodel/SetPropertyTreeItem.java @@ -22,7 +22,7 @@ import com.jpexs.asdec.abc.avm2.ConstantPool; import com.jpexs.asdec.abc.avm2.instructions.AVM2Instruction; -public class SetPropertyTreeItem extends TreeItem { +public class SetPropertyTreeItem extends TreeItem implements SetTypeTreeItem{ public TreeItem object; public FullMultinameTreeItem propertyName; public TreeItem value; @@ -39,5 +39,13 @@ public class SetPropertyTreeItem extends TreeItem { return formatProperty(constants, object, propertyName) + hilight("=") + value.toString(constants) + ";"; } + public TreeItem getObject() { + return new GetPropertyTreeItem(instruction, object, propertyName); + } + + public TreeItem getValue() { + return value; + } + } diff --git a/trunk/src/com/jpexs/asdec/abc/avm2/treemodel/SetSlotTreeItem.java b/trunk/src/com/jpexs/asdec/abc/avm2/treemodel/SetSlotTreeItem.java index 377dedba6..05421019b 100644 --- a/trunk/src/com/jpexs/asdec/abc/avm2/treemodel/SetSlotTreeItem.java +++ b/trunk/src/com/jpexs/asdec/abc/avm2/treemodel/SetSlotTreeItem.java @@ -23,7 +23,7 @@ import com.jpexs.asdec.abc.avm2.instructions.AVM2Instruction; import com.jpexs.asdec.abc.types.Multiname; -public class SetSlotTreeItem extends TreeItem { +public class SetSlotTreeItem extends TreeItem implements SetTypeTreeItem { public Multiname slotName; public TreeItem value; public TreeItem scope; @@ -52,4 +52,12 @@ public class SetSlotTreeItem extends TreeItem { return ret + hilight(slotName.getName(constants)) + hilight("=") + value.toString(constants) + ";"; } + public TreeItem getObject() { + return new GetSlotTreeItem(instruction, scope, slotName); + } + + public TreeItem getValue() { + return value; + } + } diff --git a/trunk/src/com/jpexs/asdec/abc/avm2/treemodel/SetSuperTreeItem.java b/trunk/src/com/jpexs/asdec/abc/avm2/treemodel/SetSuperTreeItem.java index 50780a410..2cb669dd2 100644 --- a/trunk/src/com/jpexs/asdec/abc/avm2/treemodel/SetSuperTreeItem.java +++ b/trunk/src/com/jpexs/asdec/abc/avm2/treemodel/SetSuperTreeItem.java @@ -43,4 +43,5 @@ public class SetSuperTreeItem extends TreeItem { return calee + hilight("super.") + propertyName.toString(constants) + hilight("=") + value.toString(constants) + ";"; } + } diff --git a/trunk/src/com/jpexs/asdec/abc/avm2/treemodel/SetTypeTreeItem.java b/trunk/src/com/jpexs/asdec/abc/avm2/treemodel/SetTypeTreeItem.java new file mode 100644 index 000000000..ecff6f1b9 --- /dev/null +++ b/trunk/src/com/jpexs/asdec/abc/avm2/treemodel/SetTypeTreeItem.java @@ -0,0 +1,28 @@ +/* + * Copyright (C) 2011 JPEXS + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +package com.jpexs.asdec.abc.avm2.treemodel; + +/** + * + * @author JPEXS + */ +public interface SetTypeTreeItem { + public TreeItem getObject(); + public TreeItem getValue(); +} diff --git a/trunk/src/com/jpexs/asdec/abc/avm2/treemodel/TreeItem.java b/trunk/src/com/jpexs/asdec/abc/avm2/treemodel/TreeItem.java index 49fb76322..ce3d3d0ac 100644 --- a/trunk/src/com/jpexs/asdec/abc/avm2/treemodel/TreeItem.java +++ b/trunk/src/com/jpexs/asdec/abc/avm2/treemodel/TreeItem.java @@ -91,4 +91,7 @@ public abstract class TreeItem { return obStr + "[" + propertyName.toString(constants) + "]"; } } + public TreeItem getNotCoerced(){ + return this; + } } diff --git a/trunk/src/com/jpexs/asdec/abc/avm2/treemodel/clauses/ForEachTreeItem.java b/trunk/src/com/jpexs/asdec/abc/avm2/treemodel/clauses/ForEachTreeItem.java index 5740ff6e2..ab4ef9a21 100644 --- a/trunk/src/com/jpexs/asdec/abc/avm2/treemodel/clauses/ForEachTreeItem.java +++ b/trunk/src/com/jpexs/asdec/abc/avm2/treemodel/clauses/ForEachTreeItem.java @@ -22,6 +22,9 @@ import com.jpexs.asdec.abc.avm2.ConstantPool; import com.jpexs.asdec.abc.avm2.instructions.AVM2Instruction; import com.jpexs.asdec.abc.avm2.treemodel.ContinueTreeItem; import com.jpexs.asdec.abc.avm2.treemodel.EachTreeItem; +import com.jpexs.asdec.abc.avm2.treemodel.LocalRegTreeItem; +import com.jpexs.asdec.abc.avm2.treemodel.SetLocalTreeItem; +import com.jpexs.asdec.abc.avm2.treemodel.SetTypeTreeItem; import com.jpexs.asdec.abc.avm2.treemodel.TreeItem; import java.util.ArrayList; @@ -35,6 +38,20 @@ public class ForEachTreeItem extends LoopTreeItem implements Block { public ForEachTreeItem(AVM2Instruction instruction, int loopBreak, int loopContinue, EachTreeItem expression, List commands) { super(instruction, loopBreak, loopContinue); + TreeItem firstAssign=commands.get(0); + if(firstAssign instanceof SetTypeTreeItem){ + if(expression.object instanceof LocalRegTreeItem){ + if(((SetTypeTreeItem)firstAssign).getValue().getNotCoerced() instanceof LocalRegTreeItem) + { + if(((LocalRegTreeItem)((SetTypeTreeItem)firstAssign).getValue().getNotCoerced()).regIndex==((LocalRegTreeItem)expression.object).regIndex){ + commands.remove(0); + expression.object=((SetTypeTreeItem)firstAssign).getObject(); + } + } + + } + //locAssign. + } this.expression = expression; this.commands = commands; }