diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/clauses/TryAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/clauses/TryAVM2Item.java index 8851f7560..c602d0048 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/clauses/TryAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/clauses/TryAVM2Item.java @@ -105,7 +105,7 @@ public class TryAVM2Item extends AVM2Item implements Block { List commands = catchCommands.get(e); appendBlock(null, writer, localData, commands); } - if (finallyCommands.size() > 0) { + if (catchExceptions.isEmpty() || finallyCommands.size() > 0) { writer.newLine(); writer.append("finally"); appendBlock(null, writer, localData, finallyCommands); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/clauses/TryActionItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/clauses/TryActionItem.java index bfa4edeb7..25be62d9c 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/clauses/TryActionItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/clauses/TryActionItem.java @@ -86,7 +86,7 @@ public class TryActionItem extends ActionItem implements Block { List commands = catchCommands.get(e); appendBlock(null, writer, localData, commands); } - if (finallyCommands.size() > 0) { + if (catchExceptions.isEmpty() || finallyCommands.size() > 0) { writer.newLine(); writer.append("finally"); appendBlock(null, writer, localData, finallyCommands); diff --git a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/ActionScript3Test.java b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/ActionScript3Test.java index 6d86b2cca..d844bc9fd 100644 --- a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/ActionScript3Test.java +++ b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/ActionScript3Test.java @@ -438,6 +438,17 @@ public class ActionScript3Test extends ActionScriptTestBase { + "trace(\"end\");\r\n", false); } + //@Test //todo: enable test + public void testTryShouldHaveCatchOrFinally() { + decompileMethod("testTryShouldHaveCatchOrFinally", "try\r\n" + + "{\r\n" + + "trace(\"try body\");\r\n" + + "}\r\n" + + "finally\n\n" + + "{\r\n" + + "}\r\n", false); + } + @Test public void testSwitch() { decompileMethod("testSwitch", "var a:* = 5;\r\n" diff --git a/libsrc/ffdec_lib/testdata/as3/classes/Test.as b/libsrc/ffdec_lib/testdata/as3/classes/Test.as index 32062dc88..bdda10830 100644 --- a/libsrc/ffdec_lib/testdata/as3/classes/Test.as +++ b/libsrc/ffdec_lib/testdata/as3/classes/Test.as @@ -345,6 +345,16 @@ import classes.TestNs; trace("end"); } + public function testTryShouldHaveCatchOrFinally() { + try + { + trace("try body"); + } + finally + { + } + } + public function testSwitch() { var a=5;