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 c22f6cc64..924592ae6 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/Graph.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/Graph.java @@ -1328,9 +1328,9 @@ public class Graph { } List loops2 = new ArrayList<>(loops); - /*for (Loop l : loops2) { + 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; @@ -1339,9 +1339,9 @@ public class Graph { } } } - /*for (Loop l : loops2) { + for (Loop l : loops2) { l.breakCandidatesLocked--; - }*/ + } if (isLoop && currentLoop != null) { GraphPart found; 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 a114d4ae8..9a33aab15 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 @@ -203,6 +203,31 @@ public class ActionScript3CrossCompileDecompileTest extends ActionScript3Decompi false); } + @Test(dataProvider = "swfNamesProvider") + public void testTryCatchInWhile5(String swfUsed) { + decompileMethod(swfUsed, "testTryCatchInWhile5", "var i:int = 0;\r\n" + + "var j:int = 0;\r\n" + + "i = 0;\r\n" + + "j = 5;\r\n" + + "while(i < 10)\r\n" + + "{\r\n" + + "try\r\n" + + "{\r\n" + + "trace(\"in try\");\r\n" + + "}\r\n" + + "catch(e:Error)\r\n" + + "{\r\n" + + "if(j > 4)\r\n" + + "{\r\n" + + "throw new Error(\"Problem: \" + e);\r\n" + + "}\r\n" + + "}\r\n" + + "i++;\r\n" + + "}\r\n" + + "trace(\"after\");\r\n", + false); + } + @Test(dataProvider = "swfNamesProvider") public void testTryCatchLoop(String swfUsed) { decompileMethod(swfUsed, "testTryCatchLoop", "var j:int = 0;\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 f8636d176..4a3862c2d 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 @@ -194,6 +194,32 @@ public class ActionScript3CrossCompileSwfToolsDecompileTest extends ActionScript false); } + @Test + public void testTryCatchInWhile5() { + decompileMethod("swftools", "testTryCatchInWhile5", "var _loc1_:int = 0;\r\n" + + "_loc1_ = 0;\r\n" + + "var _loc2_:int = 0;\r\n" + + "_loc2_ = 5;\r\n" + + "while(_loc1_ < 10)\r\n" + + "{\r\n" + + "try\r\n" + + "{\r\n" + + "trace(\"in try\");\r\n" + + "}\r\n" + + "catch(e:Error)\r\n" + + "{\r\n" + + "var _loc3_:* = e;\r\n" + + "if(_loc2_ > 4)\r\n" + + "{\r\n" + + "throw new Error(\"Problem: \" + _loc3_);\r\n" + + "}\r\n" + + "}\r\n" + + "_loc1_++;\r\n" + + "}\r\n" + + "trace(\"after\");\r\n", + false); + } + @Test public void testTryCatchLoop() { decompileMethod("swftools", "testTryCatchLoop", "var _loc1_:int = 0;\r\n" 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 3cfaf17dd..6d0bdbefd 100644 Binary files a/libsrc/ffdec_lib/testdata/as3_cross_compile/bin/as3_cross_compile.air.swf and b/libsrc/ffdec_lib/testdata/as3_cross_compile/bin/as3_cross_compile.air.swf differ 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 597cea95d..da0daa04d 100644 Binary files a/libsrc/ffdec_lib/testdata/as3_cross_compile/bin/as3_cross_compile.flex.swf and b/libsrc/ffdec_lib/testdata/as3_cross_compile/bin/as3_cross_compile.flex.swf differ 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 9aec6df3b..4a016eb05 100644 Binary files a/libsrc/ffdec_lib/testdata/as3_cross_compile/bin/as3_cross_compile.flex_apache.swf and b/libsrc/ffdec_lib/testdata/as3_cross_compile/bin/as3_cross_compile.flex_apache.swf differ 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 8cec9a9e4..e188afc72 100644 Binary files a/libsrc/ffdec_lib/testdata/as3_cross_compile/bin/as3_cross_compile.swftools.swf and b/libsrc/ffdec_lib/testdata/as3_cross_compile/bin/as3_cross_compile.swftools.swf differ 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 eece0b7e7..67443d627 100644 --- a/libsrc/ffdec_lib/testdata/as3_cross_compile/src/Main.as +++ b/libsrc/ffdec_lib/testdata/as3_cross_compile/src/Main.as @@ -17,6 +17,7 @@ package TestTryCatchInWhile2; TestTryCatchInWhile3; TestTryCatchInWhile4; + TestTryCatchInWhile5; TestTryCatchLoop; TestTryCatchLoopBreak; TestTryCatchExceptionUsage diff --git a/libsrc/ffdec_lib/testdata/as3_cross_compile/src/tests/TestTryCatchInWhile3.as b/libsrc/ffdec_lib/testdata/as3_cross_compile/src/tests/TestTryCatchInWhile3.as index 3710d51dc..7ece8bd95 100644 --- a/libsrc/ffdec_lib/testdata/as3_cross_compile/src/tests/TestTryCatchInWhile3.as +++ b/libsrc/ffdec_lib/testdata/as3_cross_compile/src/tests/TestTryCatchInWhile3.as @@ -12,20 +12,20 @@ package tests { var a:int; a = 0; - trace("before loop"); //1-17 - while (a > 5) //44-47 + trace("before loop"); + while (a > 5) { try { - return "intry return"; //20-23 + return "intry return"; } catch(e:Error) { - trace("in catch"); //26-43 + trace("in catch"); } - a++; //26-43 cont. + a++; } - return "OK";//48-50 + return "OK"; } } diff --git a/libsrc/ffdec_lib/testdata/as3_cross_compile/src/tests/TestTryCatchInWhile4.as b/libsrc/ffdec_lib/testdata/as3_cross_compile/src/tests/TestTryCatchInWhile4.as index eb7f0b5d0..6f7489195 100644 --- a/libsrc/ffdec_lib/testdata/as3_cross_compile/src/tests/TestTryCatchInWhile4.as +++ b/libsrc/ffdec_lib/testdata/as3_cross_compile/src/tests/TestTryCatchInWhile4.as @@ -16,7 +16,7 @@ package tests try { - trace("try2"); //12-21 + trace("try2"); if (a == 10){ trace("br"); break; @@ -29,7 +29,7 @@ package tests } trace("a=" + a); } - trace("after"); //61-66 + trace("after"); } } diff --git a/libsrc/ffdec_lib/testdata/as3_cross_compile/src/tests/TestTryCatchInWhile5.as b/libsrc/ffdec_lib/testdata/as3_cross_compile/src/tests/TestTryCatchInWhile5.as new file mode 100644 index 000000000..4cc97cc8b --- /dev/null +++ b/libsrc/ffdec_lib/testdata/as3_cross_compile/src/tests/TestTryCatchInWhile5.as @@ -0,0 +1,36 @@ +package tests +{ + /** + * ... + * @author JPEXS + */ + public class TestTryCatchInWhile5 + { + + public function run() : void + { + var i:int; + i = 0; + var j:int; + j = 5; + while(i < 10) + { + try + { + trace("in try"); + } + catch (e:Error) + { + if (j > 4) { + throw new Error("Problem: "+e); + } + } + i++; + } + + trace("after"); + } + + } + +} \ No newline at end of file