From 9c6b46ba79a76fde80edaa04b8de47da93ef62df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=C5=99=C3=ADk?= Date: Thu, 4 Feb 2021 21:36:09 +0100 Subject: [PATCH] #349 AS3 - better handling of declarations --- CHANGELOG.md | 1 + .../decompiler/flash/abc/avm2/AVM2Code.java | 159 +++++++++--------- .../model/clauses/DeclarationAVM2Item.java | 19 ++- .../avm2/model/clauses/ForEachInAVM2Item.java | 9 +- .../abc/avm2/model/clauses/ForInAVM2Item.java | 9 +- .../abc/avm2/model/clauses/TryAVM2Item.java | 9 +- .../abc/avm2/parser/script/ClassAVM2Item.java | 10 +- .../action/model/clauses/ClassActionItem.java | 10 +- .../action/model/clauses/ForInActionItem.java | 20 ++- .../clauses/IfFrameLoadedActionItem.java | 17 +- .../action/model/clauses/TryActionItem.java | 24 ++- .../decompiler/graph/GraphTargetItem.java | 21 ++- .../decompiler/graph/model/DoWhileItem.java | 11 +- .../jpexs/decompiler/graph/model/ForItem.java | 9 +- .../decompiler/graph/model/GotoItem.java | 15 +- .../jpexs/decompiler/graph/model/IfItem.java | 9 +- .../decompiler/graph/model/SwitchItem.java | 10 +- .../decompiler/graph/model/WhileItem.java | 11 +- .../ActionScript3AssembledDecompileTest.java | 18 +- .../ActionScript3ClassicAirDecompileTest.java | 4 +- .../ActionScript3ClassicDecompileTest.java | 1 - .../as3_assembled-0/as3_assembled-0.main.abc | Bin 3104 -> 3312 bytes .../as3_assembled-0.main.asasm | 1 + .../tests/TestDeclareReg.class.asasm | 76 +++++++++ .../tests/TestDeclareReg.script.asasm | 29 ++++ .../as3_assembled/bin/as3_assembled.swf | Bin 2046 -> 2161 bytes .../testdata/as3_new/bin/as3_new.air.swf | Bin 16173 -> 16168 bytes .../testdata/as3_new/bin/as3_new.flex.swf | Bin 20796 -> 20783 bytes 28 files changed, 397 insertions(+), 105 deletions(-) create mode 100644 libsrc/ffdec_lib/testdata/as3_assembled/abc/as3_assembled-0/tests/TestDeclareReg.class.asasm create mode 100644 libsrc/ffdec_lib/testdata/as3_assembled/abc/as3_assembled-0/tests/TestDeclareReg.script.asasm diff --git a/CHANGELOG.md b/CHANGELOG.md index 8c041f727..84e475115 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -31,6 +31,7 @@ All notable changes to this project will be documented in this file. - AS3 deobfuscator of registers parsing of exception targets - AS3 code with exception start/end not matching instruction boundary - AS3 deobfuscator in some cases +- #349 AS3 - better handling of declarations ### Changed - AS3 test methods separated to classes 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 2d94f2ddd..cabba22e9 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 @@ -285,11 +285,13 @@ import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.flash.helpers.HighlightedTextWriter; import com.jpexs.decompiler.flash.helpers.SWFDecompilerPlugin; import com.jpexs.decompiler.flash.helpers.hilight.HighlightSpecialType; +import com.jpexs.decompiler.graph.AbstractGraphTargetVisitor; import com.jpexs.decompiler.graph.Block; import com.jpexs.decompiler.graph.DottedChain; import com.jpexs.decompiler.graph.GraphPart; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.GraphTargetVisitorInterface; import com.jpexs.decompiler.graph.ScopeStack; import com.jpexs.decompiler.graph.SimpleValue; import com.jpexs.decompiler.graph.TranslateStack; @@ -306,6 +308,7 @@ import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.OutputStream; import java.util.ArrayList; +import java.util.Collection; import java.util.HashMap; import java.util.HashSet; import java.util.List; @@ -1804,93 +1807,89 @@ public class AVM2Code implements Cloneable { return assignment; } - private GraphTargetItem injectDeclarations(int minreg, GraphTargetItem ti, DeclarationAVM2Item[] declaredRegisters, List declaredSlots, List declaredSlotsDec, ABC abc, MethodBody body) { - if (ti.value != null) { - ti.value = injectDeclarations(minreg, ti.value, declaredRegisters, declaredSlots, declaredSlotsDec, abc, body); - } - //TODO: walk whole tree... some walker? - if (ti instanceof IfItem) { - ((IfItem) ti).expression = injectDeclarations(minreg, ((IfItem) ti).expression, declaredRegisters, declaredSlots, declaredSlotsDec, abc, body); - } - if (ti instanceof BinaryOpItem) { - ((BinaryOpItem) ti).leftSide = injectDeclarations(minreg, ((BinaryOpItem) ti).leftSide, declaredRegisters, declaredSlots, declaredSlotsDec, abc, body); - ((BinaryOpItem) ti).rightSide = injectDeclarations(minreg, ((BinaryOpItem) ti).rightSide, declaredRegisters, declaredSlots, declaredSlotsDec, abc, body); - } - if (ti instanceof ForEachInAVM2Item) { - ForEachInAVM2Item fei = (ForEachInAVM2Item) ti; - if (fei.expression.object instanceof LocalRegAVM2Item) { - int reg = ((LocalRegAVM2Item) fei.expression.object).regIndex; - if (declaredRegisters[reg] == null) { - fei.expression.object = handleDeclareReg(minreg, fei.expression.object, declaredRegisters, declaredSlots, reg); + private void injectDeclarations(List items, int minreg, DeclarationAVM2Item[] declaredRegisters, List declaredSlots, List declaredSlotsDec, ABC abc, MethodBody body) { + for (int i = 0; i < items.size(); i++) { + GraphTargetItem currentItem = items.get(i); + List itemsOnLine = new ArrayList<>(); + itemsOnLine.add(currentItem); + currentItem.visitRecursivelyNoBlock(new AbstractGraphTargetVisitor() { + @Override + public void visit(GraphTargetItem item) { + itemsOnLine.add(item); + } + }); + + if (currentItem instanceof ForEachInAVM2Item) { + ForEachInAVM2Item fei = (ForEachInAVM2Item) currentItem; + if (fei.expression.object instanceof LocalRegAVM2Item) { + int reg = ((LocalRegAVM2Item) fei.expression.object).regIndex; + if (declaredRegisters[reg] == null) { + fei.expression.object = handleDeclareReg(minreg, fei.expression.object, declaredRegisters, declaredSlots, reg); + } + } + } + if (currentItem instanceof ForInAVM2Item) { + ForInAVM2Item fi = (ForInAVM2Item) currentItem; + if (fi.expression.object instanceof LocalRegAVM2Item) { + int reg = ((LocalRegAVM2Item) fi.expression.object).regIndex; + fi.expression.object = handleDeclareReg(minreg, fi.expression.object, declaredRegisters, declaredSlots, reg); } } - } - if (ti instanceof ForInAVM2Item) { - ForInAVM2Item fi = (ForInAVM2Item) ti; - if (fi.expression.object instanceof LocalRegAVM2Item) { - int reg = ((LocalRegAVM2Item) fi.expression.object).regIndex; - fi.expression.object = handleDeclareReg(minreg, fi.expression.object, declaredRegisters, declaredSlots, reg); - //nowdeclaredRegs.add(reg); - } - } - if (ti instanceof Block) { - Block bl = (Block) ti; - for (List s : bl.getSubs()) { - injectDeclarations(minreg, s, declaredRegisters, declaredSlots, declaredSlotsDec, abc, body); - } - } - if (ti instanceof SetLocalAVM2Item) { - int reg = ((SetLocalAVM2Item) ti).regIndex; - ti = handleDeclareReg(minreg, ti, declaredRegisters, declaredSlots, reg); - return ti; - } - if (ti instanceof SetSlotAVM2Item) { - SetSlotAVM2Item ssti = (SetSlotAVM2Item) ti; - 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); + for (GraphTargetItem subItem : itemsOnLine) { + if (subItem instanceof SetLocalAVM2Item) { + SetLocalAVM2Item setLocal = (SetLocalAVM2Item) subItem; + int reg = setLocal.regIndex; + GraphTargetItem dec = handleDeclareReg(minreg, subItem, declaredRegisters, declaredSlots, reg); + if (dec != subItem) { //declared right now + if (subItem == currentItem) { + items.set(i, dec); + } else { + ((DeclarationAVM2Item) dec).showValue = false; + items.add(i, dec); + i++; } } } - DeclarationAVM2Item d = new DeclarationAVM2Item(ti, type); - ssti.setDeclaration(d); - declaredSlotsDec.add(d); - declaredSlots.add(sl); - return d; - //nowdeclaredSlots.add(sl); - } else { - int idx = declaredSlots.indexOf(sl); - ssti.setDeclaration(declaredSlotsDec.get(idx)); + 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); + } + } + } + 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++; + } + + } else { + int idx = declaredSlots.indexOf(sl); + ssti.setDeclaration(declaredSlotsDec.get(idx)); + } + } + } + + if (currentItem instanceof Block) { + Block blk = (Block) currentItem; + for (List sub : blk.getSubs()) { + injectDeclarations(sub, minreg, declaredRegisters, declaredSlots, declaredSlotsDec, abc, body); + } } } - return ti; - } - - private void injectDeclarations(int minreg, List list, DeclarationAVM2Item[] declaredRegisters, List declaredSlots, List declaredSlotsDec, ABC abc, MethodBody body) { - //List nowdeclaredRegs=new ArrayList<>(); - //List nowdeclaredSlots=new ArrayList<>(); - for (int i = 0; i < list.size(); i++) { - GraphTargetItem ti = list.get(i); - GraphTargetItem ti2 = injectDeclarations(minreg, ti, declaredRegisters, declaredSlots, declaredSlotsDec, abc, body); - if (ti != ti2) { - list.set(i, ti2); - } - } - - /* - //undeclare registers at the end of the block? - for(int reg:nowdeclaredRegs){ - declaredRegisters[reg] = false; - } - - for(Slot s:nowdeclaredSlots){ - declaredSlots.remove(s); - }*/ } public List toGraphTargetItems(boolean thisHasDefaultToPrimitive, ConvertData convertData, String path, int methodIndex, boolean isStatic, int scriptIndex, int classIndex, ABC abc, MethodBody body, HashMap localRegNames, ScopeStack scopeStack, int initializerType, List fullyQualifiedNames, List initTraits, int staticOperation, HashMap localRegAssigmentIps, HashMap> refs) throws InterruptedException { @@ -2000,7 +1999,7 @@ public class AVM2Code implements Cloneable { // //int minreg = abc.method_info.get(body.method_info).getMaxReservedReg() + 1; - injectDeclarations(1, list, d, new ArrayList<>(), new ArrayList<>(), abc, body); + injectDeclarations(list, 1, d, new ArrayList<>(), new ArrayList<>(), abc, body); int lastPos = list.size() - 1; if (lastPos < 0) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/clauses/DeclarationAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/clauses/DeclarationAVM2Item.java index b91a26aa6..3416ad192 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/clauses/DeclarationAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/clauses/DeclarationAVM2Item.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.model.clauses; import com.jpexs.decompiler.flash.abc.avm2.model.AVM2Item; @@ -40,6 +41,8 @@ public class DeclarationAVM2Item extends AVM2Item { public GraphTargetItem type; + public boolean showValue = true; + public DeclarationAVM2Item(GraphTargetItem assignment, GraphTargetItem type) { super(assignment.getSrc(), assignment.getLineStartItem(), assignment.getPrecedence()); this.type = type; @@ -108,8 +111,11 @@ public class DeclarationAVM2Item extends AVM2Item { writer.append(localName); writer.append(":"); type.appendTry(writer, localData); - writer.append(" = "); - return val.toString(writer, localData); + if (showValue) { + writer.append(" = "); + val.toString(writer, localData); + } + return writer; } if (assignment instanceof SetSlotAVM2Item) { SetSlotAVM2Item ssti = (SetSlotAVM2Item) assignment; @@ -136,8 +142,11 @@ public class DeclarationAVM2Item extends AVM2Item { writer.append(":"); type.appendTry(writer, localData); - writer.append(" = "); - return val.toString(writer, localData); + if (showValue) { + writer.append(" = "); + val.toString(writer, localData); + } + return writer; } writer.append("var "); return assignment.toString(writer, localData); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/clauses/ForEachInAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/clauses/ForEachInAVM2Item.java index b927dc580..9e148343e 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/clauses/ForEachInAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/clauses/ForEachInAVM2Item.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.model.clauses; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; @@ -62,6 +63,12 @@ public class ForEachInAVM2Item extends LoopItem implements Block { visitor.visitAll(commands); } + @Override + public void visitNoBlock(GraphTargetVisitorInterface visitor) { + visitor.visit(expression); + } + + public ForEachInAVM2Item(GraphSourceItem instruction, GraphSourceItem lineStartIns, Loop loop, InAVM2Item expression, List commands) { super(instruction, lineStartIns, loop); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/clauses/ForInAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/clauses/ForInAVM2Item.java index a1ae31a99..5d488eb65 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/clauses/ForInAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/clauses/ForInAVM2Item.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.model.clauses; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; @@ -64,6 +65,12 @@ public class ForInAVM2Item extends LoopItem implements Block { visitor.visitAll(commands); } + @Override + public void visitNoBlock(GraphTargetVisitorInterface visitor) { + visitor.visit(expression); + } + + public ForInAVM2Item(GraphSourceItem instruction, GraphSourceItem lineStartIns, Loop loop, InAVM2Item expression, List commands) { super(instruction, lineStartIns, loop); if (!commands.isEmpty()) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/clauses/TryAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/clauses/TryAVM2Item.java index 15dd6b52e..ce52b429f 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/clauses/TryAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/clauses/TryAVM2Item.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.model.clauses; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; @@ -88,6 +89,12 @@ public class TryAVM2Item extends AVM2Item implements Block { } } + @Override + public void visitNoBlock(GraphTargetVisitorInterface visitor) { + + } + + public TryAVM2Item(List tryCommands, List catchExceptions, List> catchCommands, List finallyCommands, String finCatchName) { super(null, null, NOPRECEDENCE); this.tryCommands = tryCommands; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ClassAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ClassAVM2Item.java index 5df46b966..e2ed1dfa2 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ClassAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ClassAVM2Item.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.parser.script; import com.jpexs.decompiler.flash.abc.avm2.model.AVM2Item; @@ -20,6 +21,7 @@ import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.Block; import com.jpexs.decompiler.graph.DottedChain; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.GraphTargetVisitorInterface; import com.jpexs.decompiler.graph.model.ContinueItem; import com.jpexs.decompiler.graph.model.LocalData; import com.jpexs.decompiler.graph.model.UnboundedTypeItem; @@ -74,6 +76,12 @@ public class ClassAVM2Item extends AVM2Item implements Block { return ret; } + @Override + public void visitNoBlock(GraphTargetVisitorInterface visitor) { + + } + + public ClassAVM2Item(List>> metadata, List importedClasses, NamespaceItem pkg, List openedNamespaces, boolean isFinal, boolean isDynamic, String className, GraphTargetItem extendsOp, List implementsOp, List cinit, boolean staticInitActivation, List cinitVariables, GraphTargetItem iinit, List iinitVariables, List traits, boolean iinitActivation) { super(null, null, NOPRECEDENCE); this.metadata = metadata; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/clauses/ClassActionItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/clauses/ClassActionItem.java index a9cb724b0..8fe844112 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/clauses/ClassActionItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/clauses/ClassActionItem.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.action.model.clauses; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; @@ -29,6 +30,7 @@ import com.jpexs.decompiler.graph.Block; import com.jpexs.decompiler.graph.CompilationException; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.GraphTargetVisitorInterface; import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.model.ContinueItem; import com.jpexs.decompiler.graph.model.LocalData; @@ -63,6 +65,12 @@ public class ClassActionItem extends ActionItem implements Block { return ret; } + @Override + public void visitNoBlock(GraphTargetVisitorInterface visitor) { + + } + + public ClassActionItem(GraphTargetItem className, GraphTargetItem extendsOp, List implementsOp, List> traits, List traitsStatic) { super(null, null, NOPRECEDENCE); this.className = className; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/clauses/ForInActionItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/clauses/ForInActionItem.java index adcfc8ce4..ccde62107 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/clauses/ForInActionItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/clauses/ForInActionItem.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.action.model.clauses; import com.jpexs.decompiler.flash.SWF; @@ -35,6 +36,7 @@ import com.jpexs.decompiler.graph.Block; import com.jpexs.decompiler.graph.CompilationException; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.GraphTargetVisitorInterface; import com.jpexs.decompiler.graph.Loop; import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.model.ContinueItem; @@ -66,6 +68,22 @@ public class ForInActionItem extends LoopActionItem implements Block { return ret; } + @Override + public void visit(GraphTargetVisitorInterface visitor) { + visitor.visit(variableName); + visitor.visit(enumVariable); + visitor.visitAll(commands); + } + + @Override + public void visitNoBlock(GraphTargetVisitorInterface visitor) { + visitor.visit(variableName); + visitor.visit(enumVariable); + } + + + + public ForInActionItem(GraphSourceItem instruction, GraphSourceItem lineStartIns, Loop loop, GraphTargetItem variableName, GraphTargetItem enumVariable, List commands) { super(instruction, lineStartIns, loop); this.variableName = variableName; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/clauses/IfFrameLoadedActionItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/clauses/IfFrameLoadedActionItem.java index 9aeb17593..51508c521 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/clauses/IfFrameLoadedActionItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/clauses/IfFrameLoadedActionItem.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.action.model.clauses; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; @@ -24,6 +25,7 @@ import com.jpexs.decompiler.graph.CompilationException; import com.jpexs.decompiler.graph.Graph; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.GraphTargetVisitorInterface; import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.model.ContinueItem; import com.jpexs.decompiler.graph.model.LocalData; @@ -46,6 +48,19 @@ public class IfFrameLoadedActionItem extends ActionItem implements Block { this.frame = frame; } + @Override + public void visit(GraphTargetVisitorInterface visitor) { + visitor.visit(frame); + visitor.visitAll(actions); + } + + @Override + public void visitNoBlock(GraphTargetVisitorInterface visitor) { + visitor.visit(frame); + } + + + @Override public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) throws InterruptedException { writer.append("ifFrameLoaded"); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/clauses/TryActionItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/clauses/TryActionItem.java index 32db4f8d2..c5623ac54 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/clauses/TryActionItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/clauses/TryActionItem.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.action.model.clauses; import com.jpexs.decompiler.flash.SWF; @@ -39,6 +40,7 @@ import com.jpexs.decompiler.graph.Block; import com.jpexs.decompiler.graph.CompilationException; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.GraphTargetVisitorInterface; import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.model.ContinueItem; import com.jpexs.decompiler.graph.model.LocalData; @@ -76,6 +78,26 @@ public class TryActionItem extends ActionItem implements Block { return ret; } + @Override + public void visit(GraphTargetVisitorInterface visitor) { + if (tryCommands != null) { + visitor.visitAll(tryCommands); + } + for (List cc : catchCommands) { + visitor.visitAll(cc); + } + if (finallyCommands != null) { + visitor.visitAll(finallyCommands); + } + } + + @Override + public void visitNoBlock(GraphTargetVisitorInterface visitor) { + + } + + + public TryActionItem(List tryCommands, List catchExceptionNames, List catchExceptionTypes, List> catchCommands, List finallyCommands) { super(null, null, NOPRECEDENCE); this.tryCommands = tryCommands; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/GraphTargetItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/GraphTargetItem.java index 5cff966e0..27b2b1161 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/GraphTargetItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/GraphTargetItem.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.graph; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; @@ -534,12 +535,30 @@ public abstract class GraphTargetItem implements Serializable, Cloneable { }); } + public final void visitRecursivelyNoBlock(GraphTargetVisitorInterface visitor) { + Set visitedItems = new HashSet<>(); + visitNoBlock(new AbstractGraphTargetVisitor() { + @Override + public void visit(GraphTargetItem item) { + if (item != null && !visitedItems.contains(item)) { + visitedItems.add(item); + visitor.visit(item); + item.visitNoBlock(this); + } + } + }); + } + public void visit(GraphTargetVisitorInterface visitor) { if (value != null) { visitor.visit(value); } } + public void visitNoBlock(GraphTargetVisitorInterface visitor) { + visit(visitor); + } + public abstract GraphTargetItem returnType(); @Override diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/DoWhileItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/DoWhileItem.java index 8ca3cbfab..88b43cedc 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/DoWhileItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/DoWhileItem.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.graph.model; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; @@ -69,6 +70,14 @@ public class DoWhileItem extends LoopItem implements Block { } } + @Override + public void visitNoBlock(GraphTargetVisitorInterface visitor) { + if (expression != null) { + visitor.visitAll(expression); + } + } + + public DoWhileItem(GraphSourceItem src, GraphSourceItem lineStartIns, Loop loop, List commands, List expression) { super(src, lineStartIns, loop); this.expression = expression; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/ForItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/ForItem.java index 7b739f1d4..24815aa0b 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/ForItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/ForItem.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.graph.model; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; @@ -75,6 +76,12 @@ public class ForItem extends LoopItem implements Block { } } + @Override + public void visitNoBlock(GraphTargetVisitorInterface visitor) { + visitor.visit(expression); + } + + public ForItem(GraphSourceItem src, GraphSourceItem lineStartIns, Loop loop, List firstCommands, GraphTargetItem expression, List finalCommands, List commands) { super(src, lineStartIns, loop); this.firstCommands = firstCommands; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/GotoItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/GotoItem.java index 05249d319..a2b70eb17 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/GotoItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/GotoItem.java @@ -12,13 +12,15 @@ * 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.graph.model; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.Block; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.GraphTargetVisitorInterface; import com.jpexs.decompiler.graph.TypeItem; import java.util.ArrayList; import java.util.List; @@ -106,4 +108,15 @@ public class GotoItem extends GraphTargetItem implements Block { } return ret; } + + @Override + public void visit(GraphTargetVisitorInterface visitor) { + if (targetCommands != null) { + visitor.visitAll(targetCommands); + } + } + + @Override + public void visitNoBlock(GraphTargetVisitorInterface visitor) { + } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/IfItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/IfItem.java index 7111ebb87..6edd2bef2 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/IfItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/IfItem.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.graph.model; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; @@ -72,6 +73,12 @@ public class IfItem extends GraphTargetItem implements Block { } } + @Override + public void visitNoBlock(GraphTargetVisitorInterface visitor) { + visitor.visit(expression); + } + + public IfItem(GraphSourceItem src, GraphSourceItem lineStartIns, GraphTargetItem expression, List onTrue, List onFalse) { super(src, lineStartIns, NOPRECEDENCE); this.expression = expression; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/SwitchItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/SwitchItem.java index 0202ef4e1..4cd440d6d 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/SwitchItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/SwitchItem.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.graph.model; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; @@ -62,6 +63,13 @@ public class SwitchItem extends LoopItem implements Block { } } + @Override + public void visitNoBlock(GraphTargetVisitorInterface visitor) { + visitor.visit(switchedObject); + visitor.visitAll(caseValues); + } + + public SwitchItem(GraphSourceItem instruction, GraphSourceItem lineStartIns, Loop loop, GraphTargetItem switchedObject, List caseValues, List> caseCommands, List valuesMapping) { super(instruction, lineStartIns, loop); this.switchedObject = switchedObject; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/WhileItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/WhileItem.java index a0ee240ca..c7e2d0bf8 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/WhileItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/WhileItem.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.graph.model; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; @@ -64,6 +65,14 @@ public class WhileItem extends LoopItem implements Block { } } + @Override + public void visitNoBlock(GraphTargetVisitorInterface visitor) { + if (expression != null) { + visitor.visitAll(expression); + } + } + + public WhileItem(GraphSourceItem src, GraphSourceItem lineStartIns, Loop loop, List expression, List commands) { super(src, lineStartIns, loop); this.expression = expression; diff --git a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3AssembledDecompileTest.java b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3AssembledDecompileTest.java index c7d4ce8e0..124102780 100644 --- a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3AssembledDecompileTest.java +++ b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3AssembledDecompileTest.java @@ -16,6 +16,17 @@ public class ActionScript3AssembledDecompileTest extends ActionScript3DecompileT addSwf("assembled", "testdata/as3_assembled/bin/as3_assembled.swf"); } + @Test + public void testDeclareReg() { + decompileMethod("assembled", "testDeclareReg", "var _loc3_:*;\r\n" + + "with(_loc3_ = other)\r\n" + + "{\r\n" + + "\r\n" + + "trace(\"hey\");\r\n" + + "}\r\n", + false); + } + @Test public void testDoubleDup() { decompileMethod("assembled", "testDoubleDup", "var _loc10_:Rectangle = myprop(_loc5_);\r\n" @@ -25,7 +36,8 @@ public class ActionScript3AssembledDecompileTest extends ActionScript3DecompileT @Test public void testDup() { - decompileMethod("assembled", "testDup", "return 1 - (var _loc1_:Number = 1 - _loc1_ / _loc4_) * _loc1_;\r\n", + decompileMethod("assembled", "testDup", "var _loc1_:Number;\r\n" + + "return 1 - (_loc1_ = 1 - _loc1_ / _loc4_) * _loc1_;\r\n", false); } @@ -90,6 +102,7 @@ public class ActionScript3AssembledDecompileTest extends ActionScript3DecompileT @Test public void testSetSlotDup() { decompileMethod("assembled", "testSetSlotDup", "var _loc5_:int = 5;\r\n" + + "var myslot:int;\r\n" + "myname.somemethod(\"okay\",myslot = _loc5_);\r\n" + "myname.start();\r\n", false); @@ -97,7 +110,8 @@ public class ActionScript3AssembledDecompileTest extends ActionScript3DecompileT @Test public void testSetSlotFindProperty() { - decompileMethod("assembled", "testSetSlotFindProperty", "return var myprop:int = 50;\r\n", + decompileMethod("assembled", "testSetSlotFindProperty", "var myprop:int;\r\n" + + "return myprop = 50;\r\n", false); } 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 27b5a53ad..625b722ae 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 @@ -743,7 +743,6 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile @Test public void testInc2() { decompileMethod("classic_air", "testInc2", "var a:* = [1];\r\n" - + "a[this.getInt()]++;\r\n" + "var d:* = a[this.getInt()]++;\r\n" + "var e:* = ++a[this.getInt()];\r\n" + "a[this.getInt()]++;\r\n" @@ -942,7 +941,8 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile public void testNamedAnonFunctions() { decompileMethod("classic_air", "testNamedAnonFunctions", "var test:* = new function():*\r\n" + "{\r\n" - + "return var testFunc:Function = function(param1:*, param2:int, param3:Array):Boolean\r\n" + + "var testFunc:Function;\r\n" + + "return testFunc = function(param1:*, param2:int, param3:Array):Boolean\r\n" + "{\r\n" + "return (param1 as TestClass2).attrib1 == 5;\r\n" + "};\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 8fda2670f..f1379e4b8 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 @@ -734,7 +734,6 @@ public class ActionScript3ClassicDecompileTest extends ActionScript3DecompileTes @Test public void testInc2() { decompileMethod("classic", "testInc2", "var a:* = [1];\r\n" - + "++a[this.getInt()];\r\n" + "var d:* = a[this.getInt()]++;\r\n" + "var e:* = ++a[this.getInt()];\r\n" + "++a[this.getInt()];\r\n" 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 e1d46d64229b82a1c2ab72b7f558dd8ce9608c22..b63178b101fa987928c66b807201eb9067ba4870 100644 GIT binary patch delta 1320 zcmY+Czf&7W6vyA&+tuFQ2}wvoI!-!32=PM*I6(X`HU?wN4;w7wc#><#NMOM+V}}_~ z$fSaXD#?sJ`wwJNrb?gMO)A+1E>dPPv`LpqK-J9L_qw`mBI*)Cim3%470ngq^m+ z=9zp)3bW$;^mVfpo_ux8HC;5$*mihS@^f0ns{D?wBl4mUPPhXMleA^jH5-t zn!+@VgFTBW3eg2LDReE$OP<}^OPT=fS`Q?m0Q&>={-eJ3QBQ4vYyuF22rJ(9_Y0kH zL5B^3XcpUk6YA*Kr~UebU!U^plYZUx>ks8EU(OGHs12f$awRpi!={$b2k3>iTs3EM znej$O?c1IG$9jJuAYK@gKbUoUORpCL!waMGA9HMB=#VFp0OEijn8mBv@?qrthXYm{ zHfFflef#N?@=A5Qwsr2EfO=t<48(lit9h`g1lf+@i54sc%nRf4XEEXDD$56~e8u07 zzs6db)N{3Q*aWNsa>#X(c6HL-AmWAHl3Sw#c_rQg%tw@{zax68MfU>kg-KbnN|Vk3 z+i>t|rd&R>jw){stfSF4wK08(#ZJm2ow6L5UMS>G)<{14wQOXSV5B41(SrMd@WO=r z(^|1N^m-+*ywH+U_J#dSuU7-x3)Au!yL4GP&s9`4r9st^Dj-!!s*s>ky4kGcu5a`+ zS3EUSHTPZLRK{-9VY8jXYTE2U5cR^83Rl(ZQKRiEoI|86()Qci>S|z~P|7lG|BLdC l-^5o~{+QqItyF8h==H0cn*$tyg^uUC_FN0PywFss{{hO#;UfS5 delta 1139 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 diff --git a/libsrc/ffdec_lib/testdata/as3_new/bin/as3_new.air.swf b/libsrc/ffdec_lib/testdata/as3_new/bin/as3_new.air.swf index 69821c54bd873dd5a4efca3c1b6e490988630ff0..eae1d8d81f711b993e9101aac37585565458f067 100644 GIT binary patch delta 16013 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 literal 20796 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