mirror of
https://git.huckle.dev/Huckles-Minecraft-Archive/jpexs-decompiler.git
synced 2026-09-25 00:10:59 +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 objectReg = ins.operands[0];
|
||||||
int indexReg = ins.operands[1];
|
int indexReg = ins.operands[1];
|
||||||
//stack.push("_loc_" + objectReg + ".hasNext(cnt=_loc_" + indexReg + ")");
|
//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);
|
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;
|
import com.jpexs.asdec.abc.avm2.instructions.AVM2Instruction;
|
||||||
|
|
||||||
|
|
||||||
public class InitPropertyTreeItem extends TreeItem {
|
public class InitPropertyTreeItem extends TreeItem implements SetTypeTreeItem{
|
||||||
public TreeItem object;
|
public TreeItem object;
|
||||||
public FullMultinameTreeItem propertyName;
|
public FullMultinameTreeItem propertyName;
|
||||||
public TreeItem value;
|
public TreeItem value;
|
||||||
@@ -39,5 +39,13 @@ public class InitPropertyTreeItem extends TreeItem {
|
|||||||
return formatProperty(constants, object, propertyName) + hilight("=") + value.toString(constants) + ";";
|
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;
|
import com.jpexs.asdec.abc.avm2.instructions.InstructionDefinition;
|
||||||
|
|
||||||
|
|
||||||
public class SetLocalTreeItem extends TreeItem {
|
public class SetLocalTreeItem extends TreeItem implements SetTypeTreeItem {
|
||||||
public int regIndex;
|
public int regIndex;
|
||||||
public TreeItem value;
|
public TreeItem value;
|
||||||
|
|
||||||
@@ -38,5 +38,13 @@ public class SetLocalTreeItem extends TreeItem {
|
|||||||
return hilight(InstructionDefinition.localRegName(regIndex) + "=") + value.toString(constants) + ";";
|
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;
|
import com.jpexs.asdec.abc.avm2.instructions.AVM2Instruction;
|
||||||
|
|
||||||
|
|
||||||
public class SetPropertyTreeItem extends TreeItem {
|
public class SetPropertyTreeItem extends TreeItem implements SetTypeTreeItem{
|
||||||
public TreeItem object;
|
public TreeItem object;
|
||||||
public FullMultinameTreeItem propertyName;
|
public FullMultinameTreeItem propertyName;
|
||||||
public TreeItem value;
|
public TreeItem value;
|
||||||
@@ -39,5 +39,13 @@ public class SetPropertyTreeItem extends TreeItem {
|
|||||||
return formatProperty(constants, object, propertyName) + hilight("=") + value.toString(constants) + ";";
|
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;
|
import com.jpexs.asdec.abc.types.Multiname;
|
||||||
|
|
||||||
|
|
||||||
public class SetSlotTreeItem extends TreeItem {
|
public class SetSlotTreeItem extends TreeItem implements SetTypeTreeItem {
|
||||||
public Multiname slotName;
|
public Multiname slotName;
|
||||||
public TreeItem value;
|
public TreeItem value;
|
||||||
public TreeItem scope;
|
public TreeItem scope;
|
||||||
@@ -52,4 +52,12 @@ public class SetSlotTreeItem extends TreeItem {
|
|||||||
return ret + hilight(slotName.getName(constants)) + hilight("=") + value.toString(constants) + ";";
|
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) + ";";
|
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) + "]";
|
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.instructions.AVM2Instruction;
|
||||||
import com.jpexs.asdec.abc.avm2.treemodel.ContinueTreeItem;
|
import com.jpexs.asdec.abc.avm2.treemodel.ContinueTreeItem;
|
||||||
import com.jpexs.asdec.abc.avm2.treemodel.EachTreeItem;
|
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 com.jpexs.asdec.abc.avm2.treemodel.TreeItem;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
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) {
|
public ForEachTreeItem(AVM2Instruction instruction, int loopBreak, int loopContinue, EachTreeItem expression, List<TreeItem> commands) {
|
||||||
super(instruction, loopBreak, loopContinue);
|
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.expression = expression;
|
||||||
this.commands = commands;
|
this.commands = commands;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user