From fcd39050b7b596d350116d421d8a6ad7cfe0a8fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=C5=99=C3=ADk?= Date: Tue, 9 Feb 2021 22:15:12 +0100 Subject: [PATCH] Fixed: AS3 getslot/setslot, getglobalscope instruction --- CHANGELOG.md | 1 + .../decompiler/flash/abc/avm2/AVM2Code.java | 45 ++--- .../instructions/InstructionDefinition.java | 66 +++---- .../abc/avm2/instructions/SetTypeIns.java | 5 +- .../construction/NewFunctionIns.java | 3 +- .../localregs/SetLocalTypeIns.java | 9 - .../instructions/other/GetGlobalScopeIns.java | 5 +- .../instructions/other/GetGlobalSlotIns.java | 25 +-- .../avm2/instructions/other/GetSlotIns.java | 8 +- .../instructions/other/SetGlobalSlotIns.java | 17 +- .../instructions/other/SetPropertyIns.java | 11 -- .../avm2/instructions/other/SetSlotIns.java | 37 ++-- .../avm2/instructions/other/SetSuperIns.java | 9 - ...lSlotAVM2Item.java => GlobalAVM2Item.java} | 45 +++-- .../abc/avm2/model/NewFunctionAVM2Item.java | 2 +- .../flash/ActionScript3DecompileTestBase.java | 2 +- .../as3decompile/ActionScript3ClassTest.java | 71 ++++++-- .../ActionScript3ClassicAirDecompileTest.java | 12 ++ .../ActionScript3ClassicDecompileTest.java | 11 ++ ...ctionScript3CrossCompileDecompileTest.java | 5 +- ...ipt3CrossCompileSwfToolsDecompileTest.java | 5 +- .../as3_assembled-0/as3_assembled-0.main.abc | Bin 5169 -> 5900 bytes .../as3_assembled-0.main.asasm | 2 + .../tests/TestSlots.class.asasm | 163 ++++++++++++++++++ .../TestSlots.init/inline_method.method.asasm | 29 ++++ .../tests/TestSlots.script.asasm | 57 ++++++ .../as3_assembled/bin/as3_assembled.swf | Bin 3156 -> 3620 bytes .../bin/as3_cross_compile.air.swf | Bin 4891 -> 4900 bytes .../bin/as3_cross_compile.flex.swf | Bin 6615 -> 6638 bytes .../bin/as3_cross_compile.flex_apache.swf | Bin 6620 -> 6621 bytes .../bin/as3_cross_compile.swftools.swf | Bin 2818 -> 2828 bytes .../obj/as3_cross_compileConfig.old | 2 + .../src/tests/TestTryCatchLoopBreak5.as | 4 +- .../testdata/as3_new/bin/as3_new.flex.swf | Bin 22201 -> 22218 bytes 34 files changed, 473 insertions(+), 178 deletions(-) rename libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/{SetGlobalSlotAVM2Item.java => GlobalAVM2Item.java} (61%) create mode 100644 libsrc/ffdec_lib/testdata/as3_assembled/abc/as3_assembled-0/tests/TestSlots.class.asasm create mode 100644 libsrc/ffdec_lib/testdata/as3_assembled/abc/as3_assembled-0/tests/TestSlots.init/inline_method.method.asasm create mode 100644 libsrc/ffdec_lib/testdata/as3_assembled/abc/as3_assembled-0/tests/TestSlots.script.asasm diff --git a/CHANGELOG.md b/CHANGELOG.md index ab562bfe9..1e179e451 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ All notable changes to this project will be documented in this file. - AS3 break loop in catch clause - AS3 inner functions scope (setslot/getslot) - AS3 p-code traits of bodys of inner methods +- AS3 getslot/setslot, getglobalscope instruction ## [13.0.0] - 2021-02-08 ### Added diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/AVM2Code.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/AVM2Code.java index 92e47aeeb..e814ce9aa 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/AVM2Code.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/AVM2Code.java @@ -254,6 +254,7 @@ import com.jpexs.decompiler.flash.abc.avm2.model.ConvertAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.FullMultinameAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.InitPropertyAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.LocalRegAVM2Item; +import com.jpexs.decompiler.flash.abc.avm2.model.NewActivationAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.NewFunctionAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.NullAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.ReturnVoidAVM2Item; @@ -1875,32 +1876,34 @@ public class AVM2Code implements Cloneable { } if (subItem instanceof SetSlotAVM2Item) { SetSlotAVM2Item ssti = (SetSlotAVM2Item) subItem; - Slot sl = new Slot(ssti.scope, ssti.slotName); - if (!declaredSlots.contains(sl)) { - GraphTargetItem type = TypeItem.UNBOUNDED; - for (int t = 0; t < body.traits.traits.size(); t++) { - if (body.traits.traits.get(t).getName(abc) == sl.multiname) { - if (body.traits.traits.get(t) instanceof TraitSlotConst) { - type = PropertyAVM2Item.multinameToType(((TraitSlotConst) body.traits.traits.get(t)).type_index, abc.constants); + if (ssti.scope instanceof NewActivationAVM2Item) { + Slot sl = new Slot(ssti.scope, ssti.slotName); + if (!declaredSlots.contains(sl)) { + GraphTargetItem type = TypeItem.UNBOUNDED; + for (int t = 0; t < body.traits.traits.size(); t++) { + if (body.traits.traits.get(t).getName(abc) == sl.multiname) { + if (body.traits.traits.get(t) instanceof TraitSlotConst) { + type = PropertyAVM2Item.multinameToType(((TraitSlotConst) body.traits.traits.get(t)).type_index, abc.constants); + } } } - } - DeclarationAVM2Item d = new DeclarationAVM2Item(subItem, type); - ssti.setDeclaration(d); - declaredSlotsDec.add(d); - declaredSlots.add(sl); + DeclarationAVM2Item d = new DeclarationAVM2Item(subItem, type); + ssti.setDeclaration(d); + declaredSlotsDec.add(d); + declaredSlots.add(sl); + + if (subItem == currentItem) { + items.set(i, d); + } else { + d.showValue = false; + items.add(i, d); + i++; + } - if (subItem == currentItem) { - items.set(i, d); } else { - d.showValue = false; - items.add(i, d); - i++; + int idx = declaredSlots.indexOf(sl); + ssti.setDeclaration(declaredSlotsDec.get(idx)); } - - } else { - int idx = declaredSlots.indexOf(sl); - ssti.setDeclaration(declaredSlotsDec.get(idx)); } } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/InstructionDefinition.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/InstructionDefinition.java index 6f3752d68..64ec3cd53 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/InstructionDefinition.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/InstructionDefinition.java @@ -32,6 +32,7 @@ import com.jpexs.decompiler.flash.abc.avm2.model.AVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.ClassAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.FindPropertyAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.FullMultinameAVM2Item; +import com.jpexs.decompiler.flash.abc.avm2.model.GlobalAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.NewActivationAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.ThisAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.clauses.ExceptionAVM2Item; @@ -40,6 +41,7 @@ import com.jpexs.decompiler.flash.abc.types.MethodBody; import com.jpexs.decompiler.flash.abc.types.Multiname; import com.jpexs.decompiler.flash.abc.types.traits.Trait; import com.jpexs.decompiler.flash.abc.types.traits.TraitWithSlot; +import com.jpexs.decompiler.flash.abc.types.traits.Traits; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.DottedChain; import com.jpexs.decompiler.graph.GraphSourceItem; @@ -325,49 +327,51 @@ public abstract class InstructionDefinition implements Serializable { return localData.code.adr2pos(src.getAddress()); } - protected Multiname searchSlotName(int slotIndex, AVM2LocalData localData, GraphTargetItem obj) { - return searchSlotName(slotIndex, localData, obj, -1); + protected static Multiname searchSlotName(int slotIndex, AVM2LocalData localData, GraphTargetItem obj, Reference realObj) { + return searchSlotName(slotIndex, localData, obj, -1, realObj); } - private Multiname searchSlotName(int slotIndex, AVM2LocalData localData, GraphTargetItem obj, int multiNameIndex) { + private static Multiname searchSlotName(int slotIndex, AVM2LocalData localData, GraphTargetItem obj, int multiNameIndex, Reference realObj) { if ((obj instanceof ExceptionAVM2Item) && (multiNameIndex == -1 || ((ExceptionAVM2Item) obj).exception.name_index == multiNameIndex)) { return localData.getConstants().getMultiname(((ExceptionAVM2Item) obj).exception.name_index); - } else if ((obj instanceof ThisAVM2Item) || (obj instanceof ClassAVM2Item)) { - List traits = localData.getScriptInfo().get(localData.scriptIndex).traits.traits; - for (int t = 0; t < traits.size(); t++) { - Trait trait = traits.get(t); - if (trait instanceof TraitWithSlot) { - if (multiNameIndex == -1 || trait.name_index == multiNameIndex) { - if (((TraitWithSlot) trait).getSlotIndex() == slotIndex) { - return trait.getName(localData.abc); - } - } - } - } - } else if (obj instanceof NewActivationAVM2Item) { - MethodBody body = localData.methodBody; - List traits = body.traits.traits; - for (int t = 0; t < traits.size(); t++) { - Trait trait = traits.get(t); - if (trait instanceof TraitWithSlot) { - if (multiNameIndex == -1 || trait.name_index == multiNameIndex) { - if (((TraitWithSlot) trait).getSlotIndex() == slotIndex) { - return trait.getName(localData.abc); - } - } - } - } - } else if (obj instanceof FindPropertyAVM2Item) { + } + + if (obj instanceof FindPropertyAVM2Item) { FindPropertyAVM2Item findProp = (FindPropertyAVM2Item) obj; for (GraphTargetItem item : localData.scopeStack) { - Multiname ret = searchSlotName(slotIndex, localData, item, ((FullMultinameAVM2Item) findProp.propertyName).multinameIndex); + Multiname ret = searchSlotName(slotIndex, localData, item, ((FullMultinameAVM2Item) findProp.propertyName).multinameIndex, realObj); if (ret != null) { return ret; } } - + return null; } + + Traits traits = null; + if (obj instanceof NewActivationAVM2Item) { + traits = localData.methodBody.traits; + } else if (obj instanceof ThisAVM2Item) { + traits = localData.abc.instance_info.get(localData.classIndex).instance_traits; + } else if (obj instanceof ClassAVM2Item) { + traits = localData.abc.class_info.get(localData.classIndex).static_traits; + } else if (obj instanceof GlobalAVM2Item) { + traits = localData.abc.script_info.get(localData.scriptIndex).traits; + } + if (traits != null) { + for (int t = 0; t < traits.traits.size(); t++) { + Trait trait = traits.traits.get(t); + if (trait instanceof TraitWithSlot) { + if (multiNameIndex == -1 || trait.name_index == multiNameIndex) { + if (((TraitWithSlot) trait).getSlotIndex() == slotIndex) { + realObj.setVal(obj); + return trait.getName(localData.abc); + } + } + } + } + } + return null; } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/SetTypeIns.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/SetTypeIns.java index 67b220339..8afd571af 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/SetTypeIns.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/SetTypeIns.java @@ -12,7 +12,8 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public - * License along with this library. */ + * License along with this library. + */ package com.jpexs.decompiler.flash.abc.avm2.instructions; import com.jpexs.decompiler.flash.abc.ABC; @@ -36,8 +37,6 @@ import java.util.Stack; */ public interface SetTypeIns { - public abstract String getObject(Stack stack, ABC abc, AVM2Instruction ins, List output, MethodBody body, HashMap localRegNames, List fullyQualifiedNames) throws InterruptedException; - public static void handleResult(GraphTargetItem value, TranslateStack stack, List output, AVM2LocalData localData, GraphTargetItem result, int regId) { GraphTargetItem notCoercedValue = value; if ((value instanceof CoerceAVM2Item) || (value instanceof ConvertAVM2Item)) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/construction/NewFunctionIns.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/construction/NewFunctionIns.java index 81dc010f2..2d3f7b8da 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/construction/NewFunctionIns.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/construction/NewFunctionIns.java @@ -23,6 +23,7 @@ import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.abc.avm2.instructions.InstructionDefinition; import com.jpexs.decompiler.flash.abc.avm2.model.NewFunctionAVM2Item; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.ScopeStack; import com.jpexs.decompiler.graph.TranslateStack; import java.util.List; @@ -39,7 +40,7 @@ public class NewFunctionIns extends InstructionDefinition { @Override public void translate(AVM2LocalData localData, TranslateStack stack, AVM2Instruction ins, List output, String path) { int methodIndex = ins.operands[0]; - NewFunctionAVM2Item function = new NewFunctionAVM2Item(ins, localData.lineStartInstruction, "", path, false, localData.scriptIndex, localData.classIndex, localData.abc, localData.fullyQualifiedNames, methodIndex, localData.scopeStack); + NewFunctionAVM2Item function = new NewFunctionAVM2Item(ins, localData.lineStartInstruction, "", path, false, localData.scriptIndex, localData.classIndex, localData.abc, localData.fullyQualifiedNames, methodIndex, (ScopeStack) localData.scopeStack.clone()); stack.push(function); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/localregs/SetLocalTypeIns.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/localregs/SetLocalTypeIns.java index c5fa37546..1717c958a 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/localregs/SetLocalTypeIns.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/localregs/SetLocalTypeIns.java @@ -141,14 +141,5 @@ public abstract class SetLocalTypeIns extends InstructionDefinition implements S return 1; } - @Override - public String getObject(Stack stack, ABC abc, - AVM2Instruction ins, List output, - MethodBody body, HashMap localRegNames, - List fullyQualifiedNames - ) { - return AVM2Item.localRegName(localRegNames, getRegisterId(ins)); - } - public abstract int getRegisterId(AVM2Instruction ins); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/GetGlobalScopeIns.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/GetGlobalScopeIns.java index c7c55249c..517d97bd4 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/GetGlobalScopeIns.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/GetGlobalScopeIns.java @@ -22,6 +22,7 @@ import com.jpexs.decompiler.flash.abc.avm2.AVM2ConstantPool; import com.jpexs.decompiler.flash.abc.avm2.LocalDataArea; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.abc.avm2.instructions.InstructionDefinition; +import com.jpexs.decompiler.flash.abc.avm2.model.GlobalAVM2Item; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.TranslateStack; import java.util.List; @@ -43,7 +44,9 @@ public class GetGlobalScopeIns extends InstructionDefinition { @Override public void translate(AVM2LocalData localData, TranslateStack stack, AVM2Instruction ins, List output, String path) { - stack.push(localData.scopeStack.get(0)); + //Note: it is not true that "The global scope object is the object at the bottom of the scope stack.", + //It is special scope which is not present at standard scope stack. + stack.push(new GlobalAVM2Item(ins, localData.lineStartInstruction)); } @Override diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/GetGlobalSlotIns.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/GetGlobalSlotIns.java index 0e29edc3c..640c3cba3 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/GetGlobalSlotIns.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/GetGlobalSlotIns.java @@ -12,7 +12,8 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public - * License along with this library. */ + * License along with this library. + */ package com.jpexs.decompiler.flash.abc.avm2.instructions.other; import com.jpexs.decompiler.flash.abc.ABC; @@ -21,6 +22,7 @@ import com.jpexs.decompiler.flash.abc.avm2.AVM2Code; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.abc.avm2.instructions.InstructionDefinition; import com.jpexs.decompiler.flash.abc.avm2.model.GetSlotAVM2Item; +import com.jpexs.decompiler.flash.abc.avm2.model.GlobalAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.clauses.ExceptionAVM2Item; import com.jpexs.decompiler.flash.abc.types.MethodBody; import com.jpexs.decompiler.flash.abc.types.Multiname; @@ -28,6 +30,7 @@ import com.jpexs.decompiler.flash.abc.types.traits.Trait; import com.jpexs.decompiler.flash.abc.types.traits.TraitSlotConst; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.TranslateStack; +import com.jpexs.helpers.Reference; import java.util.List; /** @@ -43,23 +46,9 @@ public class GetGlobalSlotIns extends InstructionDefinition { @Override public void translate(AVM2LocalData localData, TranslateStack stack, AVM2Instruction ins, List output, String path) { int slotIndex = ins.operands[0]; - GraphTargetItem obj = localData.scopeStack.get(0); //scope - Multiname slotname = null; - if (obj instanceof ExceptionAVM2Item) { - slotname = localData.getConstants().getMultiname(((ExceptionAVM2Item) obj).exception.name_index); - } else { - MethodBody body = localData.methodBody; - List traits = body.traits.traits; - for (int t = 0; t < traits.size(); t++) { - Trait trait = traits.get(t); - if (trait instanceof TraitSlotConst) { - if (((TraitSlotConst) trait).slot_id == slotIndex) { - slotname = trait.getName(localData.abc); - } - } - - } - } + GraphTargetItem obj = new GlobalAVM2Item(ins, localData.lineStartInstruction); + Reference realObj = new Reference<>(null); + Multiname slotname = InstructionDefinition.searchSlotName(slotIndex, localData, obj, realObj); stack.push(new GetSlotAVM2Item(ins, localData.lineStartInstruction, obj, obj, slotIndex, slotname)); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/GetSlotIns.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/GetSlotIns.java index 885bcdeb8..e8a295338 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/GetSlotIns.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/GetSlotIns.java @@ -12,7 +12,8 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public - * License along with this library. */ + * License along with this library. + */ package com.jpexs.decompiler.flash.abc.avm2.instructions.other; import com.jpexs.decompiler.flash.abc.ABC; @@ -24,6 +25,7 @@ import com.jpexs.decompiler.flash.abc.avm2.model.GetSlotAVM2Item; import com.jpexs.decompiler.flash.abc.types.Multiname; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.TranslateStack; +import com.jpexs.helpers.Reference; import java.util.List; /** @@ -41,7 +43,9 @@ public class GetSlotIns extends InstructionDefinition { int slotIndex = ins.operands[0]; GraphTargetItem objinreg = stack.pop(); //scope GraphTargetItem obj = objinreg.getThroughRegister(); - Multiname slotname = searchSlotName(slotIndex, localData, obj); + Reference realObj = new Reference<>(null); + Multiname slotname = InstructionDefinition.searchSlotName(slotIndex, localData, obj, realObj); + obj = realObj.getVal(); stack.push(new GetSlotAVM2Item(ins, localData.lineStartInstruction, obj, objinreg, slotIndex, slotname)); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/SetGlobalSlotIns.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/SetGlobalSlotIns.java index c492b5082..80cae9613 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/SetGlobalSlotIns.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/SetGlobalSlotIns.java @@ -12,7 +12,8 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public - * License along with this library. */ + * License along with this library. + */ package com.jpexs.decompiler.flash.abc.avm2.instructions.other; import com.jpexs.decompiler.flash.abc.ABC; @@ -22,8 +23,10 @@ import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.abc.avm2.instructions.InstructionDefinition; import com.jpexs.decompiler.flash.abc.avm2.instructions.SetTypeIns; import com.jpexs.decompiler.flash.abc.avm2.model.AVM2Item; -import com.jpexs.decompiler.flash.abc.avm2.model.SetGlobalSlotAVM2Item; +import com.jpexs.decompiler.flash.abc.avm2.model.GlobalAVM2Item; +import com.jpexs.decompiler.flash.abc.avm2.model.SetSlotAVM2Item; import com.jpexs.decompiler.flash.abc.types.MethodBody; +import com.jpexs.decompiler.flash.abc.types.Multiname; import com.jpexs.decompiler.graph.DottedChain; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.TranslateStack; @@ -43,18 +46,14 @@ public class SetGlobalSlotIns extends InstructionDefinition implements SetTypeIn @Override public void translate(AVM2LocalData localData, TranslateStack stack, AVM2Instruction ins, List output, String path) { + int slotIndex = ins.operands[0]; GraphTargetItem value = stack.pop(); - GraphTargetItem result = new SetGlobalSlotAVM2Item(ins, localData.lineStartInstruction, ins.operands[0], value); - SetTypeIns.handleResult(value, stack, output, localData, result, -1); + GraphTargetItem obj = new GlobalAVM2Item(ins, localData.lineStartInstruction); + SetSlotIns.handleSetSlot(localData, stack, ins, output, slotIndex, obj, value); } @Override public int getStackPopCount(AVM2Instruction ins, ABC abc) { return 1; } - - @Override - public String getObject(Stack stack, ABC abc, AVM2Instruction ins, List output, MethodBody body, HashMap localRegNames, List fullyQualifiedNames) { - return "globalslot" + ins.operands[0]; - } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/SetPropertyIns.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/SetPropertyIns.java index 047c821c4..4cc2cca66 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/SetPropertyIns.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/SetPropertyIns.java @@ -279,15 +279,4 @@ public class SetPropertyIns extends InstructionDefinition implements SetTypeIns int multinameIndex = ins.operands[0]; return 2 + getMultinameRequiredStackSize(abc.constants, multinameIndex); } - - @Override - public String getObject(Stack stack, ABC abc, AVM2Instruction ins, List output, MethodBody body, HashMap localRegNames, List fullyQualifiedNames) { - int multinameIndex = ins.operands[0]; - String multiname = resolveMultinameNoPop(0, stack, abc.constants, multinameIndex, ins, fullyQualifiedNames); - GraphTargetItem obj = stack.get(1 + resolvedCount(abc.constants, multinameIndex)); //pod vrcholem - if ((!obj.toString().isEmpty())) { - multiname = "." + multiname; - } - return obj + multiname; - } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/SetSlotIns.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/SetSlotIns.java index 00d88b640..402eb921d 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/SetSlotIns.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/SetSlotIns.java @@ -12,7 +12,8 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public - * License along with this library. */ + * License along with this library. + */ package com.jpexs.decompiler.flash.abc.avm2.instructions.other; import com.jpexs.decompiler.flash.abc.ABC; @@ -38,6 +39,7 @@ import com.jpexs.decompiler.flash.abc.types.traits.TraitSlotConst; import com.jpexs.decompiler.graph.DottedChain; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.TranslateStack; +import com.jpexs.helpers.Reference; import java.util.HashMap; import java.util.List; import java.util.Stack; @@ -57,12 +59,21 @@ public class SetSlotIns extends InstructionDefinition implements SetTypeIns { int slotIndex = ins.operands[0]; GraphTargetItem value = stack.pop(); GraphTargetItem obj = stack.pop(); //scopeId + if (obj.getThroughRegister() instanceof NewActivationAVM2Item) { + ((NewActivationAVM2Item) obj.getThroughRegister()).slots.put(slotIndex, value); + } + handleSetSlot(localData, stack, ins, output, slotIndex, obj, value); + } + + public static void handleSetSlot(AVM2LocalData localData, TranslateStack stack, AVM2Instruction ins, List output, int slotIndex, GraphTargetItem obj, GraphTargetItem value) { + GraphTargetItem objnoreg = obj; obj = obj.getThroughRegister(); - if (obj instanceof NewActivationAVM2Item) { - ((NewActivationAVM2Item) obj).slots.put(slotIndex, value); - } - Multiname slotname = searchSlotName(slotIndex, localData, obj); + + Reference realObj = new Reference<>(null); + Multiname slotname = InstructionDefinition.searchSlotName(slotIndex, localData, obj, realObj); + + obj = realObj.getVal(); if (slotname != null) { if (value instanceof LocalRegAVM2Item) { @@ -134,20 +145,4 @@ public class SetSlotIns extends InstructionDefinition implements SetTypeIns { public int getStackPopCount(AVM2Instruction ins, ABC abc) { return 2; } - - @Override - public String getObject(Stack stack, ABC abc, AVM2Instruction ins, List output, MethodBody body, HashMap localRegNames, List fullyQualifiedNames) { - int slotIndex = ins.operands[0]; - ////String obj = stack.get(1); - String slotname = ""; - for (int t = 0; t < body.traits.traits.size(); t++) { - if (body.traits.traits.get(t) instanceof TraitSlotConst) { - if (((TraitSlotConst) body.traits.traits.get(t)).slot_id == slotIndex) { - slotname = body.traits.traits.get(t).getName(abc).getName(abc.constants, fullyQualifiedNames, true, true); - } - } - - } - return slotname; - } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/SetSuperIns.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/SetSuperIns.java index fe523cbb9..80afe1ba2 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/SetSuperIns.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/SetSuperIns.java @@ -64,13 +64,4 @@ public class SetSuperIns extends InstructionDefinition implements SetTypeIns { return 2 + getMultinameRequiredStackSize(abc.constants, multinameIndex); } - @Override - public String getObject(Stack stack, ABC abc, AVM2Instruction ins, List output, MethodBody body, HashMap localRegNames, List fullyQualifiedNames) throws InterruptedException { - int multinameIndex = ins.operands[0]; - String multiname = resolveMultinameNoPop(1, stack, abc.constants, multinameIndex, ins, fullyQualifiedNames); - HighlightedTextWriter writer = new HighlightedTextWriter(Configuration.getCodeFormatting(), false); - stack.get(1 + resolvedCount(abc.constants, multinameIndex)).toString(writer, LocalData.create(abc, localRegNames, fullyQualifiedNames)); - String obj = writer.toString(); - return obj + ".super." + multiname; - } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/SetGlobalSlotAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/GlobalAVM2Item.java similarity index 61% rename from libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/SetGlobalSlotAVM2Item.java rename to libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/GlobalAVM2Item.java index 457c0c1e9..a4ef69cb5 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/SetGlobalSlotAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/GlobalAVM2Item.java @@ -12,56 +12,51 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public - * License along with this library. */ + * License along with this library. + */ package com.jpexs.decompiler.flash.abc.avm2.model; +import com.jpexs.decompiler.flash.ecma.ObjectType; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; -import com.jpexs.decompiler.graph.GraphPart; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.LocalData; +import java.util.HashMap; /** * * @author JPEXS */ -public class SetGlobalSlotAVM2Item extends AVM2Item { +public class GlobalAVM2Item extends AVM2Item { - public int slotId; - - @Override - public GraphPart getFirstPart() { - return value.getFirstPart(); - } - - public SetGlobalSlotAVM2Item(GraphSourceItem instruction, GraphSourceItem lineStartIns, int slotId, GraphTargetItem value) { - super(instruction, lineStartIns, PRECEDENCE_ASSIGMENT, value); - this.slotId = slotId; + public GlobalAVM2Item(GraphSourceItem instruction, GraphSourceItem lineStartIns) { + super(instruction, lineStartIns, PRECEDENCE_PRIMARY); } @Override public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) throws InterruptedException { - writer.append("§§setglobalslot"); - writer.spaceBeforeCallParenthesies(2); - writer.append("("); - writer.append(slotId).append(","); - value.toString(writer, localData); - return writer.append(")"); + return writer.append("global"); } @Override - public boolean hasSideEffect() { + public Object getResult() { + return new ObjectType(new HashMap<>()) { + @Override + public String toString() { + return "global"; + } + }; + } + + @Override + public boolean hasReturnValue() { return true; } @Override public GraphTargetItem returnType() { - return TypeItem.UNBOUNDED; + return new TypeItem("global"); } - @Override - public boolean hasReturnValue() { - return false; - } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/NewFunctionAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/NewFunctionAVM2Item.java index 7d411ad2c..efd7454fa 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/NewFunctionAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/NewFunctionAVM2Item.java @@ -87,7 +87,7 @@ public class NewFunctionAVM2Item extends AVM2Item { abc.method_info.get(methodIndex).getReturnTypeStr(writer, abc.constants, fullyQualifiedNames); writer.startBlock(); if (body != null) { - body.convert(new ConvertData(), path + "/inner", ScriptExportMode.AS, isStatic, methodIndex, scriptIndex, classIndex, abc, null, (ScopeStack) this.scopeStack.clone(), 0, new NulWriter(), fullyQualifiedNames, null, false); + body.convert(new ConvertData(), path + "/inner", ScriptExportMode.AS, isStatic, methodIndex, scriptIndex, classIndex, abc, null, new ScopeStack(), 0, new NulWriter(), fullyQualifiedNames, null, false); body.toString(path + "/inner", ScriptExportMode.AS, abc, null, writer, fullyQualifiedNames); } writer.endBlock(); diff --git a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/ActionScript3DecompileTestBase.java b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/ActionScript3DecompileTestBase.java index 859ce5d8f..cef4bb645 100644 --- a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/ActionScript3DecompileTestBase.java +++ b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/ActionScript3DecompileTestBase.java @@ -93,7 +93,7 @@ public abstract class ActionScript3DecompileTestBase extends ActionScriptTestBas Configuration.autoDeobfuscate.set(methodName.toLowerCase().contains("obfus")); - abc.bodies.get(bodyIndex).convert(new ConvertData(), "run", ScriptExportMode.AS, isStatic, abc.bodies.get(bodyIndex).method_info, scriptIndex, clsIndex, abc, null, new ScopeStack(scriptIndex), 0, new NulWriter(), new ArrayList<>(), ts, true); + abc.bodies.get(bodyIndex).convert(new ConvertData(), "run", ScriptExportMode.AS, isStatic, abc.bodies.get(bodyIndex).method_info, scriptIndex, clsIndex, abc, null, new ScopeStack(), 0, new NulWriter(), new ArrayList<>(), ts, true); writer = new HighlightedTextWriter(new CodeFormatting(), false); abc.bodies.get(bodyIndex).toString("run", ScriptExportMode.AS, abc, null, writer, new ArrayList<>()); } catch (InterruptedException ex) { diff --git a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3ClassTest.java b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3ClassTest.java index 7fa0d264a..a53c75a05 100644 --- a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3ClassTest.java +++ b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3ClassTest.java @@ -26,14 +26,15 @@ public class ActionScript3ClassTest extends ActionScript3DecompileTestBase { @BeforeClass public void init() throws IOException, InterruptedException { addSwf("standard", "testdata/as3_new/bin/as3_new.flex.swf"); + addSwf("assembled", "testdata/as3_assembled/bin/as3_assembled.swf"); } - private void decompileScriptPack(String path, String expectedResult) { + private void decompileScriptPack(String swfId, String path, String expectedResult) { DoABC2Tag tag = null; ABC abc = null; ScriptPack scriptPack = null; - for (Tag t : getSwf("standard").getTags()) { + for (Tag t : getSwf(swfId).getTags()) { if (t instanceof DoABC2Tag) { tag = (DoABC2Tag) t; abc = tag.getABC(); @@ -59,7 +60,7 @@ public class ActionScript3ClassTest extends ActionScript3DecompileTestBase { @Test public void testMyPackage1TestClass() { - decompileScriptPack("tests_classes.mypackage1.TestClass", "package tests_classes.mypackage1\n" + decompileScriptPack("standard", "tests_classes.mypackage1.TestClass", "package tests_classes.mypackage1\n" + "{\n" + " public class TestClass implements tests_classes.mypackage1.TestInterface\n" + " {\n" @@ -96,7 +97,7 @@ public class ActionScript3ClassTest extends ActionScript3DecompileTestBase { @Test public void testMyPackage1TestClass2() { - decompileScriptPack("tests_classes.mypackage1.TestClass2", "package tests_classes.mypackage1\n" + decompileScriptPack("standard", "tests_classes.mypackage1.TestClass2", "package tests_classes.mypackage1\n" + "{\n" + " public class TestClass2\n" + " {\n" @@ -139,7 +140,7 @@ public class ActionScript3ClassTest extends ActionScript3DecompileTestBase { @Test public void testMyPackage1TestInterface() { - decompileScriptPack("tests_classes.mypackage1.TestInterface", "package tests_classes.mypackage1\n" + decompileScriptPack("standard", "tests_classes.mypackage1.TestInterface", "package tests_classes.mypackage1\n" + "{\n" + " public interface TestInterface extends tests_classes.mypackage2.TestInterface\n" + " {\n" @@ -151,7 +152,7 @@ public class ActionScript3ClassTest extends ActionScript3DecompileTestBase { @Test public void testMyPackage1MyNamespace() { - decompileScriptPack("tests_classes.mypackage1.myNamespace", "package tests_classes.mypackage1\n" + decompileScriptPack("standard", "tests_classes.mypackage1.myNamespace", "package tests_classes.mypackage1\n" + "{\n" + " public namespace myNamespace = \"https://www.free-decompiler.com/flash/test/namespace\";\n" + "}"); @@ -159,7 +160,7 @@ public class ActionScript3ClassTest extends ActionScript3DecompileTestBase { @Test public void testMyPackage2TestClass() { - decompileScriptPack("tests_classes.mypackage2.TestClass", "package tests_classes.mypackage2\n" + decompileScriptPack("standard", "tests_classes.mypackage2.TestClass", "package tests_classes.mypackage2\n" + "{\n" + " public class TestClass implements TestInterface\n" + " {\n" @@ -184,7 +185,7 @@ public class ActionScript3ClassTest extends ActionScript3DecompileTestBase { @Test public void testMyPackage2TestInterface() { - decompileScriptPack("tests_classes.mypackage2.TestInterface", "package tests_classes.mypackage2\n" + decompileScriptPack("standard", "tests_classes.mypackage2.TestInterface", "package tests_classes.mypackage2\n" + "{\n" + " public interface TestInterface\n" + " {\n" @@ -196,7 +197,7 @@ public class ActionScript3ClassTest extends ActionScript3DecompileTestBase { @Test public void testMyPackage3TestClass() { - decompileScriptPack("tests_classes.mypackage3.TestClass", "package tests_classes.mypackage3\n" + decompileScriptPack("standard", "tests_classes.mypackage3.TestClass", "package tests_classes.mypackage3\n" + "{\n" + " public class TestClass\n" + " {\n" @@ -217,7 +218,7 @@ public class ActionScript3ClassTest extends ActionScript3DecompileTestBase { @Test public void testThisOutsideClass() { - decompileScriptPack("tests_classes.TestThisOutsideClass", "package tests_classes\n" + decompileScriptPack("standard", "tests_classes.TestThisOutsideClass", "package tests_classes\n" + "{\n" + " public class TestThisOutsideClass\n" + " {\n" @@ -243,4 +244,54 @@ public class ActionScript3ClassTest extends ActionScript3DecompileTestBase { + " this.attrib++;\n" + "}"); } + + @Test + public void testSlots() { + decompileScriptPack("assembled", "tests.TestSlots", "package tests\n" + + "{\n" + + " public class TestSlots\n" + + " {\n" + + " \n" + + " public static var classVar1:String = \"cls1\";\n" + + " \n" + + " public static var classVar2:String = \"cls2\";\n" + + " \n" + + " \n" + + " public var instanceVar1:String = \"ins1\";\n" + + " \n" + + " public var instanceVar2:String = \"ins2\";\n" + + " \n" + + " public function TestSlots()\n" + + " {\n" + + " super();\n" + + " }\n" + + " \n" + + " public static function classMethod() : void\n" + + " {\n" + + " trace(classVar1);\n" + + " trace(classVar2);\n" + + " trace(globalVar1);\n" + + " trace(globalVar2);\n" + + " }\n" + + " \n" + + " public function instanceMethod() : void\n" + + " {\n" + + " trace(instanceVar1);\n" + + " trace(instanceVar2);\n" + + " trace(globalVar1);\n" + + " trace(globalVar2);\n" + + " }\n" + + " }\n" + + "}\n" + + "\n" + + "var globalVar1:String = \"glb1\";\n" + + "\n" + + "var globalVar2:String = \"glb2\";\n" + + "\n" + + "function globalFunction():void\n" + + "{\n" + + " trace(globalVar1);\n" + + " trace(globalVar2);\n" + + "}"); + } } diff --git a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3ClassicAirDecompileTest.java b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3ClassicAirDecompileTest.java index 2bda0bbe2..702e35db2 100644 --- a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3ClassicAirDecompileTest.java +++ b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3ClassicAirDecompileTest.java @@ -880,6 +880,18 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile false); } + @Test + public void testInnerFunctionScope() { + decompileMethod("classic_air", "testInnerFunctionScope", "a = a;\r\n" + + "var innerFunc:Function = function(b:String):*\r\n" + + "{\r\n" + + "testProm = 4;\r\n" + + "trace(testProm);\r\n" + + "};\r\n" + + "innerFunc(a);\r\n", + false); + } + @Test public void testInnerFunctions() { decompileMethod("classic_air", "testInnerFunctions", "a = a;\r\n" diff --git a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3ClassicDecompileTest.java b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3ClassicDecompileTest.java index aed9a9565..6aa8afd73 100644 --- a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3ClassicDecompileTest.java +++ b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3ClassicDecompileTest.java @@ -874,6 +874,17 @@ public class ActionScript3ClassicDecompileTest extends ActionScript3DecompileTes false); } + @Test + public void testInnerFunctionScope() { + decompileMethod("classic", "testInnerFunctionScope", "var innerFunc:Function = function(b:String):*\r\n" + + "{\r\n" + + "testProm = 4;\r\n" + + "trace(testProm);\r\n" + + "};\r\n" + + "innerFunc(a);\r\n", + false); + } + @Test public void testInnerFunctions() { decompileMethod("classic", "testInnerFunctions", "var s:int = 0;\r\n" diff --git a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3CrossCompileDecompileTest.java b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3CrossCompileDecompileTest.java index 0e45c83c7..015a30a73 100644 --- a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3CrossCompileDecompileTest.java +++ b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3CrossCompileDecompileTest.java @@ -417,15 +417,16 @@ public class ActionScript3CrossCompileDecompileTest extends ActionScript3Decompi + "trace(\"in catch1\");\r\n" + "while(true)\r\n" + "{\r\n" + + "trace(\"xx\");\r\n" + "if(a > 5)\r\n" + "{\r\n" + "break;\r\n" + "}\r\n" + + "trace(\"yy\");\r\n" + "}\r\n" + "trace(\"in catch1c\");\r\n" + "}\r\n" - + "}\r\n" - + "trace(\"after\");\r\n", + + "}\r\n", false); } diff --git a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3CrossCompileSwfToolsDecompileTest.java b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3CrossCompileSwfToolsDecompileTest.java index 2f8ef49e0..ea00cada0 100644 --- a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3CrossCompileSwfToolsDecompileTest.java +++ b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3CrossCompileSwfToolsDecompileTest.java @@ -408,15 +408,16 @@ public class ActionScript3CrossCompileSwfToolsDecompileTest extends ActionScript + "trace(\"in catch1\");\r\n" + "while(true)\r\n" + "{\r\n" + + "trace(\"xx\");\r\n" + "if(_loc1_ > 5)\r\n" + "{\r\n" + "break;\r\n" + "}\r\n" + + "trace(\"yy\");\r\n" + "}\r\n" + "trace(\"in catch1c\");\r\n" + "}\r\n" - + "}\r\n" - + "trace(\"after\");\r\n", + + "}\r\n", false); } diff --git a/libsrc/ffdec_lib/testdata/as3_assembled/abc/as3_assembled-0/as3_assembled-0.main.abc b/libsrc/ffdec_lib/testdata/as3_assembled/abc/as3_assembled-0/as3_assembled-0.main.abc index f6d2e4bc866c5665a3756c5026bd4e2b137a0728..45272181334e9756dde5f67bacf24b6ea6e0c136 100644 GIT binary patch literal 5900 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 delta 2782 zcmY+G$!{aa6^Gxe?q+pyZBi83qSRWcg^Q%tzK!-7ZL?6b*wY?cGDS*qYdkZycM!6)n0M5;mQ-EBUSE2}lEuibyuj+kosp_V_ z9Q$S@V!#;C^>bgL^!TLw{F^U7!33UY?#YuUAL(b$ddo-8%dUF%?CiO>%=UaZi8DCo z{hr?$C$==8KP7Q9sU-(YRReP*rKYx1 zJE`5&Uh0E`;|9951FI16wVARaD2q^eU3vMKj8Q? zu1#`nifap82rg!Mc8TY%@xXgLf5_EUuJ#Dj1ag78cPu6XenkXO1W|<0`<0jopR#?q zk@7-i>DzyaMXbdAX%Pg(Q3Pf%5e5xa1Ya8y(;%euN12#}kd)yV6H^eCG8SiI2HK@e zB$$|k4k=SfCg#DCvOCO#4SiDfw=*#dgHjGfn3#Z!l-Uj@7NIgK^_a=T0!&Cb8DwG% zW~7|$VqzH9}q0+Wb&DVuewYTN2pz!xr?dmQRAIEfnYM}>=AizPkm^mG(p7s>7jMg!Q34f$& zALJV5oHQ$pPy+*8_v{Xe@R0>)lts$zK?=mVq z`IxF|$*P@(*J=O7dG^!SF&`z6KQH8wra8q>WaxKgj7E-mVK|zOIpEJCb=H{u2v&ZTZ4Zf`CE=^xiK=w zulTZO?JWTkGC+!ow2R{F?19J~i8PCA)VATmFl^KMWCQuWL~c8p<;KZuHdF3sA*Lje zPQt_NYdfu#wc=p@prmDA243Z!R6IYUAel;9`j|d$AaghVU8@-Z`ViS=A5Hg356m+fw$aGjnh%y5 z349rl?^J+cu;RgR_YL5wk9X_|LXQpslTi1F{%Gn*LhPu{H6XdF7+Sk`nvb0 zw%=8JWTE!)`k>c`iTW^IALi=AJPo}&0Go|MPGlkX9K&)`RLJ#aAvanI*^-6auiA#7 zxYV16vNu)Q;^_Can)lCmN_Va-UM=2DZ*pd3gEn!y5yp{W?mJP-4N;h#W|-ZUFncl# zz4!9dL{WMvTZ7B(I=4S7hfCTH`a)6qH{)i5dnUOLoS5Zy6Zh5?ca8Mz7VsUFetCa^ zRr`DFrjG=?eiNZv5s%*(`OS6Ayon0Kq0*$KJ%8W(M|%qIdjD-7o4QA{)|;5|+geRd d4(8c9ozcG032g%kjWkYW8gDsmmfK08{|`b?(q;ev diff --git a/libsrc/ffdec_lib/testdata/as3_assembled/abc/as3_assembled-0/as3_assembled-0.main.asasm b/libsrc/ffdec_lib/testdata/as3_assembled/abc/as3_assembled-0/as3_assembled-0.main.asasm index 18c2a11f1..bf7085e30 100644 --- a/libsrc/ffdec_lib/testdata/as3_assembled/abc/as3_assembled-0/as3_assembled-0.main.asasm +++ b/libsrc/ffdec_lib/testdata/as3_assembled/abc/as3_assembled-0/as3_assembled-0.main.asasm @@ -23,5 +23,7 @@ program #include "tests/TestDeobfuscatorJumpsExceptionStart.script.asasm" #include "tests/TestUnnamedException.script.asasm" #include "tests/TestTryCatchLoopBreakLevel2.script.asasm" + #include "tests/TestSlots.script.asasm" + #include "tests/TestSlots.init/inline_method.method.asasm" ; place to add next end ; program diff --git a/libsrc/ffdec_lib/testdata/as3_assembled/abc/as3_assembled-0/tests/TestSlots.class.asasm b/libsrc/ffdec_lib/testdata/as3_assembled/abc/as3_assembled-0/tests/TestSlots.class.asasm new file mode 100644 index 000000000..1c710a7d2 --- /dev/null +++ b/libsrc/ffdec_lib/testdata/as3_assembled/abc/as3_assembled-0/tests/TestSlots.class.asasm @@ -0,0 +1,163 @@ +class + refid "tests:TestSlots" + instance QName(PackageNamespace("tests"), "TestSlots") + extends QName(PackageNamespace(""), "Object") + flag SEALED + iinit + refid "tests:TestSlots/instance/init" + body + maxstack 1 + localcount 1 + initscopedepth 0 + maxscopedepth 1 + code + getlocal0 + pushscope + + getlocal0 + constructsuper 0 + + returnvoid + end ; code + end ; body + end ; method + trait slot QName(PackageNamespace(""), "instanceVar1") flag METADATA type QName(PackageNamespace(""), "String") value Utf8("ins1") + slotid 1 + metadata "__go_to_definition_help" + item "pos" "106" + end ; metadata + end ; trait + trait slot QName(PackageNamespace(""), "instanceVar2") flag METADATA type QName(PackageNamespace(""), "String") value Utf8("ins2") + slotid 2 + metadata "__go_to_definition_help" + item "pos" "150" + end ; metadata + end ; trait + trait method QName(PackageNamespace(""), "instanceMethod") flag METADATA + method + name "instanceMethod" + refid "tests:TestSlots/instance/instanceMethod" + returns QName(PackageNamespace(""), "void") + body + maxstack 3 + localcount 1 + initscopedepth 0 + maxscopedepth 1 + code + getlocal0 + pushscope + + debugfile "C:\\Dropbox\\Programovani\\JavaSE\\FFDec\\libsrc\\ffdec_lib\\testdata\\testslots\\src;tests;TestSlots.as" + findpropstrict QName(PackageNamespace(""), "trace") + debugline 18 + getscopeobject 0 + getslot 1 ;instanceVar1 + callpropvoid QName(PackageNamespace(""), "trace"), 1 + findpropstrict QName(PackageNamespace(""), "trace") + debugline 19 + getscopeobject 0 + getslot 2 ;instanceVar2 + callpropvoid QName(PackageNamespace(""), "trace"), 1 + + ;these are nested, I think this won't happen in real files + ;findpropstrict QName(PackageNamespace(""), "trace") + ;debugline 20 + ;getglobalscope + ;getslot 3 ;TestSlots + ;getslot 1 ;classVar1 + ;callpropvoid QName(PackageNamespace(""), "trace"), 1 + + ;findpropstrict QName(PackageNamespace(""), "trace") + ;debugline 21 + ;getglobalscope + ;getslot 3 ;TestSlots + ;getslot 2 ;classVar2 + ;callpropvoid QName(PackageNamespace(""), "trace"), 1 + + findpropstrict QName(PackageNamespace(""), "trace") + debugline 22 + getglobalscope + getslot 1 ;globalVar1 + callpropvoid QName(PackageNamespace(""), "trace"), 1 + findpropstrict QName(PackageNamespace(""), "trace") + debugline 23 + getglobalscope + getslot 2 ;globalVar2 + callpropvoid QName(PackageNamespace(""), "trace"), 1 + returnvoid + end ; code + end ; body + end ; method + metadata "__go_to_definition_help" + item "pos" "309" + end ; metadata + end ; trait + end ; instance + cinit + refid "tests:TestSlots/class/init" + body + maxstack 0 + localcount 1 + initscopedepth 0 + maxscopedepth 0 + code + returnvoid + end ; code + end ; body + end ; method + trait slot QName(PackageNamespace(""), "classVar1") flag METADATA type QName(PackageNamespace(""), "String") value Utf8("cls1") + slotid 1 + metadata "__go_to_definition_help" + item "pos" "205" + end ; metadata + end ; trait + trait slot QName(PackageNamespace(""), "classVar2") flag METADATA type QName(PackageNamespace(""), "String") value Utf8("cls2") + slotid 2 + metadata "__go_to_definition_help" + item "pos" "254" + end ; metadata + end ; trait + trait method QName(PackageNamespace(""), "classMethod") flag METADATA + method + name "classMethod" + refid "tests:TestSlots/class/classMethod" + returns QName(PackageNamespace(""), "void") + body + maxstack 3 + localcount 1 + initscopedepth 0 + maxscopedepth 1 + code + getlocal0 + pushscope + + debugfile "C:\\Dropbox\\Programovani\\JavaSE\\FFDec\\libsrc\\ffdec_lib\\testdata\\testslots\\src;tests;TestSlots.as" + findpropstrict QName(PackageNamespace(""), "trace") + debugline 28 + getscopeobject 0 + getslot 1 ;classVar1 + callpropvoid QName(PackageNamespace(""), "trace"), 1 + findpropstrict QName(PackageNamespace(""), "trace") + debugline 29 + getscopeobject 0 + getslot 2 ;classVar2 + callpropvoid QName(PackageNamespace(""), "trace"), 1 + findpropstrict QName(PackageNamespace(""), "trace") + debugline 30 + getglobalscope + getslot 1 ;globalVar1 + callpropvoid QName(PackageNamespace(""), "trace"), 1 + findpropstrict QName(PackageNamespace(""), "trace") + debugline 31 + getglobalscope + getslot 2 ;globalVar2 + callpropvoid QName(PackageNamespace(""), "trace"), 1 + returnvoid + end ; code + end ; body + end ; method + metadata "__go_to_definition_help" + item "pos" "512" + end ; metadata + end ; trait +end ; class diff --git a/libsrc/ffdec_lib/testdata/as3_assembled/abc/as3_assembled-0/tests/TestSlots.init/inline_method.method.asasm b/libsrc/ffdec_lib/testdata/as3_assembled/abc/as3_assembled-0/tests/TestSlots.init/inline_method.method.asasm new file mode 100644 index 000000000..573430f7a --- /dev/null +++ b/libsrc/ffdec_lib/testdata/as3_assembled/abc/as3_assembled-0/tests/TestSlots.init/inline_method.method.asasm @@ -0,0 +1,29 @@ +method + name "globalFunction" + refid "tests:TestSlots/init/inline_method" + returns QName(PackageNamespace(""), "void") + body + maxstack 3 + localcount 1 + initscopedepth 0 + maxscopedepth 1 + code + getlocal0 + pushscope + + debugfile "C:\\Dropbox\\Programovani\\JavaSE\\FFDec\\libsrc\\ffdec_lib\\testdata\\testslots\\src;tests;TestSlots.as" + getlex QName(PackageNamespace(""), "trace") + debugline 43 + getglobalscope + getlex QName(PrivateNamespace("FilePrivateNS:TestSlots"), "globalVar1") + call 1 + pop + getlex QName(PackageNamespace(""), "trace") + debugline 44 + getglobalscope + getlex QName(PrivateNamespace("FilePrivateNS:TestSlots"), "globalVar2") + call 1 + returnvoid + end ; code + end ; body +end ; method diff --git a/libsrc/ffdec_lib/testdata/as3_assembled/abc/as3_assembled-0/tests/TestSlots.script.asasm b/libsrc/ffdec_lib/testdata/as3_assembled/abc/as3_assembled-0/tests/TestSlots.script.asasm new file mode 100644 index 000000000..2bef64709 --- /dev/null +++ b/libsrc/ffdec_lib/testdata/as3_assembled/abc/as3_assembled-0/tests/TestSlots.script.asasm @@ -0,0 +1,57 @@ +script + sinit + refid "tests:TestSlots/init" + body + maxstack 3 + localcount 1 + initscopedepth 0 + maxscopedepth 2 + code + getlocal0 + pushscope + + getscopeobject 0 + getlex QName(PackageNamespace(""), "Object") + dup + pushscope + + newclass "tests:TestSlots" + popscope + initproperty QName(PackageNamespace("tests"), "TestSlots") + + getglobalscope + newfunction "tests:TestSlots/init/inline_method" + setproperty QName(PrivateNamespace("FilePrivateNS:TestSlots"), "globalFunction") + + debugfile "C:\\Dropbox\\Programovani\\JavaSE\\FFDec\\libsrc\\ffdec_lib\\testdata\\testslots\\src;tests;TestSlots.as" + debugline 38 + pushstring "glb1" + findproperty QName(PrivateNamespace("FilePrivateNS:TestSlots"), "globalVar1") + swap + setproperty QName(PrivateNamespace("FilePrivateNS:TestSlots"), "globalVar1") + + debugline 39 + pushstring "glb2" + findproperty QName(PrivateNamespace("FilePrivateNS:TestSlots"), "globalVar2") + swap + setproperty QName(PrivateNamespace("FilePrivateNS:TestSlots"), "globalVar2") + + returnvoid + end ; code + end ; body + end ; method + trait class QName(PackageNamespace("tests"), "TestSlots") flag METADATA + slotid 3 + #include "TestSlots.class.asasm" + metadata "__go_to_definition_help" + item "pos" "73" + end ; metadata + end ; trait + trait slot QName(PrivateNamespace("FilePrivateNS:TestSlots"), "globalVar1") type QName(PackageNamespace(""), "String") + slotid 1 + end + trait slot QName(PrivateNamespace("FilePrivateNS:TestSlots"), "globalVar2") type QName(PackageNamespace(""), "String") + slotid 2 + end + trait slot QName(PrivateNamespace("FilePrivateNS:TestSlots"), "globalFunction") end +end ; script diff --git a/libsrc/ffdec_lib/testdata/as3_assembled/bin/as3_assembled.swf b/libsrc/ffdec_lib/testdata/as3_assembled/bin/as3_assembled.swf index 37e48f0b2992fda61fe29397c33a1d41b314040b..7ba011d84280de254f0947203b4cb28d1daf8924 100644 GIT binary patch literal 3620 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 qL-fe6q|=F5<~5zx>FH$5c`!W&CX8 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 diff --git a/libsrc/ffdec_lib/testdata/as3_cross_compile/bin/as3_cross_compile.air.swf b/libsrc/ffdec_lib/testdata/as3_cross_compile/bin/as3_cross_compile.air.swf index 4cd8e972c3a067566a576226bda6a385bd5a1bbd..bcc07490557a13afc0a245ded31057f6a69ce524 100644 GIT binary patch literal 4900 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 WQV`hf@Pmp8`~UGT0r5W=q?*=gAa1+> literal 4891 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 Nf8t+)@IMD?mO$U*rmp}1 diff --git a/libsrc/ffdec_lib/testdata/as3_cross_compile/bin/as3_cross_compile.flex.swf b/libsrc/ffdec_lib/testdata/as3_cross_compile/bin/as3_cross_compile.flex.swf index 68b0b74c89abf3dba78061f91aabb1b84f4d2db5..e1f77262b93fb7a8c3110fba681570756e3ff643 100644 GIT binary patch literal 6638 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 literal 6615 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 aUTd2m=~cWI9D@FA&EhBF!~X)V8AGj#3%+dt diff --git a/libsrc/ffdec_lib/testdata/as3_cross_compile/bin/as3_cross_compile.swftools.swf b/libsrc/ffdec_lib/testdata/as3_cross_compile/bin/as3_cross_compile.swftools.swf index ec2d884783ecc3cff072ede5666085cbab17bd92..e8e46f6861b77988e325bb2305cf958f788e9bb9 100644 GIT binary patch literal 2828 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 diff --git a/libsrc/ffdec_lib/testdata/as3_cross_compile/obj/as3_cross_compileConfig.old b/libsrc/ffdec_lib/testdata/as3_cross_compile/obj/as3_cross_compileConfig.old index 6d522439f..8bd4a91f5 100644 --- a/libsrc/ffdec_lib/testdata/as3_cross_compile/obj/as3_cross_compileConfig.old +++ b/libsrc/ffdec_lib/testdata/as3_cross_compile/obj/as3_cross_compileConfig.old @@ -3,6 +3,8 @@ 25.0 + false + true CONFIG::debug diff --git a/libsrc/ffdec_lib/testdata/as3_cross_compile/src/tests/TestTryCatchLoopBreak5.as b/libsrc/ffdec_lib/testdata/as3_cross_compile/src/tests/TestTryCatchLoopBreak5.as index 14e6cdd33..9e8a0b268 100644 --- a/libsrc/ffdec_lib/testdata/as3_cross_compile/src/tests/TestTryCatchLoopBreak5.as +++ b/libsrc/ffdec_lib/testdata/as3_cross_compile/src/tests/TestTryCatchLoopBreak5.as @@ -23,14 +23,16 @@ package tests { trace("in catch1"); while (true){ + trace("xx"); if (a > 5){ break; } + trace("yy"); } trace("in catch1c"); } } - trace("after"); + //trace("after"); } diff --git a/libsrc/ffdec_lib/testdata/as3_new/bin/as3_new.flex.swf b/libsrc/ffdec_lib/testdata/as3_new/bin/as3_new.flex.swf index baddf38803d6a88a204509c175b33421b04f085c..7a1fd3e0c996cec05ecabc53cf2d1cf87ef5ccad 100644 GIT binary patch literal 22218 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 literal 22201 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