AS3 try..catch..finally fixes

This commit is contained in:
Jindra Petřík
2021-02-05 18:05:25 +01:00
parent e37e6b7d9a
commit 34b69e83c3
15 changed files with 319 additions and 111 deletions

View File

@@ -408,6 +408,58 @@ public class ActionScript3CrossCompileDecompileTest extends ActionScript3Decompi
false);
}
@Test(dataProvider = "swfNamesProvider")
public void testTryFinallyReturnNested2(String swfUsed) {
decompileMethod(swfUsed, "testTryFinallyReturnNested2", "var a:int = Math.random() * 5;\r\n"
+ "try\r\n"
+ "{\r\n"
+ "try\r\n"
+ "{\r\n"
+ "try\r\n"
+ "{\r\n"
+ "trace(\"in try2\");\r\n"
+ "if(a > 4)\r\n"
+ "{\r\n"
+ "return \"RET\";\r\n"
+ "}\r\n"
+ "}\r\n"
+ "catch(e2:Error)\r\n"
+ "{\r\n"
+ "trace(\"in catch2:e\");\r\n"
+ "}\r\n"
+ "catch(e2:EOFError)\r\n"
+ "{\r\n"
+ "trace(\"in catch2:eof\");\r\n"
+ "}\r\n"
+ "finally\r\n"
+ "{\r\n"
+ "trace(\"in finally2\");\r\n"
+ "}\r\n"
+ "trace(\"after2\");\r\n"
+ "}\r\n"
+ "catch(e1:Error)\r\n"
+ "{\r\n"
+ "trace(\"in catch1:e\");\r\n"
+ "}\r\n"
+ "catch(e1:EOFError)\r\n"
+ "{\r\n"
+ "trace(\"in catch1:eof\");\r\n"
+ "}\r\n"
+ "finally\r\n"
+ "{\r\n"
+ "trace(\"in finally1\");\r\n"
+ "}\r\n"
+ "trace(\"after1\");\r\n"
+ "}\r\n"
+ "finally\r\n"
+ "{\r\n"
+ "trace(\"in finally0\");\r\n"
+ "}\r\n"
+ "trace(\"after0\");\r\n"
+ "return \"RETFINAL\";\r\n",
false);
}
@Test(dataProvider = "swfNamesProvider")
public void testTryFinallyReturnVoid(String swfUsed) {
decompileMethod(swfUsed, "testTryFinallyReturnVoid", "var a:int = Math.random() * 5;\r\n"

View File

@@ -305,15 +305,14 @@ public class ActionScript3CrossCompileSwfToolsDecompileTest extends ActionScript
+ "try\r\n"
+ "{\r\n"
+ "trace(\"in try\");\r\n"
+ "trace(\"in finally\");\r\n"
+ "trace(\"after\");\r\n"
+ "return;\r\n"
+ "}\r\n"
+ "catch(_loc_e_:*)\r\n"
+ "{\r\n"
+ "trace(\"in finally\");\r\n"
+ "throw _loc_e_;\r\n"
+ "}\r\n",
+ "}\r\n"
+ "trace(\"in finally\");\r\n"
+ "trace(\"after\");\r\n",
false);
}
@@ -420,14 +419,81 @@ public class ActionScript3CrossCompileSwfToolsDecompileTest extends ActionScript
+ "}\r\n"
+ "trace(\"in finally2\");\r\n"
+ "trace(\"after\");\r\n"
+ "trace(\"in finally1\");\r\n"
+ "return \"RETFINAL\";\r\n"
+ "}\r\n"
+ "catch(_loc_e_:*)\r\n"
+ "{\r\n"
+ "trace(\"in finally1\");\r\n"
+ "throw _loc_e_;\r\n"
+ "}\r\n",
+ "}\r\n"
+ "trace(\"in finally1\");\r\n"
+ "return \"RETFINAL\";\r\n",
false);
}
@Test
public void testTryFinallyReturnNested2() {
decompileMethod("swftools", "testTryFinallyReturnNested2", "var _loc1_:int = Math.random() * 5;\r\n"
+ "try\r\n"
+ "{\r\n"
+ "try\r\n"
+ "{\r\n"
+ "try\r\n"
+ "{\r\n"
+ "try\r\n"
+ "{\r\n"
+ "try\r\n"
+ "{\r\n"
+ "trace(\"in try2\");\r\n"
+ "if(_loc1_ > 4)\r\n"
+ "{\r\n"
+ "trace(\"in finally2\");\r\n"
+ "trace(\"in finally1\");\r\n"
+ "trace(\"in finally0\");\r\n"
+ "return \"RET\";\r\n"
+ "}\r\n"
+ "}\r\n"
+ "catch(e2:Error)\r\n"
+ "{\r\n"
+ "trace(\"in catch2:e\");\r\n"
+ "}\r\n"
+ "catch(e2:EOFError)\r\n"
+ "{\r\n"
+ "trace(\"in catch2:eof\");\r\n"
+ "}\r\n"
+ "}\r\n"
+ "catch(_loc_e_:*)\r\n"
+ "{\r\n"
+ "trace(\"in finally2\");\r\n"
+ "throw _loc_e_;\r\n"
+ "}\r\n"
+ "trace(\"in finally2\");\r\n"
+ "trace(\"after2\");\r\n"
+ "}\r\n"
+ "catch(e1:Error)\r\n"
+ "{\r\n"
+ "trace(\"in catch1:e\");\r\n"
+ "}\r\n"
+ "catch(e1:EOFError)\r\n"
+ "{\r\n"
+ "trace(\"in catch1:eof\");\r\n"
+ "}\r\n"
+ "}\r\n"
+ "catch(_loc_e_:*)\r\n"
+ "{\r\n"
+ "trace(\"in finally1\");\r\n"
+ "throw _loc_e_;\r\n"
+ "}\r\n"
+ "trace(\"in finally1\");\r\n"
+ "trace(\"after1\");\r\n"
+ "}\r\n"
+ "catch(_loc_e_:*)\r\n"
+ "{\r\n"
+ "trace(\"in finally0\");\r\n"
+ "throw _loc_e_;\r\n"
+ "}\r\n"
+ "trace(\"in finally0\");\r\n"
+ "trace(\"after0\");\r\n"
+ "return \"RETFINAL\";\r\n",
false);
}