mirror of
https://git.huckle.dev/Huckles-Minecraft-Archive/jpexs-decompiler.git
synced 2026-09-24 22:00:55 +00:00
AS3: Fixed For each statements
This commit is contained in:
@@ -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)));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -38,4 +38,10 @@ public class CoerceTreeItem extends TreeItem {
|
||||
return value.toString(constants);
|
||||
}
|
||||
|
||||
@Override
|
||||
public TreeItem getNotCoerced() {
|
||||
return value;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -43,4 +43,5 @@ public class SetSuperTreeItem extends TreeItem {
|
||||
return calee + hilight("super.") + propertyName.toString(constants) + hilight("=") + value.toString(constants) + ";";
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
@@ -91,4 +91,7 @@ public abstract class TreeItem {
|
||||
return obStr + "[" + propertyName.toString(constants) + "]";
|
||||
}
|
||||
}
|
||||
public TreeItem getNotCoerced(){
|
||||
return this;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<TreeItem> 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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user