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 971d8262c..df2dbcbdc 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 @@ -1067,7 +1067,7 @@ public class AVM2Graph extends Graph { } } - if (afterPart == null && localData.pushDefaultPart.containsKey(finallyIndex)) { + if (localData.pushDefaultPart.containsKey(finallyIndex)) { exAfterPart = localData.pushDefaultPart.get(finallyIndex); tryStopPart.add(exAfterPart); } 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 8eede398e..9dcd2dbe7 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/Graph.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/Graph.java @@ -238,15 +238,14 @@ public class Graph { GraphPartQueue newParts = new GraphPartQueue(); List nextParts = new ArrayList<>(getNextParts(localData, part)); - /* - !!THROW + for (ThrowState ts : throwStates) { if (ts.state != 1) { if (ts.throwingParts.contains(part)) { newParts.add(ts.targetPart); } } - }*/ + } loopnext: for (GraphPart nextRaw : nextParts) { 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 a4cdf7ec3..a8d265996 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 @@ -94,6 +94,36 @@ public class ActionScript3CrossCompileDecompileTest extends ActionScript3Decompi false); } + @Test(dataProvider = "swfNamesProvider") + public void testTryCatchInIf2(String swfUsed) { + decompileMethod(swfUsed, "testTryCatchInIf2", "var a:int = Math.random();\r\n" + + "if(a > 10)\r\n" + + "{\r\n" + + "try\r\n" + + "{\r\n" + + "trace(\"a\");\r\n" + + "return;\r\n" + + "}\r\n" + + "catch(e:Error)\r\n" + + "{\r\n" + + "trace(\"in catch 1\");\r\n" + + "}\r\n" + + "}\r\n" + + "else\r\n" + + "{\r\n" + + "try\r\n" + + "{\r\n" + + "trace(\"b\");\r\n" + + "}\r\n" + + "catch(e:Error)\r\n" + + "{\r\n" + + "trace(\"in catch 2\");\r\n" + + "}\r\n" + + "}\r\n" + + "trace(\"after\");\r\n", + false); + } + @Test(dataProvider = "swfNamesProvider") public void testTryCatchInWhile(String swfUsed) { decompileMethod(swfUsed, "testTryCatchInWhile", "trace(\"before loop\");\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 9debb23b6..99a721e4e 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 @@ -85,6 +85,36 @@ public class ActionScript3CrossCompileSwfToolsDecompileTest extends ActionScript false); } + @Test + public void testTryCatchInIf2() { + decompileMethod("swftools", "testTryCatchInIf2", "var _loc1_:int = Math.random();\r\n" + + "if(_loc1_ > 10)\r\n" + + "{\r\n" + + "try\r\n" + + "{\r\n" + + "trace(\"a\");\r\n" + + "return;\r\n" + + "}\r\n" + + "catch(e:Error)\r\n" + + "{\r\n" + + "trace(\"in catch 1\");\r\n" + + "}\r\n" + + "}\r\n" + + "else\r\n" + + "{\r\n" + + "try\r\n" + + "{\r\n" + + "trace(\"b\");\r\n" + + "}\r\n" + + "catch(e:Error)\r\n" + + "{\r\n" + + "trace(\"in catch 2\");\r\n" + + "}\r\n" + + "}\r\n" + + "trace(\"after\");\r\n", + false); + } + @Test public void testTryCatchInWhile() { decompileMethod("swftools", "testTryCatchInWhile", "trace(\"before loop\");\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 6a755b405..67f0f25ff 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 30778553b..0a1c9d1bd 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 d288e12f1..c63264c62 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 809e9c2ef..4ed63e071 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 f1bdc684d..c27286af8 100644 --- a/libsrc/ffdec_lib/testdata/as3_cross_compile/src/Main.as +++ b/libsrc/ffdec_lib/testdata/as3_cross_compile/src/Main.as @@ -13,6 +13,7 @@ package TestTryCatch; TestTryCatchIfInTry; TestTryCatchInIf; + TestTryCatchInIf2; TestTryCatchInWhile; TestTryCatchInWhile2; TestTryCatchInWhile3; diff --git a/libsrc/ffdec_lib/testdata/as3_cross_compile/src/tests/TestTryCatchInIf2.as b/libsrc/ffdec_lib/testdata/as3_cross_compile/src/tests/TestTryCatchInIf2.as new file mode 100644 index 000000000..e15618c4d --- /dev/null +++ b/libsrc/ffdec_lib/testdata/as3_cross_compile/src/tests/TestTryCatchInIf2.as @@ -0,0 +1,43 @@ +package tests +{ + + /** + * ... + * @author JPEXS + */ + public class TestTryCatchInIf2 + { + + public function run():void + { + var a:int = Math.random(); + + if (a > 10) + { + try + { + trace("a"); + return; + } + catch (e:Error) + { + trace("in catch 1"); + } + } + else + { + try + { + trace("b"); + } + catch (e:Error) + { + trace("in catch 2"); + } + } + trace("after"); + } + + } + +} \ No newline at end of file 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 4899d5129..101648f67 100644 Binary files a/libsrc/ffdec_lib/testdata/as3_new/bin/as3_new.flex.swf and b/libsrc/ffdec_lib/testdata/as3_new/bin/as3_new.flex.swf differ 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 14adab912..08793c51d 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"); } } } \ No newline at end of file