From 1fd0a15143f4bec9f1649c6fafa04b939dfe81e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=F8=EDk?= Date: Mon, 21 Jan 2013 19:57:25 +0100 Subject: [PATCH] AS2: Better decompiling for..in --- trunk/src/com/jpexs/asdec/action/Action.java | 8 ++++-- .../action/treemodel/DirectValueTreeItem.java | 4 ++- .../action/treemodel/SetMemberTreeItem.java | 9 ++++++- .../action/treemodel/SetPropertyTreeItem.java | 9 ++++++- .../action/treemodel/SetTypeTreeItem.java | 25 +++++++++++++++++++ .../action/treemodel/SetVariableTreeItem.java | 7 +++++- .../treemodel/StoreRegisterTreeItem.java | 7 +++++- 7 files changed, 62 insertions(+), 7 deletions(-) create mode 100644 trunk/src/com/jpexs/asdec/action/treemodel/SetTypeTreeItem.java diff --git a/trunk/src/com/jpexs/asdec/action/Action.java b/trunk/src/com/jpexs/asdec/action/Action.java index e822f2bbc..f9bf4363e 100644 --- a/trunk/src/com/jpexs/asdec/action/Action.java +++ b/trunk/src/com/jpexs/asdec/action/Action.java @@ -769,7 +769,7 @@ public class Action { List finalExpression = null; TreeItem variableName = null; - if (isForIn) { + /*if (isForIn) { for (int t = ip + 1; t <= end; t++) { Action actionSV = actions.get(t); actionSV.translate(stack, constants, output, registerNames); @@ -780,7 +780,7 @@ public class Action { break; } } - } + }*/ try { @@ -834,6 +834,10 @@ public class Action { } } if (isForIn) { + variableName=onTrue.remove(0); + if(variableName instanceof SetTypeTreeItem){ + variableName=((SetTypeTreeItem)variableName).getObject(); + } output.add(new ForInTreeItem(action, jumpIp, loopStart, variableName, inItem, onTrue)); } else if (isFor) { output.add(new ForTreeItem(action, currentLoop.loopBreak, currentLoop.loopContinue, new ArrayList(), expression, finalExpression, onTrue)); diff --git a/trunk/src/com/jpexs/asdec/action/treemodel/DirectValueTreeItem.java b/trunk/src/com/jpexs/asdec/action/treemodel/DirectValueTreeItem.java index dacf73c86..3a606265e 100644 --- a/trunk/src/com/jpexs/asdec/action/treemodel/DirectValueTreeItem.java +++ b/trunk/src/com/jpexs/asdec/action/treemodel/DirectValueTreeItem.java @@ -28,7 +28,9 @@ public class DirectValueTreeItem extends TreeItem { public DirectValueTreeItem(Action instruction, Object value, ConstantPool constants) { super(instruction, PRECEDENCE_PRIMARY); - this.constants = constants.constants; + if (constants != null) { + this.constants = constants.constants; + } this.value = value; } diff --git a/trunk/src/com/jpexs/asdec/action/treemodel/SetMemberTreeItem.java b/trunk/src/com/jpexs/asdec/action/treemodel/SetMemberTreeItem.java index d58a467b8..2e3260ba7 100644 --- a/trunk/src/com/jpexs/asdec/action/treemodel/SetMemberTreeItem.java +++ b/trunk/src/com/jpexs/asdec/action/treemodel/SetMemberTreeItem.java @@ -18,7 +18,7 @@ package com.jpexs.asdec.action.treemodel; import com.jpexs.asdec.action.Action; -public class SetMemberTreeItem extends TreeItem { +public class SetMemberTreeItem extends TreeItem implements SetTypeTreeItem{ public TreeItem object; public TreeItem objectName; @@ -35,4 +35,11 @@ public class SetMemberTreeItem extends TreeItem { public String toString(ConstantPool constants) { return object.toString(constants) + "." + stripQuotes(objectName) + "=" + value.toString(constants) + ";"; } + + @Override + public TreeItem getObject() { + return new GetMemberTreeItem(instruction, object, objectName); + } + + } diff --git a/trunk/src/com/jpexs/asdec/action/treemodel/SetPropertyTreeItem.java b/trunk/src/com/jpexs/asdec/action/treemodel/SetPropertyTreeItem.java index dad4890aa..dd84e6a37 100644 --- a/trunk/src/com/jpexs/asdec/action/treemodel/SetPropertyTreeItem.java +++ b/trunk/src/com/jpexs/asdec/action/treemodel/SetPropertyTreeItem.java @@ -18,7 +18,7 @@ package com.jpexs.asdec.action.treemodel; import com.jpexs.asdec.action.Action; -public class SetPropertyTreeItem extends TreeItem { +public class SetPropertyTreeItem extends TreeItem implements SetTypeTreeItem{ public TreeItem target; public int propertyIndex; @@ -38,4 +38,11 @@ public class SetPropertyTreeItem extends TreeItem { } return target.toString(constants) + "." + Action.propertyNames[propertyIndex] + "=" + value.toString(constants) + ";"; } + + @Override + public TreeItem getObject() { + return new GetPropertyTreeItem(instruction, target, propertyIndex); + } + + } diff --git a/trunk/src/com/jpexs/asdec/action/treemodel/SetTypeTreeItem.java b/trunk/src/com/jpexs/asdec/action/treemodel/SetTypeTreeItem.java new file mode 100644 index 000000000..5163c6475 --- /dev/null +++ b/trunk/src/com/jpexs/asdec/action/treemodel/SetTypeTreeItem.java @@ -0,0 +1,25 @@ +/* + * Copyright (C) 2010-2013 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 3 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, see . + */ +package com.jpexs.asdec.action.treemodel; + +/** + * + * @author JPEXS + */ +public interface SetTypeTreeItem { + public TreeItem getObject(); +} diff --git a/trunk/src/com/jpexs/asdec/action/treemodel/SetVariableTreeItem.java b/trunk/src/com/jpexs/asdec/action/treemodel/SetVariableTreeItem.java index e34467a95..016d45943 100644 --- a/trunk/src/com/jpexs/asdec/action/treemodel/SetVariableTreeItem.java +++ b/trunk/src/com/jpexs/asdec/action/treemodel/SetVariableTreeItem.java @@ -18,7 +18,7 @@ package com.jpexs.asdec.action.treemodel; import com.jpexs.asdec.action.Action; -public class SetVariableTreeItem extends TreeItem { +public class SetVariableTreeItem extends TreeItem implements SetTypeTreeItem { public TreeItem name; public TreeItem value; @@ -33,4 +33,9 @@ public class SetVariableTreeItem extends TreeItem { public String toString(ConstantPool constants) { return stripQuotes(name) + hilight("=") + value.toString(constants) + ";"; } + + @Override + public TreeItem getObject() { + return new GetVariableTreeItem(instruction, value); + } } diff --git a/trunk/src/com/jpexs/asdec/action/treemodel/StoreRegisterTreeItem.java b/trunk/src/com/jpexs/asdec/action/treemodel/StoreRegisterTreeItem.java index 7457258d4..5d6b79609 100644 --- a/trunk/src/com/jpexs/asdec/action/treemodel/StoreRegisterTreeItem.java +++ b/trunk/src/com/jpexs/asdec/action/treemodel/StoreRegisterTreeItem.java @@ -19,7 +19,7 @@ package com.jpexs.asdec.action.treemodel; import com.jpexs.asdec.action.Action; import com.jpexs.asdec.action.swf4.RegisterNumber; -public class StoreRegisterTreeItem extends TreeItem { +public class StoreRegisterTreeItem extends TreeItem implements SetTypeTreeItem { public RegisterNumber register; public TreeItem value; @@ -34,4 +34,9 @@ public class StoreRegisterTreeItem extends TreeItem { public String toString(ConstantPool constants) { return register.toString() + "=" + value.toString(constants) + ";"; } + + @Override + public TreeItem getObject() { + return new DirectValueTreeItem(instruction, register, null); + } }