From a97f57c40f4d8adc8035c18c3159d103ebd154ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=C5=99=C3=ADk?= Date: Tue, 9 Feb 2021 18:33:26 +0100 Subject: [PATCH] Fixed: AS3 break loop in catch clause --- CHANGELOG.md | 4 + .../flash/abc/avm2/graph/AVM2Graph.java | 125 +++++++++++++++- .../decompiler/flash/action/ActionGraph.java | 2 +- .../src/com/jpexs/decompiler/graph/Graph.java | 57 +++---- .../jpexs/decompiler/graph/ThrowState.java | 1 + .../ActionScript3AssembledDecompileTest.java | 29 ++++ ...ctionScript3CrossCompileDecompileTest.java | 118 +++++++++++++++ ...ipt3CrossCompileSwfToolsDecompileTest.java | 70 +++++++++ .../as3_assembled-0/as3_assembled-0.main.abc | Bin 4814 -> 5169 bytes .../as3_assembled-0.main.asasm | 1 + .../TestTryCatchLoopBreakLevel2.class.asasm | 139 ++++++++++++++++++ .../TestTryCatchLoopBreakLevel2.script.asasm | 29 ++++ .../as3_assembled/bin/as3_assembled.swf | Bin 2946 -> 3156 bytes .../as3_cross_compile.as3proj | 1 + .../bin/as3_cross_compile.air.swf | Bin 4389 -> 4891 bytes .../bin/as3_cross_compile.flex.swf | Bin 5974 -> 6615 bytes .../bin/as3_cross_compile.flex_apache.swf | Bin 5956 -> 6620 bytes .../bin/as3_cross_compile.swftools.swf | Bin 2656 -> 2818 bytes .../as3_cross_compile/build_air_debug.bat | 4 +- .../build_flex_apache_debug.bat | 4 +- .../as3_cross_compile/build_flex_debug.bat | 4 +- .../build_swftools_debug.bat | 4 +- .../obj/as3_cross_compileConfig.old | 4 +- .../obj/as3_cross_compileConfig.xml | 2 +- .../testdata/as3_cross_compile/src/Main.as | 4 + .../src/tests/TestTryCatchLoopBreak4.as | 51 +++++++ .../src/tests/TestTryCatchLoopBreak5.as | 39 +++++ 27 files changed, 653 insertions(+), 39 deletions(-) create mode 100644 libsrc/ffdec_lib/testdata/as3_assembled/abc/as3_assembled-0/tests/TestTryCatchLoopBreakLevel2.class.asasm create mode 100644 libsrc/ffdec_lib/testdata/as3_assembled/abc/as3_assembled-0/tests/TestTryCatchLoopBreakLevel2.script.asasm create mode 100644 libsrc/ffdec_lib/testdata/as3_cross_compile/src/tests/TestTryCatchLoopBreak4.as create mode 100644 libsrc/ffdec_lib/testdata/as3_cross_compile/src/tests/TestTryCatchLoopBreak5.as diff --git a/CHANGELOG.md b/CHANGELOG.md index c94f04b89..878e9b2a8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,10 @@ # Change Log All notable changes to this project will be documented in this file. +## [Unreleased] +### Fixed +- AS3 break loop in catch clause + ## [13.0.0] - 2021-02-08 ### Added - Graphviz graphs colorized 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 9287a51be..8d9ba6e84 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 @@ -21,8 +21,10 @@ import com.jpexs.decompiler.flash.FinalProcessLocalData; import com.jpexs.decompiler.flash.abc.ABC; import com.jpexs.decompiler.flash.abc.AVM2LocalData; import com.jpexs.decompiler.flash.abc.avm2.AVM2Code; +import com.jpexs.decompiler.flash.abc.avm2.CodeStats; 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.construction.NewCatchIns; import com.jpexs.decompiler.flash.abc.avm2.instructions.debug.DebugLineIns; import com.jpexs.decompiler.flash.abc.avm2.instructions.jumps.IfStrictEqIns; import com.jpexs.decompiler.flash.abc.avm2.instructions.jumps.JumpIns; @@ -32,6 +34,7 @@ import com.jpexs.decompiler.flash.abc.avm2.instructions.localregs.DecLocalIns; import com.jpexs.decompiler.flash.abc.avm2.instructions.localregs.GetLocalTypeIns; import com.jpexs.decompiler.flash.abc.avm2.instructions.localregs.IncLocalIIns; import com.jpexs.decompiler.flash.abc.avm2.instructions.localregs.IncLocalIns; +import com.jpexs.decompiler.flash.abc.avm2.instructions.localregs.KillIns; import com.jpexs.decompiler.flash.abc.avm2.instructions.localregs.SetLocalTypeIns; import com.jpexs.decompiler.flash.abc.avm2.instructions.other.HasNext2Ins; import com.jpexs.decompiler.flash.abc.avm2.instructions.other.LabelIns; @@ -43,6 +46,7 @@ import com.jpexs.decompiler.flash.abc.avm2.instructions.other2.DecLocalPIns; import com.jpexs.decompiler.flash.abc.avm2.instructions.other2.IncLocalPIns; import com.jpexs.decompiler.flash.abc.avm2.instructions.stack.PopIns; import com.jpexs.decompiler.flash.abc.avm2.instructions.stack.PushByteIns; +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; @@ -166,10 +170,15 @@ public class AVM2Graph extends Graph { } @Override - protected boolean canBeBreakCandidate(BaseLocalData localData, GraphPart part) { - AVM2LocalData aLocalData = (AVM2LocalData) localData; + protected boolean canBeBreakCandidate(BaseLocalData localData, GraphPart part, List throwStates) { + /*AVM2LocalData aLocalData = (AVM2LocalData) localData; if (aLocalData.finallyTargetParts.containsValue(part)) { return false; + }*/ + for (ThrowState ts : throwStates) { + if (ts.targetPart == part) { + return false; + } } return true; } @@ -177,7 +186,6 @@ public class AVM2Graph extends Graph { @Override protected void beforeGetLoops(BaseLocalData localData, String path, Set allParts, List throwStates) throws InterruptedException { AVM2LocalData avm2LocalData = ((AVM2LocalData) localData); - for (int e = 0; e < body.exceptions.length; e++) { ABCException ex = body.exceptions[e]; if (ex.isFinally()) { @@ -185,7 +193,6 @@ public class AVM2Graph extends Graph { } } - avm2LocalData.codeStats = avm2LocalData.code.getStats(avm2LocalData.abc, avm2LocalData.methodBody, avm2LocalData.methodBody.init_scope_depth, false); getIgnoredSwitches((AVM2LocalData) localData, allParts); Set integerSwitchesIps = new HashSet<>(); for (GraphPart p : avm2LocalData.ignoredSwitches.values()) { @@ -2065,7 +2072,11 @@ public class AVM2Graph extends Graph { } @Override - protected List getThrowStates(Set allParts) { + protected List getThrowStates(BaseLocalData localData, Set allParts) { + + AVM2LocalData avm2LocalData = (AVM2LocalData) localData; + avm2LocalData.codeStats = avm2LocalData.code.getStats(avm2LocalData.abc, avm2LocalData.methodBody, avm2LocalData.methodBody.init_scope_depth, false); + List ret = new ArrayList<>(); for (int e = 0; e < body.exceptions.length; e++) { ThrowState ts = new ThrowState(); @@ -2079,9 +2090,113 @@ public class AVM2Graph extends Graph { ts.throwingParts.add(p); } } + GraphPart part = ts.targetPart; + boolean wasNewCatch = false; + int scopePos = -1; + int ip = part.start; + for (; ip <= part.end; ip++) { + + if (avm2code.code.get(ip).definition instanceof NewCatchIns) { + wasNewCatch = true; + } + if (avm2code.code.get(ip).definition instanceof PushScopeIns) { + if (wasNewCatch) { + scopePos = avm2LocalData.codeStats.instructionStats[ip].scopepos_after; + break; + } + } + if (ip == part.end && part.nextParts.size() == 1 && part.nextParts.get(0).refs.size() == 1) { + part = part.nextParts.get(0); + ip = part.start - 1; + continue; + } + } + + //Search all parts which have same or greater scope level, these all belong to catch + Set catchParts = new HashSet<>(); + if (scopePos > -1) { + walkCatchParts(avm2LocalData.codeStats, part, ip, catchParts, scopePos); + } else { + logger.fine("No newcatch..pushscope found in catch, probably swftools"); + part = ts.targetPart; + ip = part.start; + int localRegId = -1; + for (; ip <= part.end; ip++) { + AVM2Instruction ins = avm2code.code.get(ip); + if ((ins.definition instanceof NopIns) + || (ins.definition instanceof DebugLineIns) + || (ins.definition instanceof JumpIns)) { + //ignore + } else if (ins.definition instanceof SetLocalTypeIns) { + localRegId = (((SetLocalTypeIns) ins.definition).getRegisterId(ins)); + break; + } else { + break; + } + if (ip == part.end && part.nextParts.size() == 1 && part.nextParts.get(0).refs.size() == 1) { + part = part.nextParts.get(0); + ip = part.start - 1; + continue; + } + } + if (localRegId == -1) { + logger.fine("Not even local reg assignment found in catch, weird :-("); + } else { + walkCatchPartsReg(localRegId, part, ip + 1, catchParts, new ArrayList<>(), new HashSet<>()); + } + } + ts.catchParts = catchParts; ret.add(ts); } return ret; } + private void walkCatchPartsReg(int registerId, GraphPart part, int startIp, Set catchParts, List path, Set visited) { + if (visited.contains(part)) { + return; + } + visited.add(part); + List newPath = new ArrayList<>(path); + newPath.add(part); + for (int ip = startIp; ip <= part.end; ip++) { + AVM2Instruction ins = avm2code.code.get(ip); + if (ins.definition instanceof SetLocalTypeIns) { + int setLocalId = ((SetLocalTypeIns) ins.definition).getRegisterId(ins); + if (setLocalId == registerId) { + return; + } + } + if (ins.definition instanceof KillIns) { + int killId = ins.operands[0]; + if (killId == registerId) { + return; + } + } + if (ins.definition instanceof GetLocalTypeIns) { + int getLocalId = ((GetLocalTypeIns) ins.definition).getRegisterId(ins); + if (getLocalId == registerId) { + catchParts.addAll(newPath); + } + } + } + for (GraphPart n : part.nextParts) { + walkCatchPartsReg(registerId, n, n.start, catchParts, newPath, visited); + } + } + + private void walkCatchParts(CodeStats stats, GraphPart part, int startIp, Set catchParts, int scopePos) { + if (catchParts.contains(part)) { + return; + } + catchParts.add(part); + for (int ip = startIp; ip <= part.end; ip++) { + if (stats.instructionStats[ip].scopepos_after < scopePos) { + return; + } + } + for (GraphPart n : part.nextParts) { + walkCatchParts(stats, n, n.start, catchParts, scopePos); + } + } + } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/ActionGraph.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/ActionGraph.java index 9c60ca11b..a52575955 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/ActionGraph.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/ActionGraph.java @@ -143,7 +143,7 @@ public class ActionGraph extends Graph { } @Override - protected boolean canBeBreakCandidate(BaseLocalData localData, GraphPart part) { + protected boolean canBeBreakCandidate(BaseLocalData localData, GraphPart part, List throwStates) { if (part.refs.size() <= 1) { return true; } 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 f9a04f365..a5511e574 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/Graph.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/Graph.java @@ -481,7 +481,7 @@ public class Graph { } - protected List getThrowStates(Set allParts) { + protected List getThrowStates(BaseLocalData localData, Set allParts) { return new ArrayList<>(); } @@ -512,7 +512,7 @@ public class Graph { System.err.println("/parts"); } TranslateStack stack = new TranslateStack(path); - List throwStates = getThrowStates(allParts); + List throwStates = getThrowStates(localData, allParts); beforeGetLoops(localData, path, allParts, throwStates); List loops = new ArrayList<>(); @@ -1170,7 +1170,7 @@ public class Graph { clearThrowStates(throwStates); } - protected boolean canBeBreakCandidate(BaseLocalData localData, GraphPart part) { + protected boolean canBeBreakCandidate(BaseLocalData localData, GraphPart part, List throwStates) { return true; } @@ -1207,11 +1207,8 @@ public class Graph { } checkGetLoopsPart(part); - List currentThrowStates = new ArrayList<>(); - for (ThrowState ts : throwStates) { - if (ts.throwingParts.contains(part) && ts.state != 1) { - currentThrowStates.add(ts); + if (ts.throwingParts.contains(part)) { ts.state = 1; } } @@ -1232,7 +1229,17 @@ public class Graph { } } - if (lastP1 != null && canBeBreakCandidate(localData, part)) { + + boolean canBeCandidate = true; + if (lastP1 != null) { + for (ThrowState ts : throwStates) { + if (!ts.catchParts.contains(lastP1.loopContinue) && ts.catchParts.contains(part)) { + canBeCandidate = false; + break; + } + } + } + if (lastP1 != null && canBeCandidate && canBeBreakCandidate(localData, part, throwStates)) { if (lastP1.breakCandidates.contains(part)) { lastP1.breakCandidates.add(part); lastP1.breakCandidatesLevels.add(level); @@ -1274,6 +1281,15 @@ public class Graph { //loopContinues.add(part); } + for (ThrowState ts : throwStates) { + if (ts.throwingParts.contains(part)) { + GraphPart t = ts.targetPart; + if (!visited.contains(t)) { + getLoopsWalk(localData, t, loops, throwStates, stopPart, false, visited, level); + } + } + } + if (part.nextParts.size() == 2 && !partIsSwitch(part)) { List nps;/* = new ArrayList<>(part.nextParts); @@ -1326,22 +1342,13 @@ public class Graph { getLoopsWalk(localData, part.nextParts.get(0), loops, throwStates, stopPart, false, visited, level); } - List loops2 = new ArrayList<>(loops); + /*List loops2 = new ArrayList<>(loops); for (Loop l : loops2) { l.breakCandidatesLocked++; - } - for (ThrowState ts : throwStates) { - if (ts.throwingParts.contains(part) && (currentThrowStates.contains(ts) || ts.state != 1)) { - GraphPart t = ts.targetPart; - if (!visited.contains(t)) { - getLoopsWalk(localData, t, loops, throwStates, stopPart, false, visited, level + 1 /*???*/); - } - } - } - for (Loop l : loops2) { + }*/ + /*for (Loop l : loops2) { l.breakCandidatesLocked--; - } - + }*/ if (isLoop && currentLoop != null) { GraphPart found; @@ -1386,7 +1393,7 @@ public class Graph { findPartsOutsideTry(ts, cand, outsideTry, new HashSet<>()); for (int j = outsideTry.size() - 1; j >= 0; j--) { - if (!canBeBreakCandidate(localData, outsideTry.get(j))) { + if (!canBeBreakCandidate(localData, outsideTry.get(j), throwStates)) { outsideTry.remove(j); } } @@ -1463,7 +1470,7 @@ public class Graph { currentLoop.breakCandidates.add(other); currentLoop.breakCandidatesLevels.add(curLev); - + break loopcand; } } @@ -1486,7 +1493,7 @@ public class Graph { removed.put(found, maxlevel); } } while ((found != null) && (currentLoop.breakCandidates.size() > 1)); - + Map count = new HashMap<>(); GraphPart winner = null; int winnerCount = 0; @@ -2082,7 +2089,7 @@ public class Graph { GraphTargetItem leftSide = expr.getNotCoercedNoDup(); boolean hideEmptyTrueFalse = true; - + if (leftSide instanceof DuplicateItem) { isIf = false; if (hideEmptyTrueFalse && prevExpr.getNotCoercedNoDup() instanceof FalseItem) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/ThrowState.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/ThrowState.java index b353b2faf..908e21ee0 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/ThrowState.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/ThrowState.java @@ -13,6 +13,7 @@ public class ThrowState { public Set throwingParts = new HashSet<>(); public GraphPart targetPart; + public Set catchParts = new HashSet<>(); @Override public int hashCode() { 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 5ce92bb74..d1c84c8f1 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 @@ -230,6 +230,35 @@ public class ActionScript3AssembledDecompileTest extends ActionScript3DecompileT false); } + @Test + public void testTryCatchLoopBreakLevel2() { + decompileMethod("assembled", "testTryCatchLoopBreakLevel2", "var a:int = 0;\r\n" + + "a = 0;\r\n" + + "trace(\"before loop\");\r\n" + + "loop0:\r\n" + + "while(true)\r\n" + + "{\r\n" + + "try\r\n" + + "{\r\n" + + "trace(\"in try\");\r\n" + + "}\r\n" + + "catch(e:Error)\r\n" + + "{\r\n" + + "trace(\"in catch1\");\r\n" + + "while(a <= 5)\r\n" + + "{\r\n" + + "if(a > 5)\r\n" + + "{\r\n" + + "break loop0;\r\n" + + "}\r\n" + + "}\r\n" + + "trace(\"in catch1c\");\r\n" + + "}\r\n" + + "}\r\n" + + "trace(\"after\");\r\n", + false); + } + @Test public void testTryDoWhile() { decompileMethod("assembled", "testTryDoWhile", "trace(\"first\");\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 a8d265996..0e45c83c7 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 @@ -311,6 +311,124 @@ public class ActionScript3CrossCompileDecompileTest extends ActionScript3Decompi false); } + @Test(dataProvider = "swfNamesProvider") + public void testTryCatchLoopBreak2(String swfUsed) { + decompileMethod(swfUsed, "testTryCatchLoopBreak2", "var a:int = 0;\r\n" + + "a = 0;\r\n" + + "trace(\"before loop\");\r\n" + + "while(a < 20)\r\n" + + "{\r\n" + + "try\r\n" + + "{\r\n" + + "trace(\"in try\");\r\n" + + "return;\r\n" + + "}\r\n" + + "catch(e:Error)\r\n" + + "{\r\n" + + "trace(\"in catch\");\r\n" + + "trace(\"a=\" + a);\r\n" + + "}\r\n" + + "}\r\n" + + "trace(\"after\");\r\n", + false); + } + + @Test(dataProvider = "swfNamesProvider") + public void testTryCatchLoopBreak3(String swfUsed) { + decompileMethod(swfUsed, "testTryCatchLoopBreak3", "var a:int = 0;\r\n" + + "a = 0;\r\n" + + "trace(\"before loop\");\r\n" + + "while(true)\r\n" + + "{\r\n" + + "try\r\n" + + "{\r\n" + + "trace(\"in try\");\r\n" + + "}\r\n" + + "catch(e:Error)\r\n" + + "{\r\n" + + "trace(\"in catch1\");\r\n" + + "break;\r\n" + + "}\r\n" + + "catch(e:EOFError)\r\n" + + "{\r\n" + + "trace(\"in catch2\");\r\n" + + "break;\r\n" + + "}\r\n" + + "}\r\n" + + "trace(\"after\");\r\n", + false); + } + + @Test(dataProvider = "swfNamesProvider") + public void testTryCatchLoopBreak4(String swfUsed) { + decompileMethod(swfUsed, "testTryCatchLoopBreak4", "var a:int = 0;\r\n" + + "a = 0;\r\n" + + "trace(\"before loop\");\r\n" + + "while(true)\r\n" + + "{\r\n" + + "try\r\n" + + "{\r\n" + + "trace(\"in try\");\r\n" + + "}\r\n" + + "catch(e:Error)\r\n" + + "{\r\n" + + "trace(\"in catch1\");\r\n" + + "if(a > 5)\r\n" + + "{\r\n" + + "trace(\"a\");\r\n" + + "if(a > 6)\r\n" + + "{\r\n" + + "trace(\"b\");\r\n" + + "break;\r\n" + + "}\r\n" + + "trace(\"c\");\r\n" + + "}\r\n" + + "trace(\"in catch1b\");\r\n" + + "if(a > 10)\r\n" + + "{\r\n" + + "trace(\"d\");\r\n" + + "if(a > 11)\r\n" + + "{\r\n" + + "trace(\"e\");\r\n" + + "break;\r\n" + + "}\r\n" + + "trace(\"f\");\r\n" + + "}\r\n" + + "trace(\"in catch1c\");\r\n" + + "}\r\n" + + "}\r\n" + + "trace(\"after\");\r\n", + false); + } + + @Test(dataProvider = "swfNamesProvider") + public void testTryCatchLoopBreak5(String swfUsed) { + decompileMethod(swfUsed, "testTryCatchLoopBreak5", "var a:int = 0;\r\n" + + "a = 0;\r\n" + + "trace(\"before loop\");\r\n" + + "while(true)\r\n" + + "{\r\n" + + "try\r\n" + + "{\r\n" + + "trace(\"in try\");\r\n" + + "}\r\n" + + "catch(e:Error)\r\n" + + "{\r\n" + + "trace(\"in catch1\");\r\n" + + "while(true)\r\n" + + "{\r\n" + + "if(a > 5)\r\n" + + "{\r\n" + + "break;\r\n" + + "}\r\n" + + "}\r\n" + + "trace(\"in catch1c\");\r\n" + + "}\r\n" + + "}\r\n" + + "trace(\"after\");\r\n", + false); + } + @Test(dataProvider = "swfNamesProvider") public void testTryCatchTry(String swfUsed) { decompileMethod(swfUsed, "testTryCatchTry", "trace(\"before try\");\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 99a721e4e..2f8ef49e0 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 @@ -350,6 +350,76 @@ public class ActionScript3CrossCompileSwfToolsDecompileTest extends ActionScript false); } + @Test + public void testTryCatchLoopBreak4() { + decompileMethod("swftools", "testTryCatchLoopBreak4", "var _loc1_:int = 0;\r\n" + + "_loc1_ = 0;\r\n" + + "trace(\"before loop\");\r\n" + + "while(true)\r\n" + + "{\r\n" + + "try\r\n" + + "{\r\n" + + "trace(\"in try\");\r\n" + + "}\r\n" + + "catch(e:Error)\r\n" + + "{\r\n" + + "trace(\"in catch1\");\r\n" + + "if(_loc1_ > 5)\r\n" + + "{\r\n" + + "trace(\"a\");\r\n" + + "if(_loc1_ > 6)\r\n" + + "{\r\n" + + "trace(\"b\");\r\n" + + "break;\r\n" + + "}\r\n" + + "trace(\"c\");\r\n" + + "}\r\n" + + "trace(\"in catch1b\");\r\n" + + "if(_loc1_ > 10)\r\n" + + "{\r\n" + + "trace(\"d\");\r\n" + + "if(_loc1_ > 11)\r\n" + + "{\r\n" + + "trace(\"e\");\r\n" + + "break;\r\n" + + "}\r\n" + + "trace(\"f\");\r\n" + + "}\r\n" + + "trace(\"in catch1c\");\r\n" + + "}\r\n" + + "}\r\n" + + "trace(\"after\");\r\n", + false); + } + + @Test + public void testTryCatchLoopBreak5() { + decompileMethod("swftools", "testTryCatchLoopBreak5", "var _loc1_:int = 0;\r\n" + + "_loc1_ = 0;\r\n" + + "trace(\"before loop\");\r\n" + + "while(true)\r\n" + + "{\r\n" + + "try\r\n" + + "{\r\n" + + "trace(\"in try\");\r\n" + + "}\r\n" + + "catch(e:Error)\r\n" + + "{\r\n" + + "trace(\"in catch1\");\r\n" + + "while(true)\r\n" + + "{\r\n" + + "if(_loc1_ > 5)\r\n" + + "{\r\n" + + "break;\r\n" + + "}\r\n" + + "}\r\n" + + "trace(\"in catch1c\");\r\n" + + "}\r\n" + + "}\r\n" + + "trace(\"after\");\r\n", + false); + } + @Test public void testTryCatchTry() { decompileMethod("swftools", "testTryCatchTry", "trace(\"before 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 26f49143fa99367889d4e0ac3019c9d2201672fc..f6d2e4bc866c5665a3756c5026bd4e2b137a0728 100644 GIT binary patch delta 1899 zcmaKq%THTJ6vodP-+RYnWBX!=eK8np0|uK5xtLdg5MJSx0451Z$OGaB*MWpb3U1mo zm593Nu2Q7wqN{Y%b)_h~Zrc6>l}Xz4p)Mj-N;Z{>RCUu0or&dkS6lM@biVJLIp=u3 zYkk@t)u9W-=R+->yJP2zYPL|c_q6@pZF^^5S;%hgJdJv=p?=xkFD~yrn9LUQ8}qxn z_a^r2?A>|$zP**=UD&H&7Hyuxqokf)U!S^f?-b`Z_lx$9y@xq1XBT$&Y9No zx?SK!@_Pf@+==96(Qenjl-C3n_Z~dUI9^~ZS`=6B5B*;QJ?e$Tct8!bIhTTMfoT=Q z*AX}$RD;ciqJq&LQbIGK+0b0*Txgy@RipeHRZBHH9f5^_Be-rjj16PcxMSQkwv26K z$JjOQ8SfZ-#=cQB-ZkzU?-}nK4?^vAoM^o`#s{=QyV{0CaonYtpokPdpqQiBN3n@w zmbN!i=M{xxs*AdBPGK3{GN@LWS zr%szDu2DQgagpM6inl1nDc+{|kg6%F_E2?@GDcZHO%BtJ)6{*Fnrl=UrAiY+l_6#5 zWXKr07~i371P%Tv9jXo^E087mkIN4_hM)aPlgM9F{h-#>!m0qV6M^W2c|k=5L8~FG z7nnp>HDM|6Nc8#%>w#*C{#wHN;Dp3LfUp6mlNbsTb_&808@+^C5S17^L0CVuN{ssm z>xP8HWF28cu+}NL%OGqJx+SKn2Gze2CYnsmAS%yag7Ac=V=p#mkO^#mbf9klf2745QuhU zqe605q%|p>u{b>*q<2Vgmxb2dLZlgw*}&vR zuqxB0`E=EAur1vNGeQeiv|Cb};h$BdI$F)uoSJ;(KJ3`WbRWsIru$(Aa1_uD^%Z|s z`e*rHRh{*5;hP1FYeH|T=sBs+@exll(VSDKoAJ>|GMRT31|H{Jh1BD8k6cl6#eGe> z&+*3|GZ=f9XJbMWPq)01jMUEa7oM})b&2yl?0u-MOI+Yjyh-Eae!U5x)B+d)f+7Iz z0!H{NZ?KlU6t#LPwem7+k-L2Z4e2yuSd29W*bM^}!&PZW^EIDYJ0%Qjbeck5)kST# zhGr{&;%jV+N&!tGjv3TVOVwbwl7Cy~FRggP8x8z7U&ldY8ZlwxYNQaE?uC!GaaB~2 zFo%BRTD3lf1+1ko)C@d%jF4@l0Eo#nhwc-m*bt1-;}va^7mynC4XDy zlajwI^I86<{*~D+B4QK0zGQ^cB&ijGQnp$w-YZ@=9{oKfc|yl93BDr9Wm~6#np$U;m;UXf?^WcmUDPZgm3Em0=5Vh|4QA;f;E6=Re#Pa;N|R delta 1546 zcmXw%%TF6u6vofFo|)_G_k-9Ig8|!M@Yuj$9u5#g2*D;i;*ckKK>T1Fk_KpjM6J3Y ziqw6S+eIsNQ>m*iDn;2zTQT8tHRhiS|V4 zb`mxNQxd1U2s;l&iL)`nreR*{7tL zfH4IEW%Mc#T*0^kp;aDqN7tJnCqS#x4FM0pW~MsW9B4JWD;ZJ-AP&M@{+79E*l9zi z9R$&tYMB;PiCLX7s|B+od z?j7pv7rrIHeog2-w*ElsW&XR@$Rz7(DT&X|8%D#`oP1e#HAi1o@^V8d+kH#Am-vV; z7fn3nwS>?HY;99&m-&J3l6G6-GXKH%saBJ?!i#=GA3p5N0Vo{+I)I>FfI$J%{MaAu zP~M4NV|K5qtXk#Y`U_oa6~wr>)*PS-1>0~#8rJx~{#?g`Fl^Bhg@zgsz1bG#lDrt` z9_W?=<`fai7|5Bb1~YbjL)Kr}@WppJ`HMjII9@``Sh(5K>?w`Gi(T9lU1TmGW^I`# z=3Ow}8K&5v5W1xhcM=PqVBdD+?dhpVDl%EdSTe0@cmWV#&OU5g9#+}#$9KBKB`=6y zNO81Gf%Axps?oqNM3 U#`$bG;j?7o+D0h8Bfbs%2lN*a?*IS* 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 f462f3840..18c2a11f1 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 @@ -22,5 +22,6 @@ program #include "tests/TestSwitchJoin.script.asasm" #include "tests/TestDeobfuscatorJumpsExceptionStart.script.asasm" #include "tests/TestUnnamedException.script.asasm" + #include "tests/TestTryCatchLoopBreakLevel2.script.asasm" ; place to add next end ; program diff --git a/libsrc/ffdec_lib/testdata/as3_assembled/abc/as3_assembled-0/tests/TestTryCatchLoopBreakLevel2.class.asasm b/libsrc/ffdec_lib/testdata/as3_assembled/abc/as3_assembled-0/tests/TestTryCatchLoopBreakLevel2.class.asasm new file mode 100644 index 000000000..517dc0bfa --- /dev/null +++ b/libsrc/ffdec_lib/testdata/as3_assembled/abc/as3_assembled-0/tests/TestTryCatchLoopBreakLevel2.class.asasm @@ -0,0 +1,139 @@ +class + refid "tests:TestTryCatchLoopBreakLevel2" + instance QName(PackageNamespace("tests"), "TestTryCatchLoopBreakLevel2") + extends QName(PackageNamespace(""), "Object") + flag SEALED + flag PROTECTEDNS + protectedns ProtectedNamespace("tests:TestTryCatchLoopBreakLevel2") + iinit + refid "tests:TestTryCatchLoopBreakLevel2/instance/init" + body + maxstack 1 + localcount 1 + initscopedepth 4 + maxscopedepth 5 + code + getlocal0 + pushscope + + getlocal0 + constructsuper 0 + + returnvoid + end ; code + end ; body + end ; method + trait method QName(PackageNamespace(""), "run") + method + refid "tests:TestTryCatchLoopBreakLevel2/instance/run" + returns QName(PackageNamespace(""), "void") + body + maxstack 4 + localcount 4 + initscopedepth 0 + maxscopedepth 2 + + code + getlocal0 + pushscope + debug 1, "a", 0, 0 + pushbyte 0 + setlocal1 + debugline 15 + pushbyte 0 + setlocal1 + getlex QName(PackageNamespace(""),"trace") + getglobalscope + debugline 16 + pushstring "before loop" + call 1 + pop + debugline 17 + label + jump ofs007d + ofs0023: + label + ofs0024: + getlex QName(PackageNamespace(""),"trace") + getglobalscope + debugline 21 + pushstring "in try" + call 1 + pop + debugline 19 + ofs0030: + jump ofs007d + ofs0034: + getlocal0 + pushscope + newcatch 0 + dup + setlocal3 + dup + pushscope + swap + setslot 1 + getlex QName(PackageNamespace(""),"trace") + getglobalscope + debugline 25 + pushstring "in catch1" + call 1 + pop + label + jump ofs006b + ofs004f: + label + getlocal1 + debugline 27 + pushbyte 5 + ifgt ofs006f + getlocal1 + debugline 30 + pushbyte 5 + ifngt ofs006b + popscope + kill 3 + jump ofs0081 + debugline 26 + ofs006b: + jump ofs004f + ofs006f: + getlex QName(PackageNamespace(""),"trace") + getglobalscope + debugline 34 + pushstring "in catch1c" + call 1 + pop + popscope + debugline 18 + ofs007d: + jump ofs0023 + ofs0081: + getlex QName(PackageNamespace(""),"trace") + getglobalscope + debugline 37 + pushstring "after" + call 1 + returnvoid + end ; code + try from ofs0024 to ofs0030 target ofs0034 type QName(PackageNamespace(""),"Error") name QName(PackageInternalNs("tests"),"e") end + end ; body + end ; method + end ; trait + end ; instance + cinit + refid "tests:TestTryCatchLoopBreakLevel2/class/init" + body + maxstack 1 + localcount 1 + initscopedepth 3 + maxscopedepth 4 + code + getlocal0 + pushscope + + returnvoid + end ; code + end ; body + end ; method +end ; class diff --git a/libsrc/ffdec_lib/testdata/as3_assembled/abc/as3_assembled-0/tests/TestTryCatchLoopBreakLevel2.script.asasm b/libsrc/ffdec_lib/testdata/as3_assembled/abc/as3_assembled-0/tests/TestTryCatchLoopBreakLevel2.script.asasm new file mode 100644 index 000000000..0e02f73ba --- /dev/null +++ b/libsrc/ffdec_lib/testdata/as3_assembled/abc/as3_assembled-0/tests/TestTryCatchLoopBreakLevel2.script.asasm @@ -0,0 +1,29 @@ +script + sinit + refid "tests:TestTryCatchLoopBreakLevel2/init" + body + maxstack 2 + localcount 1 + initscopedepth 1 + maxscopedepth 3 + code + getlocal0 + pushscope + + findpropstrict Multiname("TestTryCatchLoopBreakLevel2", [PackageNamespace("tests")]) + getlex QName(PackageNamespace(""), "Object") + pushscope + + getlex Multiname("Object", [PrivateNamespace(null, "tests:TestTryCatchLoopBreakLevel2"), PackageNamespace(""), PackageNamespace("tests"), PackageInternalNs("tests"), Namespace("http://adobe.com/AS3/2006/builtin")]) + newclass "tests:TestTryCatchLoopBreakLevel2" + popscope + initproperty QName(PackageNamespace("tests"), "TestTryCatchLoopBreakLevel2") + + returnvoid + end ; code + end ; body + end ; method + trait class QName(PackageNamespace("tests"), "TestTryCatchLoopBreakLevel2") + #include "TestTryCatchLoopBreakLevel2.class.asasm" + end ; trait +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 f59877f9bcb26e552bb1b9b711239172fd70e723..37e48f0b2992fda61fe29397c33a1d41b314040b 100644 GIT binary patch literal 3156 zcmV-a46E})S5qWw761Tv+U;1)R~y@rzttbQx&n#T2a*s73y{GGff`|Bg8>`!W&CX8 zXZ&Kt2{x@(i`KJHYowMjGdU;kn)*Ygv9EEi~`vV4iQ3r9{zVAWTjCmFF)PfPQ5*@ z)|$&GtxlP?U0=@SPEJndP8Q~@#!+s5X=y2^=5zV{ELzMqPiwaJcDB}>m|AlHHjSp< zsMPI>RZDSMD_Sjkb!zGYwWNOnt+yIg2ePE+jH+>L)a+(%er_ItO8RoyY8-3!npUq@ zE4s$va&Kpwrlr3=(cT!d<*L>+S8`oLe#WlYRby?vWEG9ncGY;Bx}I9^o_DNW6K-7U z2D*0Xni@Ynr(4Ildc!KUbd0HtP|o4YM>s^iRjgK;rqNhy)n3=E6W2vo%Wd?Aq1jfi zMMuZ?t6J@-r5zb-TaTT+PqGuEW*ch{v|1{^m`&x?{Ja|m*RJF~%l3r^3%Eu$l|P9q zWJ74T+b?_~R@j68B+s`mi1Sf%_f}7^;{WD*q*ZFio73TF3R~)?3|hqTRQ(hV6H3EXw2?UIjZrt=;NAgtFfi&X6O>X zVHpkGC^;~@HOwkE4)jR*UU9(@_YHf$YH=U2OX7B=R(jH~>PEvp^*Q>JimjW$F1u-z zwN};j;A$RNmD(^DpEXW5G*mpatol7H@9T%g8>8xa$GuJKxml?i1HEEC!sV}OHOzYH zQ))m1LpF_S)$&$qDV?KAm0HD?j!$b%&+#etW!=*>bgNeK@tPbPwrQ1Q8=;yphc16F zgRzkWfo3Ebjz1n}azOx0J{>@6WUe!+Bx<`AY4GW+2 zO3i4%mb}$ySd9Uv`rL+xi27~V3GUXgRW#kMyfNHk*e|xpo+5{hT{YM~M!bO!Zxae) z;n73StE#2nc%^8ik^}d!(zFfkr06Lc_-Gq_?vkovV#ShCmdlk!)Al>h|6IupaJWZW z?g=~n7xq3~=}NEB_bw6X-FF+l-&Gns?B>X2VfnMn_}tAS!#ehuM&-z~MbkJPyO=uN ziL<`Hkjty;Vy@V#RP9QQb?QIw`^4!UWbMYOSivW+YSfM}yH!goZCEWVGtbhzL-Rhj zFL-Zxk563zyNAoTG_m0&>$P?&TQ)}MX=t^QbsWa0#Cl`&R6=ajN@Al`^YUKfy~j9X zo0ZxT<=h*sAvbNDSe!QO$fXYaGz_LMEC1q12w$@73Lhm`q5 zSNr*Zk=|I9l6+Dr+2(pwj!t=>#HOO#GQl4)`bA8RO~fUc#IGf!#7^RVVmI+1@zB}* z>pv4-G5RPf#!7K9ZpJI|uj8-d)%bC|7PsQ{_}|4F@n+nPx8iT&C-JxO)5NtQ5d72w zK2hi&2nRz-#N!BZphwAMKM0cO9dwq!T{+5EIp)x~Lx&uiaOki@M;w}T=%_=lI5g$Z zF^7&jbi$!&hhBB)q(i4TeNADS0#NvS3PlPxC|seS(QBjB`y&bxg=bXgqe4H$iwFTK z3{XL#LXZj}Duk&Jp~4^)qEv`cAx?!MDkP{dOob6DB-yw?VVS}@g|8^2sqCYDKcRhT zIy=c!fia2Q71*J`rahF7Q?E|F2A%#fg*6I~DZHTYiozs?BMSdOw{u|_oFU|T1z$_3!5m}Wt>DjDPK_@KZR$yLry4hU?XOmj9fB(P;N%h|cOz?R57 zXY>66n5O1z{WUppftPDV(Iq{%gsB`Ud2Zjlvomu!;z8D z=5V@v?W}xdFC(CxAPUSkaHby2bks9kEeZ%Vai$vNP*4w7)Wciq;j((Tq#mZ#!ygq$ z()pM^G?f5E$#p6NNV3Oqijqf=Bsq4brpbr2@BDqH`5}bw_XpYcds)D3iY`R%`6t}P zMgfwhf@*IUj`hI#INYFnBX2A7n*;BR=6yLfqmAKaUkB_Z2iq(NNi&S<{w|om2Q0wB z7S7Z$T~3qpH2E$~bXt^kj}k<`_){_+J`&%2ONL9 zASKNZsv}+e!5;i5$4{W793cVG40|_(!>fCXXa{$&y~%I~T;t&P3!bDIMU0Uy zc(Mn4l!Ny@SJU~-%Spt$Phir6I9ED2MUJyuph+`^=BX~uSP#xP#~DWZiK4tc0pF}< zGPVFH9mpSZ$Oi>)(hQ(F-G#i`13Br0cBa0|l*e2DsEwm)ssnMz zA-*WEq&bM{Yh8%x9*7Kw2w|}y4eyH5@4n5nKD_(wxAzH|=^(w}NDm9Xq&a{GvR$Ov z9;7*rw2MgcZ~~vDF?5QRAtdL}MM75bCZ%&_0vB?wjPQG%D-;*;TnXSJyOQTz`7fuh za-9H5Jb*`qzN9&XYPB1{d`|#*9>5Lks$6q8i;p?}-#d=+Vo97(va9DiSFPbq{Wj@e`00aM=MRtI8g7yW{_e`+rghB+U_Yv(ojy+T(vs6lLF+?o)(! zNo@m68*q>+r?#(?UmOGKu5z6c=U(5bFG%J*qs}-RV|*j&6?iJrrRe*18GE05|EtUAIR6Ki-{ky1Vbd+0zsHIC9|;d{PUVOT!zlt;Wl zT|rdt@}_kKNm)QjT|rhRxv?vFlp&;ESD?K46wY}S!l_prK5e(X^X)eNt~$TF?ecbA*)atoIfKD!&8JR3aEPYX)YOkg@UyLsN~$@4bP z^ZuEtFw6^9?m4gA8TMcB&)8)FUT>`S2dCOeFLcZbKVSx3v$T9)5Msl!XL{`(_Tx?` zr~(gazYt8Ce)N668`N%3P!BE!CZFiMA9<}P_wio+g&ru%_rc@GKYrwk4sM0xJ}ZQh z<|rP2*u{O+gZo&*7o1mhHaRA97ls+oijdhs*7-UKTFUU26*?q1F^FQ=X z4!(0P$G3*EU*ZbtKZcaw uyNat>VI7~Mq0H~_RUw=-hxrRdn16fdd^3p6M*bIi(CDL|^eO)U literal 2946 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 diff --git a/libsrc/ffdec_lib/testdata/as3_cross_compile/as3_cross_compile.as3proj b/libsrc/ffdec_lib/testdata/as3_cross_compile/as3_cross_compile.as3proj index 229ddda42..00961f79f 100644 --- a/libsrc/ffdec_lib/testdata/as3_cross_compile/as3_cross_compile.as3proj +++ b/libsrc/ffdec_lib/testdata/as3_cross_compile/as3_cross_compile.as3proj @@ -12,6 +12,7 @@ + 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 3e4182248ce350ddf60c6c570ec17561e2cd5dfb..4cd8e972c3a067566a576226bda6a385bd5a1bbd 100644 GIT binary patch literal 4891 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 Nf8t+)@IMD?mO$U*rmp}1 literal 4389 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 f>J}a9t~%9C%Hx+Pk3I9)w?||?>{}03};B-;l 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 0e8ab6c1dd9b5f3bd2fb09008fc026a1ad297197..68b0b74c89abf3dba78061f91aabb1b84f4d2db5 100644 GIT binary patch literal 6615 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 E%b`rLtpET3 diff --git a/libsrc/ffdec_lib/testdata/as3_cross_compile/bin/as3_cross_compile.flex_apache.swf b/libsrc/ffdec_lib/testdata/as3_cross_compile/bin/as3_cross_compile.flex_apache.swf index 21cba0c23891cf5d16c6942d320e51cce89cb6aa..e52eecae32dbd61ddda5270b60639403cebdb01b 100644 GIT binary patch literal 6620 zcmV<286)OHS5qn+TL1uf0li#(Y$In{_d6dReGem&hsu0; zx7gUZvS2pEKFvyVSGjh5zgXH)GB$zJnC06KB(}$twij}JG z8?hh21|FfCvhN%=8WQN%#?veJSL?O?t=i%J7wWYK_2ORbVX<1d|4i{=@$QZLH*c;g zrTe>;twz0czg*r{N}I58zo|5u@H-ao7aNP4rFyN=*euod_A9%}eQ0?3GM@Wfu@S_- z3;5Pg!EkQ7(%9cE9tEGPJ*+5C?^gExx3^wXO3i^A4*^=MaJ1M2VAT6qa|QP{`f)$> zVojs#)uvJ}mYS7^3fmL69e=t8Xs=Y2y8rHez0y=hH#Z;DHk-B05!B!mkJ^rt5rA*%$A5#C2gFvLI3t-(VfBovN(pI6U5&Z$p4UiYc< zu$P0j!5@2^gZ*K}x51bB+=fsVavNe<%x(C~{@jLCmU0_`av-@VP!@VVpDYAoD?_j~oDr|}nFufDtk56h>4A(^60R@|EWg z`av~Y$cs&Q%1U@k0W+gyc5AhLf2Epf){jV0hey3$t2Y8SZr{9tpNJyTzhj0S`h*;zYy{7nZm_iHk^_ zED6IB7Y_~-01`Yru^--${(z|{861LFf=Gd&=;Mh0I=}}G5uQk^2qgd-;ROv?JTHdd zL?nbC=UzVhQSRU1a9Hi%Aankkgq)E#eZHVN2%8e!4CCf7YzA;s9h!-LuhmjVxNjnep~pGEI>H`c%EK-`P0=3M2r^IuvH{OK5;P$c$?v-%`DUeB+}%BTzD6Of zV|h4jd$w(j8pn@j`xSLO=NB2CLmHj|#~PeNfa)^)Dq^t=wr!%r7cdZ<@6<>`q5V#} zqqv}%sq-s%>o&Be?P!%Y{LCVQSw^%923kLIL#x&9 zF6&@Tjo2Qey-of2v1+>@KvhK3t65$Rp3J5aB?$6h3nbu5hM|-hJW}B+)h2mu-1~bN zkX`7|MnjzKetH0GKIYcZL@G77iEunj4K5g2z$zdXTsM3M#8R8f4N5{>;u68Q23=_Y z9$=I~cZkG>;gtlRP0en=gl^CYT`;?$Uq-WQ#jZlKzCA+UIkg}EHo%e&zz4Ch$I0tx zdt(N?xlb)3)dC(fFs1AMEZ|HVpKVmx1Q*+_ZL zro63b7MjY~G!2%Bf3em2YOD1jup0i)z@aD}nj2JSZv}(^AK~S?n%jquqO?jSrjrR-)?8;1h7)R$>NJiIcJJJ<|wD>*#a>L zXVh$f!^WrJ;|zWPa={<Zh zll*!&{kN!dsDu7nJZTOs>KxJ{6>H?(2M()#lmUkZ9^T;#x!XV98(S7F4$WH)F1qn$ z@w4(}(ZUxd2m9iE7Pl2Z&&Bs^@wY<@`rWi(Pi_mf;6B(@YXt7ilts#vImy#0Q6+~6 z9&tnP2d&mzSRK7Z<_i}&-pvC{wWHU|1ANaDz0X1p<|#;$zOKVJZI897n=l)lK&)-Q zqAukMnv}C5SYo-OJXgG`eJnU|Yzu6tNVA9H_Ny6|-yVv$HPQr?eQys~zMu!;_MQ$f zN8%9+m}xSJ2cs`bfMhNv2}w|5!KALiqVQ}%3t>KKn8XwC8tF}gA(+34cE8UI%KJ1l zVuv{RXl!9gmskOU~C z`svB0*2w8f%^mZzy<+}DPt4yqEGcxP* ztEht@ETQ%t6I3+T=X=VpVvee7el_%RTS#IJMgX2n@% zF+_Zgq^8es?Ws~n^2sYz`d6M%){_29I*2<6_@$E;A4@uLAq9zPe*xr1f!nIivrfK1o)(~^lsrZ+ToF0e3}=?#lC7i`kp?p~xdsCOj`$dZT|jN{l3Y8>CEba(WsS zu^C!vu8bqa7ve)5!%=s&V`0Dm+f(S7pk=nw$Y3^b6!f#gxR21XFqjW)Q4ej4AOrNhINw?mYwZ zPR~kQF6#Q5nf8SILc1JE=@wlbVJVYkmMIy<+=+d77wtV$-4m>7h&7GQM1KVg|1=zC z*-aSqoxgAuk|`H<+;b_8kzcP|$|s)I-*_H|3mEA{l7jEVNn&IrLBV>|GUyyJ#uZ%U zO(zzZ8OTm7u;(DnpYF4>z?z3Vah>xCB# z`I1%ZbT{_PJsJCDcVoZ&*}8b2^mVQ^rNUi!jGgWL?5P)o$l8xk526Lk1|w z(ui3xg1Pv#EWvwfCi*F0oQir(tzcXVmi;~0H)-I08gP%6-7UpFoV>YL*AKg8ErK4R+$9JJ?F2yk3mO){L?xfpyFp%szFs>t5yNm9~&7Wuak%%T% zw2p>y*UEKRP6P&Njhu)}LPT&YIP*)iXh$@)y5FhQv1sRK+M`d8jEEzsq!|$nay=ID zBmj|goYpAfK^?X3WQRX%5_GFt$k!+EYX`#2sHYuB%HiM19X(v@;rd>Lz5_{ssP$fO2Uc9uq zo_sN?Efe-41(tn*Obpa1K+R855=JF%EI6ts$cMo)C73Kvk&!gK#(PhYe;JDudNbD_ zw43X%d75iAMFof$0bQ<+=&)DQbT6$nP%RY*OqW+^aI1@TwBAgYPti^xdMZ@w12l!6 zrF+9zi=du@y(|Sk!%j60J5R$-T8p5bg-^8fKywZk!8y#szCn7Tg$~YP$xb|PQMBep zJk6-F5~G)(f>(DFWA@aav)#iJa~S5$>GUgHa3+DA1)!eeQ4V)v9c7(zb1mjA7*6Iw zmv(lqVV5s6C&M>Hx1hJcEINF1w5 zkYoy8qfjm1L)r*k(Vsb8k&!maitl1=P`{BalHpU3CU^9DAt)JDhoDyI9?^;@>S4IMBwSQN;H+CbU_Oo>-^7&l4Lw`#E#IjxeiIMmS(piLoW+MyChMqxFLN#q# z;=rwrOI$`0vl4eInAJ!f8Us>KFj7yFscCr4kiLFecoa7EWuH@D`UNrmO&v((c6t1 z%r{cR8J)3k+`@eB?8jR1xs&->=prM@Df5pQ^D(;|rOZEV+yt-BsW=MzyF7tpC#BC$DOiXSMP^YwAIy19nN|YPLMFp`Zade z71)`?opUMm@~yzs=Zk_k_4zLozc}^lBuIH71dq`*S&(m zI~}y?a|gT4%Kolm!&chWo!Xn8oIAB$*Fc_@o%TjvME8;zI={|+6ensn(&pnik|vQ~b7L-SK@M0%OE?o8z;c#p3v=ij9Zk394c(g(WzTgpTmo3#~-w zDE>%q6Zb&8M&3v9YWH&xVzCi>tg&J#zCpuP7-?+G{~2j)v$);xSC|5%<2PRZ$~jpI zLrWSv8hIAX53;y%VvVPHmh|+xz^4=lI@^qNw%tg36|Ee0;1#9?9Ft1id1Y^Ua=fx# z7kEXdQ9)V`2YtM0Wuy%wC782ZsU9e-F5ST!230oI%9TU5>v!gmy{Vl;wqxBnRJhp2 z9$SCYS+Ee$UZ}|OFvn1+C_?b}sax#f%JAr_p1 zYqOD7TGOrPNat8X2Yr zb47y;^>TQ4?}UUBTuW!xrJk7ub?aK44b+oCL})rG{QwhFF7w~vdIpp1q|?8;O;SPg z?u^k>^#g4`qRAB|tm5cqZ1s!aW@vQ{Zz~oPoyF-XbTd8FFM^x-LT}m%rd!yfA|qQ* zhgF%dO3I_G*|&4AlCz(%=@^)-)Z7i7sfZk4dC2iKjutsS`OFJ2C(%C5V%qLBB+p6V zSGqV29l2@OQ5ZB}6AT-U(y6E+H4TWEl^ z?CJr{mj<2POenjVeKtq%7|cHA{634>AEE}88EnWHuq|q^(fYG_NQs~^Yf!F(!S<+% z{1Imj+RZ-9*TocIk7gg|Db2n`eh%W=|C8Z|Dr1k>n6g7#9VG1%YSQD?<7W@GwHkM* zs#<2$>9z()kf!f8!Rqr$b=xYS$ZIb17V!!OOYAdqjXSWJd+gAiAChYOj$oD8p=@u=j-BlLS4paSchpqU;9o<2lhfEcQ&NgUc zSJU(}6+?%7G!?@tg#p_TJ8Ppp!KjuY5`&DSh`?^D~khd?e#QK@IW0J!@--1bwW14SKb4X}~%sixni+YGjSL7Ik zl)Aaxk~)MViiW&!MxI#8qRR<7A(~me(KRyp)GhbgtI2lEdevU-x%qre_p#Am9kdg6 zlVWdk0u%gg7c^k&nO4D}KWR&8K2nq_d@e`~&CY3_4iW7-Lf4_L0P(F2&Dkdv+3r}^ z3$~rTU|gT|Z|m3&^1=8Z%|)_FMQk;jq5uD~7Sz@M-kwg;=6zb0Wa@S8ji07z4?5gt zS#ycHc)kzH66Zo{5=QEX3@Hs`Tuvv0I_hK!CL?J`Y0qeyIU3HfTn7pbn!ikgOW+P$ zt#_FAHWu8Ni>jw?ag%S7pC_=Q#{1;=JY;s8yztJi{6q)Jtyb!={vjitBg>hxPw&wH z;ojxTlF4zxC0DMwhq65lfU=VwYgb@NDo9y@vz)ml%-!FDYPB!Ef%P08kPqQc=5NT~qTh5W aUTd2m=~cWI9D@FA&EhBF!~X)V8AGj#3%+dt literal 5956 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 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 4ed63e07147e884a11c1adc5b033f4255536d059..ec2d884783ecc3cff072ede5666085cbab17bd92 100644 GIT binary patch literal 2818 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 literal 2656 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 diff --git a/libsrc/ffdec_lib/testdata/as3_cross_compile/build_air_debug.bat b/libsrc/ffdec_lib/testdata/as3_cross_compile/build_air_debug.bat index 35668d86d..248c9259b 100644 --- a/libsrc/ffdec_lib/testdata/as3_cross_compile/build_air_debug.bat +++ b/libsrc/ffdec_lib/testdata/as3_cross_compile/build_air_debug.bat @@ -1,4 +1,6 @@ @echo off set COMPILERKIND=air set SWFNAME=as3_cross_compile -call c:\air\bin\mxmlc.bat -warnings=false -debug=true -output bin/%SWFNAME%.%COMPILERKIND%.swf src/Main.as 1> buildlog.%COMPILERKIND%.txt 2>&1 \ No newline at end of file +call c:\air\bin\mxmlc.bat -warnings=false -debug=true -output bin/%SWFNAME%.%COMPILERKIND%.swf src/Main.as 1> buildlog.%COMPILERKIND%.txt 2>&1 +IF NOT ERRORLEVEL 0 echo "FAILED" +exit /b 0 \ No newline at end of file diff --git a/libsrc/ffdec_lib/testdata/as3_cross_compile/build_flex_apache_debug.bat b/libsrc/ffdec_lib/testdata/as3_cross_compile/build_flex_apache_debug.bat index 9254f2700..65d230c89 100644 --- a/libsrc/ffdec_lib/testdata/as3_cross_compile/build_flex_apache_debug.bat +++ b/libsrc/ffdec_lib/testdata/as3_cross_compile/build_flex_apache_debug.bat @@ -1,4 +1,6 @@ @echo off set COMPILERKIND=flex_apache set SWFNAME=as3_cross_compile -call c:\flex_apache\bin\mxmlc.bat -warnings=false -debug=true -output bin/%SWFNAME%.%COMPILERKIND%.swf src/Main.as 1> buildlog.%COMPILERKIND%.txt 2>&1 \ No newline at end of file +call c:\flex_apache\bin\mxmlc.bat -warnings=false -debug=true -output bin/%SWFNAME%.%COMPILERKIND%.swf src/Main.as 1> buildlog.%COMPILERKIND%.txt 2>&1 +IF NOT ERRORLEVEL 0 echo "FAILED" +exit /b 0 \ No newline at end of file diff --git a/libsrc/ffdec_lib/testdata/as3_cross_compile/build_flex_debug.bat b/libsrc/ffdec_lib/testdata/as3_cross_compile/build_flex_debug.bat index ef39749a8..e28a2256f 100644 --- a/libsrc/ffdec_lib/testdata/as3_cross_compile/build_flex_debug.bat +++ b/libsrc/ffdec_lib/testdata/as3_cross_compile/build_flex_debug.bat @@ -1,4 +1,6 @@ @echo off set COMPILERKIND=flex set SWFNAME=as3_cross_compile -c:\flex\bin\mxmlc.exe -warnings=false -debug=true -output bin/%SWFNAME%.%COMPILERKIND%.swf src/Main.as 1> buildlog.%COMPILERKIND%.txt 2>&1 \ No newline at end of file +c:\flex\bin\mxmlc.exe -warnings=false -debug=true -output bin/%SWFNAME%.%COMPILERKIND%.swf src/Main.as 1> buildlog.%COMPILERKIND%.txt 2>&1 +IF NOT ERRORLEVEL 0 echo "FAILED" +exit /b 0 \ No newline at end of file diff --git a/libsrc/ffdec_lib/testdata/as3_cross_compile/build_swftools_debug.bat b/libsrc/ffdec_lib/testdata/as3_cross_compile/build_swftools_debug.bat index 0330fc2fe..10c8a732d 100644 --- a/libsrc/ffdec_lib/testdata/as3_cross_compile/build_swftools_debug.bat +++ b/libsrc/ffdec_lib/testdata/as3_cross_compile/build_swftools_debug.bat @@ -2,4 +2,6 @@ set COMPILERKIND=swftools set SWFNAME=as3_cross_compile cd src -c:\swftools\as3compile.exe Main.as -o ..\bin\%SWFNAME%.%COMPILERKIND%.swf 1> ../buildlog.%COMPILERKIND%.txt 2>&1 \ No newline at end of file +c:\swftools\as3compile.exe Main.as -o ..\bin\%SWFNAME%.%COMPILERKIND%.swf 1> ../buildlog.%COMPILERKIND%.txt 2>&1 +IF NOT ERRORLEVEL 0 echo "FAILED" +exit /b 0 \ No newline at end of file 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 1660079f7..6d522439f 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,8 +3,6 @@ 25.0 - false - true CONFIG::debug @@ -16,7 +14,7 @@ CONFIG::timeStamp - '08.02.2021' + '09.02.2021' CONFIG::air diff --git a/libsrc/ffdec_lib/testdata/as3_cross_compile/obj/as3_cross_compileConfig.xml b/libsrc/ffdec_lib/testdata/as3_cross_compile/obj/as3_cross_compileConfig.xml index 1660079f7..8bd4a91f5 100644 --- a/libsrc/ffdec_lib/testdata/as3_cross_compile/obj/as3_cross_compileConfig.xml +++ b/libsrc/ffdec_lib/testdata/as3_cross_compile/obj/as3_cross_compileConfig.xml @@ -16,7 +16,7 @@ CONFIG::timeStamp - '08.02.2021' + '09.02.2021' CONFIG::air diff --git a/libsrc/ffdec_lib/testdata/as3_cross_compile/src/Main.as b/libsrc/ffdec_lib/testdata/as3_cross_compile/src/Main.as index c27286af8..db5b45843 100644 --- a/libsrc/ffdec_lib/testdata/as3_cross_compile/src/Main.as +++ b/libsrc/ffdec_lib/testdata/as3_cross_compile/src/Main.as @@ -21,6 +21,10 @@ package TestTryCatchInWhile5; TestTryCatchLoop; TestTryCatchLoopBreak; + TestTryCatchLoopBreak2; + TestTryCatchLoopBreak3; + TestTryCatchLoopBreak4; + TestTryCatchLoopBreak5; TestTryCatchExceptionUsage TestTryFinally; TestTryFinallyDirectReturnInFinally; diff --git a/libsrc/ffdec_lib/testdata/as3_cross_compile/src/tests/TestTryCatchLoopBreak4.as b/libsrc/ffdec_lib/testdata/as3_cross_compile/src/tests/TestTryCatchLoopBreak4.as new file mode 100644 index 000000000..b0b6a3f36 --- /dev/null +++ b/libsrc/ffdec_lib/testdata/as3_cross_compile/src/tests/TestTryCatchLoopBreak4.as @@ -0,0 +1,51 @@ +package tests +{ + import flash.errors.EOFError; + /** + * ... + * @author JPEXS + */ + public class TestTryCatchLoopBreak4 + { + + + public function run() : void + { + var a:int; + a = 0; + trace("before loop"); + while (true) { + try + { + trace("in try"); + } + catch(e:Error) + { + trace("in catch1"); + if (a > 5){ + trace("a"); + if (a > 6){ + trace("b"); + break; + } + trace("c"); + } + trace("in catch1b"); + if (a > 10){ + trace("d"); + if (a > 11){ + trace("e"); + break; + } + trace("f"); + } + trace("in catch1c"); + } + } + trace("after"); + + } + + } + +} \ No newline at end of file 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 new file mode 100644 index 000000000..14e6cdd33 --- /dev/null +++ b/libsrc/ffdec_lib/testdata/as3_cross_compile/src/tests/TestTryCatchLoopBreak5.as @@ -0,0 +1,39 @@ +package tests +{ + import flash.errors.EOFError; + /** + * ... + * @author JPEXS + */ + public class TestTryCatchLoopBreak5 + { + + + public function run() : void + { + var a:int; + a = 0; + trace("before loop"); + while (true) { + try + { + trace("in try"); + } + catch(e:Error) + { + trace("in catch1"); + while (true){ + if (a > 5){ + break; + } + } + trace("in catch1c"); + } + } + trace("after"); + + } + + } + +} \ No newline at end of file