From 16ff10a890dbff4819563c1e3f2b8f30d4b2b01f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=C5=99=C3=ADk?= Date: Mon, 12 Aug 2024 17:50:16 +0200 Subject: [PATCH] Fixed: #2270 AS3 decompilation - unnnecessary local registers assignments as part of expressions when using optimization like dup, setlocal N instead of setlocal N, getlocal N --- CHANGELOG.md | 4 + .../decompiler/flash/abc/AVM2LocalData.java | 9 ++ .../decompiler/flash/abc/avm2/AVM2Code.java | 50 +++++----- .../abc/avm2/AVM2FinalProcessLocalData.java | 11 +- .../flash/abc/avm2/graph/AVM2Graph.java | 94 ++++++++++++++++-- .../flash/abc/avm2/graph/AVM2GraphSource.java | 4 +- .../instructions/InstructionDefinition.java | 5 +- .../localregs/SetLocalTypeIns.java | 5 + .../abc/avm2/model/SetLocalAVM2Item.java | 5 + .../AbstractGraphTargetRecursiveVisitor.java | 44 ++++++++ .../src/com/jpexs/decompiler/graph/Graph.java | 14 ++- .../decompiler/graph/GraphTargetItem.java | 9 +- .../GraphTargetRecursiveVisitorInterface.java | 44 ++++++++ .../graph/GraphTargetVisitorInterface.java | 2 +- .../decompiler/graph/TranslateStack.java | 25 +++++ .../ActionScript3AssembledDecompileTest.java | 13 ++- .../ActionScript3ClassicAirDecompileTest.java | 42 +++++--- .../ActionScript3ClassicDecompileTest.java | 17 +++- ...ipt3CrossCompileSwfToolsDecompileTest.java | 4 +- .../as3_assembled-0/as3_assembled-0.main.abc | Bin 8645 -> 8832 bytes .../as3_assembled-0.main.asasm | 1 + .../tests/TestLocalRegIf.class.asasm | 80 +++++++++++++++ .../tests/TestLocalRegIf.script.asasm | 29 ++++++ .../as3_assembled/bin/as3_assembled.swf | Bin 5166 -> 5264 bytes .../testdata/as3_new/bin/as3_new.air.swf | Bin 29876 -> 29987 bytes .../testdata/as3_new/bin/as3_new.flex.swf | Bin 39527 -> 39717 bytes .../testdata/as3_new/build_air_debug.bat | 4 +- .../testdata/as3_new/build_flex_debug.bat | 2 + libsrc/ffdec_lib/testdata/as3_new/src/Main.as | 1 + .../testdata/as3_new/src/tests/TestHello.as | 2 +- .../as3_new/src/tests/TestOptimization.as | 25 +++++ 31 files changed, 487 insertions(+), 58 deletions(-) create mode 100644 libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/AbstractGraphTargetRecursiveVisitor.java create mode 100644 libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/GraphTargetRecursiveVisitorInterface.java create mode 100644 libsrc/ffdec_lib/testdata/as3_assembled/abc/as3_assembled-0/tests/TestLocalRegIf.class.asasm create mode 100644 libsrc/ffdec_lib/testdata/as3_assembled/abc/as3_assembled-0/tests/TestLocalRegIf.script.asasm create mode 100644 libsrc/ffdec_lib/testdata/as3_new/src/tests/TestOptimization.as diff --git a/CHANGELOG.md b/CHANGELOG.md index 686c22401..77e3b09db 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,9 @@ All notable changes to this project will be documented in this file. - Asking more than once for the same imported (ImportAssets) URL - ABC Explorer problems when index out of bounds (Usually in obfuscated code) - Go to document class for classes with obfuscated name +- [#2270] AS3 decompilation - unnnecessary local registers assignments as part + of expressions when using optimization like `dup, setlocal N` + instead of `setlocal N, getlocal N` ## [21.0.1] - 2024-08-08 ### Added @@ -3487,6 +3490,7 @@ Major version of SWF to XML export changed to 2. [alpha 8]: https://github.com/jindrapetrik/jpexs-decompiler/compare/alpha7...alpha8 [alpha 7]: https://github.com/jindrapetrik/jpexs-decompiler/releases/tag/alpha7 [#2269]: https://www.free-decompiler.com/flash/issues/2269 +[#2270]: https://www.free-decompiler.com/flash/issues/2270 [#2221]: https://www.free-decompiler.com/flash/issues/2221 [#2267]: https://www.free-decompiler.com/flash/issues/2267 [#2268]: https://www.free-decompiler.com/flash/issues/2268 diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/AVM2LocalData.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/AVM2LocalData.java index 7cfa5410d..2f788fd9a 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/AVM2LocalData.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/AVM2LocalData.java @@ -20,6 +20,7 @@ import com.jpexs.decompiler.flash.BaseLocalData; import com.jpexs.decompiler.flash.abc.avm2.AVM2Code; import com.jpexs.decompiler.flash.abc.avm2.AVM2ConstantPool; import com.jpexs.decompiler.flash.abc.avm2.CodeStats; +import com.jpexs.decompiler.flash.abc.avm2.model.SetLocalAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.parser.script.AbcIndexing; import com.jpexs.decompiler.flash.abc.types.ABCException; import com.jpexs.decompiler.flash.abc.types.InstanceInfo; @@ -30,6 +31,7 @@ import com.jpexs.decompiler.graph.DottedChain; import com.jpexs.decompiler.graph.GraphPart; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.ScopeStack; +import com.jpexs.helpers.LinkedIdentityHashSet; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; @@ -221,6 +223,12 @@ public class AVM2LocalData extends BaseLocalData { */ public Set seenMethods = new HashSet<>(); + + /** + * Bottom set locals + */ + public LinkedIdentityHashSet bottomSetLocals = new LinkedIdentityHashSet<>(); + /** * Constructs a new AVM2LocalData */ @@ -287,6 +295,7 @@ public class AVM2LocalData extends BaseLocalData { pushDefaultPart = localData.pushDefaultPart; finallyKinds = localData.finallyKinds; seenMethods = localData.seenMethods; + bottomSetLocals = localData.bottomSetLocals; } /** 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 92f20ed7a..26d4448d2 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 @@ -289,6 +289,7 @@ 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.AbstractGraphTargetRecursiveVisitor; import com.jpexs.decompiler.graph.AbstractGraphTargetVisitor; import com.jpexs.decompiler.graph.Block; import com.jpexs.decompiler.graph.DottedChain; @@ -302,6 +303,7 @@ import com.jpexs.decompiler.graph.TranslateStack; import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.ScriptEndItem; import com.jpexs.helpers.Helper; +import com.jpexs.helpers.LinkedIdentityHashSet; import com.jpexs.helpers.Reference; import com.jpexs.helpers.ReflectionTools; import com.jpexs.helpers.stat.Statistics; @@ -320,6 +322,7 @@ import java.util.Map; import java.util.Objects; import java.util.Queue; import java.util.Set; +import java.util.Stack; import java.util.logging.Level; import java.util.logging.Logger; @@ -1842,11 +1845,12 @@ public class AVM2Code implements Cloneable { * @param fullyQualifiedNames Fully qualified names * @param visited Visited * @param localRegAssigmentIps Local register assignment IPs + * @param bottomStackSetLocals Set locals on bottom of the stack * @return Convert output * @throws ConvertException On convert error * @throws InterruptedException On interrupt */ - public ConvertOutput toSourceOutput(Set switchParts, List callStack, AbcIndexing abcIndex, Map> setLocalPosToGetLocalPos, boolean thisHasDefaultToPrimitive, Reference lineStartItem, String path, GraphPart part, boolean processJumps, boolean isStatic, int scriptIndex, int classIndex, HashMap localRegs, TranslateStack stack, ScopeStack scopeStack, ScopeStack localScopeStack, ABC abc, MethodBody body, int start, int end, HashMap localRegNames, HashMap localRegTypes, List fullyQualifiedNames, boolean[] visited, HashMap localRegAssigmentIps) throws ConvertException, InterruptedException { + public ConvertOutput toSourceOutput(Set switchParts, List callStack, AbcIndexing abcIndex, Map> setLocalPosToGetLocalPos, boolean thisHasDefaultToPrimitive, Reference lineStartItem, String path, GraphPart part, boolean processJumps, boolean isStatic, int scriptIndex, int classIndex, HashMap localRegs, TranslateStack stack, ScopeStack scopeStack, ScopeStack localScopeStack, ABC abc, MethodBody body, int start, int end, HashMap localRegNames, HashMap localRegTypes, List fullyQualifiedNames, boolean[] visited, HashMap localRegAssigmentIps, LinkedIdentityHashSet bottomStackSetLocals) throws ConvertException, InterruptedException { boolean debugMode = DEBUG_MODE; if (debugMode) { System.err.println("OPEN SubSource:" + start + "-" + end + " " + code.get(start).toString() + " to " + code.get(end).toString()); @@ -1901,26 +1905,13 @@ public class AVM2Code implements Cloneable { } } } - /*if ((ins.definition instanceof SetLocalTypeIns) && (ip + 1 <= end)) { // set_local_x,get_local_x.. no other local_x get - - AVM2Instruction insAfter = code.get(ip + 1); - Set usages = setLocalPosToGetLocalPos.containsKey(ip) ? setLocalPosToGetLocalPos.get(ip) : new HashSet<>(); - - if (!(stack.peek().getNotCoercedNoDup() instanceof DuplicateItem) && !AVM2Item.mustStayIntact2(stack.peek()) && usages.size() == 1 && (usages.iterator().next().equals(ip + 1)) && (insAfter.definition instanceof GetLocalTypeIns) && (((GetLocalTypeIns) insAfter.definition).getRegisterId(insAfter) == ((SetLocalTypeIns) ins.definition).getRegisterId(ins))) { - ip += 2; - continue iploop; - } else { - ins.definition.translate(setLocalPosToGetLocalPos, lineStartItem, isStatic, scriptIndex, classIndex, localRegs, stack, scopeStack, ins, output, body, abc, localRegNames, fullyQualifiedNames, path, localRegAssigmentIps, ip, refs, this, thisHasDefaultToPrimitive); - ip++; - continue iploop; - } - } else*/ + /* if (ins.definition instanceof DupIns) { int nextPos; do { AVM2Instruction insAfter = ip + 1 < code.size() ? code.get(ip + 1) : null; if (insAfter == null) { - ins.definition.translate(switchParts, callStack, abcIndex, setLocalPosToGetLocalPos, lineStartItem, isStatic, scriptIndex, classIndex, localRegs, stack, scopeStack, localScopeStack, ins, output, body, abc, localRegNames, localRegTypes, fullyQualifiedNames, path, localRegAssigmentIps, ip, this, thisHasDefaultToPrimitive); + ins.definition.translate(switchParts, callStack, abcIndex, setLocalPosToGetLocalPos, lineStartItem, isStatic, scriptIndex, classIndex, localRegs, stack, scopeStack, localScopeStack, ins, output, body, abc, localRegNames, localRegTypes, fullyQualifiedNames, path, localRegAssigmentIps, ip, this, thisHasDefaultToPrimitive, bottomStackSetLocals); ip++; break; } @@ -1942,14 +1933,16 @@ public class AVM2Code implements Cloneable { //stack.add("(" + stack.pop() + ")||"); isAnd = false; } else { - ins.definition.translate(switchParts, callStack, abcIndex, setLocalPosToGetLocalPos, lineStartItem, isStatic, scriptIndex, classIndex, localRegs, stack, scopeStack, localScopeStack, ins, output, body, abc, localRegNames, localRegTypes, fullyQualifiedNames, path, localRegAssigmentIps, ip, this, thisHasDefaultToPrimitive); + ins.definition.translate(switchParts, callStack, abcIndex, setLocalPosToGetLocalPos, lineStartItem, isStatic, scriptIndex, classIndex, localRegs, stack, scopeStack, localScopeStack, ins, output, body, abc, localRegNames, localRegTypes, fullyQualifiedNames, path, localRegAssigmentIps, ip, this, thisHasDefaultToPrimitive, bottomStackSetLocals); ip++; break; //throw new ConvertException("Unknown pattern after DUP:" + insComparsion.toString()); } } while (ins.definition instanceof DupIns); - } else if ((ins.definition instanceof ReturnValueIns) || (ins.definition instanceof ReturnVoidIns) || (ins.definition instanceof ThrowIns)) { - ins.definition.translate(switchParts, callStack, abcIndex, setLocalPosToGetLocalPos, lineStartItem, isStatic, scriptIndex, classIndex, localRegs, stack, scopeStack, localScopeStack, ins, output, body, abc, localRegNames, localRegTypes, fullyQualifiedNames, path, localRegAssigmentIps, ip, this, thisHasDefaultToPrimitive); + } else + */ + if ((ins.definition instanceof ReturnValueIns) || (ins.definition instanceof ReturnVoidIns) || (ins.definition instanceof ThrowIns)) { + ins.definition.translate(switchParts, callStack, abcIndex, setLocalPosToGetLocalPos, lineStartItem, isStatic, scriptIndex, classIndex, localRegs, stack, scopeStack, localScopeStack, ins, output, body, abc, localRegNames, localRegTypes, fullyQualifiedNames, path, localRegAssigmentIps, ip, this, thisHasDefaultToPrimitive, bottomStackSetLocals); //ip = end + 1; break; } else if (ins.definition instanceof NewFunctionIns) { @@ -1985,13 +1978,18 @@ public class AVM2Code implements Cloneable { } } // What to do when hasDup is false? - ins.definition.translate(switchParts, callStack, abcIndex, setLocalPosToGetLocalPos, lineStartItem, isStatic, scriptIndex, classIndex, localRegs, stack, scopeStack, localScopeStack, ins, output, body, abc, localRegNames, localRegTypes, fullyQualifiedNames, path, localRegAssigmentIps, ip, this, thisHasDefaultToPrimitive); + ins.definition.translate(switchParts, callStack, abcIndex, setLocalPosToGetLocalPos, lineStartItem, isStatic, scriptIndex, classIndex, localRegs, stack, scopeStack, localScopeStack, ins, output, body, abc, localRegNames, localRegTypes, fullyQualifiedNames, path, localRegAssigmentIps, ip, this, thisHasDefaultToPrimitive, bottomStackSetLocals); NewFunctionAVM2Item nft = (NewFunctionAVM2Item) stack.peek(); nft.functionName = functionName; ip++; } else { - try { - ins.definition.translate(switchParts, callStack, abcIndex, setLocalPosToGetLocalPos, lineStartItem, isStatic, scriptIndex, classIndex, localRegs, stack, scopeStack, localScopeStack, ins, output, body, abc, localRegNames, localRegTypes, fullyQualifiedNames, path, localRegAssigmentIps, ip, this, thisHasDefaultToPrimitive); + try { + ins.definition.translate(switchParts, callStack, abcIndex, setLocalPosToGetLocalPos, lineStartItem, isStatic, scriptIndex, classIndex, localRegs, stack, scopeStack, localScopeStack, ins, output, body, abc, localRegNames, localRegTypes, fullyQualifiedNames, path, localRegAssigmentIps, ip, this, thisHasDefaultToPrimitive, bottomStackSetLocals); + + + if (stack.size() == 1 && (stack.peek() instanceof SetLocalAVM2Item)) { + bottomStackSetLocals.add((SetLocalAVM2Item) stack.peek()); + } } catch (RuntimeException re) { /*String last=""; int len=5; @@ -2281,9 +2279,9 @@ public class AVM2Code implements Cloneable { break; }*/ Reference hasPrevReference = new Reference<>(false); - value.visitRecursivelyNoBlock(new AbstractGraphTargetVisitor() { + value.visitRecursivelyNoBlock(new AbstractGraphTargetRecursiveVisitor() { @Override - public void visit(GraphTargetItem subItem) { + public void visit(GraphTargetItem subItem, Stack parentStack) { Multiname propertyMultiName; String propertyName; if (subItem instanceof GetPropertyAVM2Item) { @@ -2343,9 +2341,9 @@ public class AVM2Code implements Cloneable { GraphTargetItem currentItem = items.get(i); List itemsOnLine = new ArrayList<>(); itemsOnLine.add(currentItem); - currentItem.visitRecursivelyNoBlock(new AbstractGraphTargetVisitor() { + currentItem.visitRecursivelyNoBlock(new AbstractGraphTargetRecursiveVisitor() { @Override - public void visit(GraphTargetItem item) { + public void visit(GraphTargetItem item, Stack parentStack) { itemsOnLine.add(item); } }); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/AVM2FinalProcessLocalData.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/AVM2FinalProcessLocalData.java index 5c1396f07..c44eb1d31 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/AVM2FinalProcessLocalData.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/AVM2FinalProcessLocalData.java @@ -17,7 +17,9 @@ package com.jpexs.decompiler.flash.abc.avm2; import com.jpexs.decompiler.flash.FinalProcessLocalData; +import com.jpexs.decompiler.flash.abc.avm2.model.SetLocalAVM2Item; import com.jpexs.decompiler.graph.Loop; +import com.jpexs.helpers.LinkedIdentityHashSet; import java.util.HashMap; import java.util.HashSet; import java.util.List; @@ -40,6 +42,11 @@ public class AVM2FinalProcessLocalData extends FinalProcessLocalData { * Set local position to get local position mapping. */ public Map> setLocalPosToGetLocalPos = new HashMap<>(); + + /** + * Bottom set locals + */ + public LinkedIdentityHashSet bottomSetLocals = new LinkedIdentityHashSet<>(); /** * Constructs AVM2 final process local data. @@ -49,11 +56,13 @@ public class AVM2FinalProcessLocalData extends FinalProcessLocalData { * mapping * @param setLocalPosToGetLocalPos Set local position to get local position * mapping + * @param bottomSetLocals Bottom set locals */ - public AVM2FinalProcessLocalData(List loops, HashMap localRegNames, Map> setLocalPosToGetLocalPos) { + public AVM2FinalProcessLocalData(List loops, HashMap localRegNames, Map> setLocalPosToGetLocalPos, LinkedIdentityHashSet bottomSetLocals) { super(loops); this.localRegNames = localRegNames; this.setLocalPosToGetLocalPos = setLocalPosToGetLocalPos; + this.bottomSetLocals = bottomSetLocals; } /** diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/graph/AVM2Graph.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/graph/AVM2Graph.java index 611771194..fd506d059 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/graph/AVM2Graph.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/graph/AVM2Graph.java @@ -48,7 +48,9 @@ import com.jpexs.decompiler.flash.abc.avm2.instructions.stack.PushScopeIns; import com.jpexs.decompiler.flash.abc.avm2.instructions.types.CoerceAIns; import com.jpexs.decompiler.flash.abc.avm2.instructions.types.ConvertIIns; import com.jpexs.decompiler.flash.abc.avm2.model.AVM2Item; +import com.jpexs.decompiler.flash.abc.avm2.model.CoerceAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.ConstructAVM2Item; +import com.jpexs.decompiler.flash.abc.avm2.model.ConvertAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.FilteredCheckAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.FindPropertyAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.FullMultinameAVM2Item; @@ -81,6 +83,7 @@ import com.jpexs.decompiler.flash.abc.avm2.model.operations.StrictEqAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.parser.script.AbcIndexing; import com.jpexs.decompiler.flash.abc.types.ABCException; import com.jpexs.decompiler.flash.abc.types.MethodBody; +import com.jpexs.decompiler.graph.AbstractGraphTargetRecursiveVisitor; import com.jpexs.decompiler.graph.AbstractGraphTargetVisitor; import com.jpexs.decompiler.graph.DottedChain; import com.jpexs.decompiler.graph.Graph; @@ -122,6 +125,7 @@ import java.util.List; import java.util.Map; import java.util.Objects; import java.util.Set; +import java.util.Stack; import java.util.TreeMap; import java.util.TreeSet; import java.util.logging.Level; @@ -2641,6 +2645,51 @@ public class AVM2Graph extends Graph { } } + + AVM2FinalProcessLocalData adata = (AVM2FinalProcessLocalData) localData; + //if(false) + if (!adata.bottomSetLocals.isEmpty()) { + for (int i = 0; i < list.size(); i++) { + + if (list.get(i) instanceof LoopItem) { + continue; + } + if (list.get(i) instanceof WithEndAVM2Item) { + continue; + } + + Reference foundSetLoc = new Reference<>(null); + list.get(i).visitRecursivelyNoBlock(new AbstractGraphTargetRecursiveVisitor() { + @Override + public void visit(GraphTargetItem item, Stack parentStack) { + + if (item instanceof SetLocalAVM2Item) { + if (adata.bottomSetLocals.contains((SetLocalAVM2Item) item)) { + int s = parentStack.size() - 1; + if (parentStack.get(s) instanceof CoerceAVM2Item) { + s--; + } else if (parentStack.get(s) instanceof ConvertAVM2Item) { + s--; + } + if (s >= 0) { + GraphTargetItem parent = parentStack.get(s); + if (!(parent instanceof SetTypeAVM2Item)) { //not a chained assignment + foundSetLoc.setVal((SetLocalAVM2Item) item); + } + } + } + } + } + }); + if (foundSetLoc.getVal() != null) { + SetLocalAVM2Item setLoc = foundSetLoc.getVal(); + list.add(i, setLoc.clone()); + setLoc.hideValue = true; + i++; + } + } + } + /* convert this situation: @@ -2656,13 +2705,13 @@ public class AVM2Graph extends Graph { It's TestSwapAssignment assembled test case. */ - for (int i = 0; i < list.size(); i++) { + /*for (int i = 0; i < list.size(); i++) { GraphTargetItem item = list.get(i); Map> setRegisters = new HashMap<>(); - item.visitRecursivelyNoBlock(new AbstractGraphTargetVisitor() { + item.visitRecursivelyNoBlock(new AbstractGraphTargetRecursiveVisitor() { @Override - public void visit(GraphTargetItem item) { + public void visit(GraphTargetItem item, GraphTargetItem parent) { if (item instanceof SetLocalAVM2Item) { SetLocalAVM2Item setLoc = (SetLocalAVM2Item) item; if (setLoc.causedByDup) { @@ -2770,15 +2819,15 @@ public class AVM2Graph extends Graph { }); i = newI.getVal(); } - + */ //Handle for loops at the end: super.finalProcess(list, level, localData, path); } @Override protected FinalProcessLocalData getFinalData(BaseLocalData localData, List loops, List throwStates) { - FinalProcessLocalData finalProcess = new AVM2FinalProcessLocalData(loops, ((AVM2LocalData) localData).localRegNames, ((AVM2LocalData) localData).setLocalPosToGetLocalPos); - finalProcess.registerUsage = ((AVM2LocalData) localData).setLocalPosToGetLocalPos; + FinalProcessLocalData finalProcess = new AVM2FinalProcessLocalData(loops, ((AVM2LocalData) localData).localRegNames, ((AVM2LocalData) localData).setLocalPosToGetLocalPos, ((AVM2LocalData) localData).bottomSetLocals); + finalProcess.registerUsage = ((AVM2LocalData) localData).setLocalPosToGetLocalPos; return finalProcess; } @@ -3081,4 +3130,37 @@ public class AVM2Graph extends Graph { protected SecondPassData prepareSecondPass(List list) { return new SecondPassData(); } + + @Override + protected GraphTargetItem getIfExpression(BaseLocalData localData, TranslateStack stack, List output) { + GraphTargetItem result = stack.pop(); + + /* + Fixes this case: + + var i:int; + if ((i = 5) > 2 && i < 10) { + ... + } + + when instead + setlocal x + getlocal x + + there is: + dup + setlocal x + + */ + + if (stack.getMark("firstSetLocal") != null) { + SetLocalAVM2Item setLocal = (SetLocalAVM2Item) stack.getMark("firstSetLocal"); + if (setLocal.directlyCausedByDup) { + output.add(setLocal.clone()); + setLocal.hideValue = true; + } + } + + return result; + } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/graph/AVM2GraphSource.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/graph/AVM2GraphSource.java index f5f790aa7..569e3ec8a 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/graph/AVM2GraphSource.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/graph/AVM2GraphSource.java @@ -22,6 +22,7 @@ import com.jpexs.decompiler.flash.abc.AVM2LocalData; import com.jpexs.decompiler.flash.abc.avm2.AVM2Code; import com.jpexs.decompiler.flash.abc.avm2.ConvertOutput; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; +import com.jpexs.decompiler.flash.abc.avm2.model.SetLocalAVM2Item; import com.jpexs.decompiler.flash.abc.types.MethodBody; import com.jpexs.decompiler.graph.DottedChain; import com.jpexs.decompiler.graph.Graph; @@ -30,6 +31,7 @@ import com.jpexs.decompiler.graph.GraphSource; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.TranslateStack; +import com.jpexs.helpers.LinkedIdentityHashSet; import com.jpexs.helpers.Reference; import java.util.ArrayList; import java.util.HashMap; @@ -203,7 +205,7 @@ public class AVM2GraphSource extends GraphSource { public List translatePart(Graph graph, GraphPart part, BaseLocalData localData, TranslateStack stack, int start, int end, int staticOperation, String path) throws InterruptedException { List ret = new ArrayList<>(); Reference lineStartItem = new Reference<>(localData.lineStartInstruction); - ConvertOutput co = code.toSourceOutput(localData.allSwitchParts, ((AVM2LocalData) localData).callStack, ((AVM2LocalData) localData).abcIndex, ((AVM2LocalData) localData).setLocalPosToGetLocalPos, ((AVM2LocalData) localData).thisHasDefaultToPrimitive, lineStartItem, path, part, false, isStatic, scriptIndex, classIndex, localRegs, stack, ((AVM2LocalData) localData).scopeStack, ((AVM2LocalData) localData).localScopeStack, abc, body, start, end, localRegNames, ((AVM2LocalData) localData).localRegTypes, fullyQualifiedNames, new boolean[size()], localRegAssigmentIps); + ConvertOutput co = code.toSourceOutput(localData.allSwitchParts, ((AVM2LocalData) localData).callStack, ((AVM2LocalData) localData).abcIndex, ((AVM2LocalData) localData).setLocalPosToGetLocalPos, ((AVM2LocalData) localData).thisHasDefaultToPrimitive, lineStartItem, path, part, false, isStatic, scriptIndex, classIndex, localRegs, stack, ((AVM2LocalData) localData).scopeStack, ((AVM2LocalData) localData).localScopeStack, abc, body, start, end, localRegNames, ((AVM2LocalData) localData).localRegTypes, fullyQualifiedNames, new boolean[size()], localRegAssigmentIps, ((AVM2LocalData) localData).bottomSetLocals); localData.lineStartInstruction = lineStartItem.getVal(); ret.addAll(co.output); return ret; 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 88484e064..3f9b7c320 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 @@ -62,6 +62,7 @@ import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.ScopeStack; import com.jpexs.decompiler.graph.TranslateStack; import com.jpexs.decompiler.graph.model.DuplicateItem; +import com.jpexs.helpers.LinkedIdentityHashSet; import com.jpexs.helpers.Reference; import java.io.Serializable; import java.util.ArrayList; @@ -290,9 +291,10 @@ public abstract class InstructionDefinition implements Serializable { * @param ip IP * @param code AVM2 code * @param thisHasDefaultToPrimitive This has default to primitive + * @param bottomSetLocals Bottom set locals * @throws InterruptedException On interrupt */ - public void translate(Set switchParts, List callStack, AbcIndexing abcIndex, Map> setLocalPosToGetLocalPos, Reference lineStartItem, boolean isStatic, int scriptIndex, int classIndex, HashMap localRegs, TranslateStack stack, ScopeStack scopeStack, ScopeStack localScopeStack, AVM2Instruction ins, List output, MethodBody body, ABC abc, HashMap localRegNames, HashMap localRegTypes, List fullyQualifiedNames, String path, HashMap localRegsAssignmentIps, int ip, AVM2Code code, boolean thisHasDefaultToPrimitive) throws InterruptedException { + public void translate(Set switchParts, List callStack, AbcIndexing abcIndex, Map> setLocalPosToGetLocalPos, Reference lineStartItem, boolean isStatic, int scriptIndex, int classIndex, HashMap localRegs, TranslateStack stack, ScopeStack scopeStack, ScopeStack localScopeStack, AVM2Instruction ins, List output, MethodBody body, ABC abc, HashMap localRegNames, HashMap localRegTypes, List fullyQualifiedNames, String path, HashMap localRegsAssignmentIps, int ip, AVM2Code code, boolean thisHasDefaultToPrimitive, LinkedIdentityHashSet bottomSetLocals) throws InterruptedException { AVM2LocalData localData = new AVM2LocalData(); localData.allSwitchParts = switchParts; localData.isStatic = isStatic; @@ -314,6 +316,7 @@ public abstract class InstructionDefinition implements Serializable { localData.code = code; localData.thisHasDefaultToPrimitive = thisHasDefaultToPrimitive; localData.setLocalPosToGetLocalPos = setLocalPosToGetLocalPos; + localData.bottomSetLocals = bottomSetLocals; translate(localData, stack, ins, output, path); lineStartItem.setVal(localData.lineStartInstruction); } 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 fc0dd9cf8..8893bb86e 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 @@ -36,6 +36,7 @@ import com.jpexs.decompiler.flash.abc.avm2.model.operations.PreIncrementAVM2Item import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.TranslateStack; import com.jpexs.decompiler.graph.model.CompoundableBinaryOp; +import com.jpexs.decompiler.graph.model.DuplicateItem; import com.jpexs.decompiler.graph.model.PopItem; import java.util.List; @@ -145,6 +146,10 @@ public abstract class SetLocalTypeIns extends InstructionDefinition implements S } } } + + if (value instanceof DuplicateItem) { + result.directlyCausedByDup = true; + } SetTypeIns.handleResult(value, stack, output, localData, result, regId, value.returnType()); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/SetLocalAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/SetLocalAVM2Item.java index ebec39c65..da3f628db 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/SetLocalAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/SetLocalAVM2Item.java @@ -72,6 +72,11 @@ public class SetLocalAVM2Item extends AVM2Item implements SetTypeAVM2Item, Assig * Caused by duplicate */ public boolean causedByDup = false; + + /** + * Directly caused by duplicate + */ + public boolean directlyCausedByDup = false; @Override public DeclarationAVM2Item getDeclaration() { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/AbstractGraphTargetRecursiveVisitor.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/AbstractGraphTargetRecursiveVisitor.java new file mode 100644 index 000000000..479d380a9 --- /dev/null +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/AbstractGraphTargetRecursiveVisitor.java @@ -0,0 +1,44 @@ +/* + * Copyright (C) 2010-2024 JPEXS, All rights reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. + */ +package com.jpexs.decompiler.graph; + +import java.util.Collection; +import java.util.Stack; + +/** + * Abstract graph target recursive visitor. + * + * @author JPEXS + */ +public abstract class AbstractGraphTargetRecursiveVisitor implements GraphTargetRecursiveVisitorInterface { + + /** + * Constructs new AbstractGraphTargetVisitor + */ + public AbstractGraphTargetRecursiveVisitor() { + } + + @Override + public abstract void visit(GraphTargetItem item, Stack parentStack); + + @Override + public final void visitAll(Collection items, Stack parentStack) { + for (GraphTargetItem item : items) { + visit(item, parentStack); + } + } +} diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/Graph.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/Graph.java index 9c17751b8..a0532d714 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/Graph.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/Graph.java @@ -2715,6 +2715,18 @@ public class Graph { return printGraph(foundGotos, partCodes, partCodePos, visited, localData, stack, allParts, parent, part, stopPart, stopPartKind, loops, throwStates, null, staticOperation, path, 0); } + /** + * Gets if expression from stack. + * Can be overriden for custom handling + * @param localData Local data + * @param stack Stack + * @param output Output + * @return Expression + */ + protected GraphTargetItem getIfExpression(BaseLocalData localData, TranslateStack stack, List output) { + return stack.pop(); + } + /** * Walks graph parts and converts them to target items. * @@ -3254,7 +3266,7 @@ public class Graph { } //else GraphPart nextOnePart = null; if (getNextParts(localData, part).size() == 2 && !partIsSwitch(part)) { - GraphTargetItem expr = stack.pop(); + GraphTargetItem expr = getIfExpression(localData, stack, currentRet); if (nextOnePart == null) { 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 20318096b..73764e1a7 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/GraphTargetItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/GraphTargetItem.java @@ -48,6 +48,7 @@ import java.util.Arrays; import java.util.HashSet; import java.util.List; import java.util.Set; +import java.util.Stack; /** * Graph target item - an item in high level representation of the code. @@ -963,15 +964,19 @@ public abstract class GraphTargetItem implements Serializable, Cloneable { * * @param visitor Visitor */ - public final void visitRecursivelyNoBlock(GraphTargetVisitorInterface visitor) { + public final void visitRecursivelyNoBlock(GraphTargetRecursiveVisitorInterface visitor) { Set visitedItems = new HashSet<>(); + Stack parentStack = new Stack<>(); + parentStack.add(this); visitNoBlock(new AbstractGraphTargetVisitor() { @Override public void visit(GraphTargetItem item) { if (item != null && !visitedItems.contains(item)) { visitedItems.add(item); - visitor.visit(item); + visitor.visit(item, parentStack); + parentStack.push(item); item.visitNoBlock(this); + parentStack.pop(); } } }); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/GraphTargetRecursiveVisitorInterface.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/GraphTargetRecursiveVisitorInterface.java new file mode 100644 index 000000000..a64fbbf0c --- /dev/null +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/GraphTargetRecursiveVisitorInterface.java @@ -0,0 +1,44 @@ +/* + * Copyright (C) 2010-2024 JPEXS, All rights reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. + */ +package com.jpexs.decompiler.graph; + +import java.util.Collection; +import java.util.Stack; + +/** + * Recursive graph target visitor interface. + * + * @author JPEXS + */ +public interface GraphTargetRecursiveVisitorInterface { + + /** + * Visits a graph target item. + * + * @param item Graph target item + * @param parentStack Stack of parents + */ + public void visit(GraphTargetItem item, Stack parentStack); + + /** + * Visits all graph target items. + * + * @param items Collection of graph target items + * @param parentStack Stack of parents + */ + public void visitAll(Collection items, Stack parentStack); +} diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/GraphTargetVisitorInterface.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/GraphTargetVisitorInterface.java index f32669e22..559f999fb 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/GraphTargetVisitorInterface.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/GraphTargetVisitorInterface.java @@ -19,7 +19,7 @@ package com.jpexs.decompiler.graph; import java.util.Collection; /** - * Graph source visitor interface. + * Graph target visitor interface. * * @author JPEXS */ diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/TranslateStack.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/TranslateStack.java index 9b0bc1b8d..9c6b0d8a4 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/TranslateStack.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/TranslateStack.java @@ -17,6 +17,10 @@ package com.jpexs.decompiler.graph; import com.jpexs.decompiler.graph.model.PopItem; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; import java.util.Stack; import java.util.logging.Level; import java.util.logging.Logger; @@ -38,6 +42,27 @@ public class TranslateStack extends Stack { */ private final String path; + private Map marks = new HashMap<>(); + + + /** + * Sets mark. + * @param name Name + * @param value Value + */ + public void setMark(String name, GraphTargetItem value) { + marks.put(name, value); + } + + /** + * Gets mark. + * @param name Name + * @return Value + */ + public GraphTargetItem getMark(String name) { + return marks.get(name); + } + /** * Simplifies all items in the stack. */ 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 919a3868c..484a45ddf 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 @@ -100,7 +100,8 @@ public class ActionScript3AssembledDecompileTest extends ActionScript3DecompileT public void testDupAssignment() { decompileMethod("assembled", "testDupAssignment", "var _loc1_:int = 0;\r\n" + "var _loc2_:int = 10;\r\n" - + "if(_loc1_ = _loc2_)\r\n" + + "_loc1_ = _loc2_;\r\n" + + "if(_loc1_)\r\n" + "{\r\n" + "trace(_loc2_);\r\n" + "}\r\n", @@ -154,6 +155,16 @@ public class ActionScript3AssembledDecompileTest extends ActionScript3DecompileT false); } + @Test + public void testLocalRegIf() { + decompileMethod("assembled", "testLocalRegIf", "var _loc1_:int = 8;\r\n" + + "if(_loc1_ > 5 && _loc1_ < 10)\r\n" + + "{\r\n" + + "trace(\"I\");\r\n" + + "}\r\n", + false); + } + @Test public void testMutatingSwitch() { decompileMethod("assembled", "testMutatingSwitch", "switch(this.k)\r\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 1253e43c3..5ebfefddc 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 @@ -280,8 +280,8 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile + "var dict:Dictionary = new Dictionary();\r\n" + "s = \"a\";\r\n" + "i = int(s);\r\n" - + "var j:int;\r\n" - + "s = String(j = n);\r\n" + + "var j:int = n;\r\n" + + "s = String(j);\r\n" + "s = ns;\r\n" + "s = String(i == 4 ? \"\" : i);\r\n" + "s = i == 4 ? \"\" : String(i);\r\n" @@ -296,8 +296,8 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile + "2:\"C\"\r\n" + "};\r\n" + "i = int(s.charAt(10));\r\n" - + "var v:Vector.;\r\n" - + "(v = new Vector.()).push(\"A\");\r\n" + + "var v:Vector. = new Vector.();\r\n" + + "v.push(\"A\");\r\n" + "v.push(\"B\");\r\n" + "i = int(v[0]);\r\n" + "s = v[1];\r\n" @@ -321,11 +321,11 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile + "trace(\"c\");\r\n" + "i = int(x.item[i].@id);\r\n" + "dict[String(x.item[i].@id)] = \"Hello\";\r\n" - + "var lc:LocalClass;\r\n" - + "i = (lc = new LocalClass()).attr;\r\n" + + "var lc:LocalClass = new LocalClass();\r\n" + + "i = lc.attr;\r\n" + "s = String(lc.attr);\r\n" - + "var f:Function;\r\n" - + "if(Boolean(f = this.f))\r\n" + + "var f:Function = this.f;\r\n" + + "if(Boolean(f))\r\n" + "{\r\n" + "trace(\"OK\");\r\n" + "}\r\n" @@ -537,7 +537,8 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile decompileMethod("classic_air", "testExpressions", "var arr:Array = null;\r\n" + "var i:int = 5;\r\n" + "var j:int = 5;\r\n" - + "if((i = i /= 2) == 1 || i == 2)\r\n" + + "i = i /= 2;\r\n" + + "if(i == 1 || i == 2)\r\n" + "{\r\n" + "arguments.concat(i);\r\n" + "}\r\n" @@ -920,7 +921,8 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile + "var b:int = 6;\r\n" + "for(i = 0; i < len; k = myXML.book.(@isbn == \"12345\"))\r\n" + "{\r\n" - + "if((c = 1) == 2)\r\n" + + "c = 1;\r\n" + + "if(c == 2)\r\n" + "{\r\n" + "trace(\"A\");\r\n" + "}\r\n" @@ -1667,6 +1669,20 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile false); } + @Test + public void testOptimization() { + decompileMethod("classic_air", "testOptimization", "var f:int = 0;\r\n" + + "var g:* = 0;\r\n" + + "var h:int = 0;\r\n" + + "var a:int = 1;\r\n" + + "var b:int = 2;\r\n" + + "var c:int = 3;\r\n" + + "var d:int = 4;\r\n" + + "var e:int = d + 5;\r\n" + + "var i:int = h = g = f;\r\n", + false); + } + @Test public void testParamNames() { decompileMethod("classic_air", "testParamNames", "return firstp + secondp + thirdp;\r\n", @@ -2327,12 +2343,12 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile @Test public void testXml() { decompileMethod("classic_air", "testXml", "var name:String = \"ahoj\";\r\n" - + "var myXML:XML;\r\n" - + "var k:* = (myXML = \r\n" + + "var myXML:XML = \r\n" + "\r\n" + "{name}\r\n" + "\r\n" - + ").@id;\r\n" + + ";\r\n" + + "var k:* = myXML.@id;\r\n" + "var all:String = myXML.@*.toXMLString();\r\n" + "k = myXML.book;\r\n" + "k = myXML.book.(@isbn == \"12345\");\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 646e40a5a..d36ba7a28 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 @@ -539,7 +539,8 @@ public class ActionScript3ClassicDecompileTest extends ActionScript3DecompileTes decompileMethod("classic", "testExpressions", "var arr:Array = null;\r\n" + "var i:int = 5;\r\n" + "var j:int = 5;\r\n" - + "if((i = i = i / 2) == 1 || i == 2)\r\n" + + "i = i = i / 2;\r\n" + + "if(i == 1 || i == 2)\r\n" + "{\r\n" + "arguments.concat(i);\r\n" + "}\r\n" @@ -1654,6 +1655,20 @@ public class ActionScript3ClassicDecompileTest extends ActionScript3DecompileTes false); } + @Test + public void testOptimization() { + decompileMethod("classic", "testOptimization", "var f:int = 0;\r\n" + + "var g:int = 0;\r\n" + + "var h:int = 0;\r\n" + + "var a:int = 1;\r\n" + + "var b:int = 2;\r\n" + + "var c:int = 3;\r\n" + + "var d:int = 4;\r\n" + + "var e:int = d + 5;\r\n" + + "var i:int = h = g = f;\r\n", + false); + } + @Test public void testParamNames() { decompileMethod("classic", "testParamNames", "return firstp + secondp + thirdp;\r\n", 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 7416a5465..2722d7350 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 @@ -522,8 +522,8 @@ public class ActionScript3CrossCompileSwfToolsDecompileTest extends ActionScript public void testTryCatchWith() { decompileMethod("swftools", "testTryCatchWith", "var _loc1_:* = new MyTest();\r\n" + "trace(\"before with\");\r\n" - + "var _loc2_:*;\r\n" - + "with(_loc2_ = _loc1_)\r\n" + + "var _loc2_:* = _loc1_;\r\n" + + "with(_loc2_)\r\n" + "{\r\n" + "trace(\"before try\");\r\n" + "try\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 486f97e2af87736c585c0ddf91618162a9042e47..b39578ba0911f4b622bcb33e4105a3852e2d6e8a 100644 GIT binary patch delta 2806 zcmZ9NS#VR=8G!%)+Xhm&JSvPwT7Kek z(|Q3L_v;qD(|Q$soj!|xR(}OG5Z|4eO}F@3{f@x7z-(X+1LraDsxbL}j{dHIgQsjY z{GiRjuh^_LY0arkX|2|mtRhCgfck5wzmEDv)IUP~4(c|&+t=au`V0I{zm5OeHq`F_ z4f=nJ{@-E18z=}k121Ess|razv!bRDhtKVF6?j}L+nY3{tD~oFV9&Ivp{QsrL;F_q zfxHmT@cnsrhO`w(R7Dz^2luW*J9dAK6g?Eh@9%}&7qXk;Hi{o2^ORF;q_#^)ZEp$v zJ*2HF&ATbkL2)nNY_C@69;CLF6jKy6imNHMQS7Gn z)zqTX{M$(L+vspR+elcUh0PH56%yvL7FANVisp%i@*W^v^Qow_g5pt%$0(kpcv(ER zP<&qu9|*Z6Dmd}n-Q*5 zQ>ms=%|*5AqLNG$ad zwgHw(TvkkG*;c5KT&WYb5yBE9<%I2mT8VWb!p5OqVuPEo^{`T6Q<$(xXpy)&Lf90n zk=R~ISPHr%b{7&h0=*LZY6#m6gA#|T37dfR65~q=!X_o&F^k%}hzKJcM0-yFuJ43V zR6T^nVXO2^R1lVg9TIm&3CqAPiOEvJw!?(PNf%-3V7J8VGQ!4SpTy}B!nVNyi3h6) zOT!U~M{5bo!U>5l8H6R^v?loszu^i;20KtYj!1??D<@FwNGEJWZ3}FNaY#c3_QHNR z49DRVl=6SNDrSQ!Sb|ul0u7;81#1-+tH7eDt6+;^xe9qJFrOA@w-sPMz8su(fU(YG zN2Yx~vpn8O`T!J#Fk8WVY^*D%?viSiAX-E7u_;KBSaK|u+!jmjh$XkjlB;9MH+Y+8 zjlcW*csB}Ht8i7EBEvP5zWX`%H2GFWQY(ecp0jb&c7i|iOwqSZeu=LutZnF>piVac zOVhM<*<30-VOjV-t;PG5dTMq3_~M1gQ7Ch`ME-ZoxYzl^!dCy9_!{UFMt`oryQc9V zC*Jz{*63YKYvDP%5ShXFCX#H8k3t{dZa@mfxrmRUx2mj7c=rRgS%gn;e<7>QIUrVo=e3W0+Pq^d^KQ^CV#zdZxE$6zg+~0SkC@OZNP|OrSP*7wN zu!nE*mFM3y-OppfZe&CJg0H^h3dRu)G1V-f6Pk0AxMVsW;7@$f?Pr9?xV_g76Pi<` zW#brKBUEWEH0e+QoKpV&;)OF$9GTdJMVOmq1V)({`p_ATSs1kDGT$*XPbVBkHq3YU zBehMvh}Ba#)|hGR-3aGra7^TvI;WVxd~6}M9l}q;F|pLb(9FN}mj(6!0(9guer9Go zoG37|5&kcK)#m-8u5)y;(;mtBXm-6;@_!fg!;*ho5fe)+4m%cyF);-D0eW%`eQGvzCgC))l{^uM;>Y|#pb|gf4+2f}vT3}){}EV@ zP24Cd6Mr=FEtpNXjcg4cENZSh(23R0UCg;dluqL0b8nQRRC$~Oaz(^?{MlR&XQeIY5plFcFt=Z>hjhTec$VU0s zCDj{7!(%;>!5#=Fw??9W#7L^X23go`0DKn-hchjq>d=9Esd^JxXjEXt`L`D@s;kAT zGnLEwp_%n`!f#|tc|~bmW!*xmZY&nErDAg3xU143a>Zq?p217784N+ZjYy~8k< z5Eo2lRY<#)wnS2^(w5MFQd>lYnOub%X26j|z{oD+e<>Zt3@;CEwSQo$k0*+ZYze;@ ztSPyN!Tavp;!PdlYtS0M!d2+XH#Yi!&4*7l%t;jc0S2-#0U#O_Uf}LlK7m1LDRUx&QzG delta 2615 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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 ed73ce35a85a506c15501e306d78e0a493bcb28d..831fbc68a1e4aafef4cf231dd1de4e9b60d66e05 100644 GIT binary patch literal 29987 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 literal 29876 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 XqJ=5PsY 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 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 ca08b6cb48bac48dba27b44d82cdcfb28d4391ed..d6e060c7c4c582818d852e1b362d2a77b86e2fb7 100644 GIT binary patch delta 39679 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
  • &~;8==A$pCwmc-A=B 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 delta 39437 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 buildlog.%COMPILERKIND%.txt 2>&1 -rem -warnings=false \ No newline at end of file +rem set COMPILERKIND=air.optimize +rem call c:\air\bin\mxmlc.bat -compiler.optimize -output bin/%SWFNAME%.%COMPILERKIND%.swf src/Main.as 1> buildlog.%COMPILERKIND%.txt 2>&1 +rem -warnings=false diff --git a/libsrc/ffdec_lib/testdata/as3_new/build_flex_debug.bat b/libsrc/ffdec_lib/testdata/as3_new/build_flex_debug.bat index 89088bc66..aac51a318 100644 --- a/libsrc/ffdec_lib/testdata/as3_new/build_flex_debug.bat +++ b/libsrc/ffdec_lib/testdata/as3_new/build_flex_debug.bat @@ -2,4 +2,6 @@ set COMPILERKIND=flex set SWFNAME=as3_new call c:\flex\bin\mxmlc.bat -debug=true -output bin/%SWFNAME%.%COMPILERKIND%.swf src/Main.as 1> buildlog.%COMPILERKIND%.txt 2>&1 +rem set COMPILERKIND=flex.optimize +rem call c:\flex\bin\mxmlc.bat -compiler.optimize -output bin/%SWFNAME%.%COMPILERKIND%.swf src/Main.as 1> buildlog.%COMPILERKIND%.txt 2>&1 rem -warnings=false diff --git a/libsrc/ffdec_lib/testdata/as3_new/src/Main.as b/libsrc/ffdec_lib/testdata/as3_new/src/Main.as index aa885d3d9..d3e2cc993 100644 --- a/libsrc/ffdec_lib/testdata/as3_new/src/Main.as +++ b/libsrc/ffdec_lib/testdata/as3_new/src/Main.as @@ -97,6 +97,7 @@ package TestNegate; TestNumberCall; TestOperations; + TestOptimization; TestOptionalParameters; TestParamNames; TestParamsCount; diff --git a/libsrc/ffdec_lib/testdata/as3_new/src/tests/TestHello.as b/libsrc/ffdec_lib/testdata/as3_new/src/tests/TestHello.as index 1b4e68385..bab1fbc87 100644 --- a/libsrc/ffdec_lib/testdata/as3_new/src/tests/TestHello.as +++ b/libsrc/ffdec_lib/testdata/as3_new/src/tests/TestHello.as @@ -5,7 +5,7 @@ package tests { public function run():* { - trace("hello"); + trace("hello"); } } } diff --git a/libsrc/ffdec_lib/testdata/as3_new/src/tests/TestOptimization.as b/libsrc/ffdec_lib/testdata/as3_new/src/tests/TestOptimization.as new file mode 100644 index 000000000..6d1e2ede8 --- /dev/null +++ b/libsrc/ffdec_lib/testdata/as3_new/src/tests/TestOptimization.as @@ -0,0 +1,25 @@ +package tests +{ + + public class TestOptimization + { + public function run():* + { + // Add more than 3 variables. + // Optimization happens from register 4 on. + // (setlocal X takes more bytes than dup) + var a:int = 1; + var b:int = 2; + var c:int = 3; + + var d:int = 4; //setlocal N + var e:int = d + 5; //getlocal N is replaced with dup before setlocal N + + //We must leave this case intact: + var f:int; + var g:int; + var h:int; + var i:int = h = g = f; + } + } +}