From 86df7c47987fb8e502d5bb81619687598d77ed93 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=C5=99=C3=ADk?= Date: Sun, 7 Feb 2021 11:43:47 +0100 Subject: [PATCH] added tests --- .../ActionScript3AssembledDecompileTest.java | 47 ++++- .../ActionScript3ClassicAirDecompileTest.java | 54 +++++ .../ActionScript3ClassicDecompileTest.java | 54 +++++ ...ctionScript3CrossCompileDecompileTest.java | 89 ++++++++ ...ipt3CrossCompileSwfToolsDecompileTest.java | 141 +++++++++++++ .../as3_assembled-0/as3_assembled-0.main.abc | Bin 3846 -> 4331 bytes .../as3_assembled-0.main.asasm | 1 + .../tests/TestSwitchJoin.class.asasm | 195 ++++++++++++++++++ .../tests/TestSwitchJoin.script.asasm | 29 +++ .../as3_assembled/bin/as3_assembled.swf | Bin 2462 -> 2721 bytes 10 files changed, 609 insertions(+), 1 deletion(-) create mode 100644 libsrc/ffdec_lib/testdata/as3_assembled/abc/as3_assembled-0/tests/TestSwitchJoin.class.asasm create mode 100644 libsrc/ffdec_lib/testdata/as3_assembled/abc/as3_assembled-0/tests/TestSwitchJoin.script.asasm 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 70869bd41..40ef974d1 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 @@ -122,7 +122,6 @@ public class ActionScript3AssembledDecompileTest extends ActionScript3DecompileT + "case 0:\r\n" + "var _loc2_:String = \"X\";\r\n" + "return;\r\n" - //+ "break;\r\n" + "case 1:\r\n" + "_loc2_ = \"A\";\r\n" + "break;\r\n" @@ -159,6 +158,52 @@ public class ActionScript3AssembledDecompileTest extends ActionScript3DecompileT false); } + @Test + public void testSwitchJoin() { + decompileMethod("assembled", "testSwitchJoin", "trace(\"before\");\r\n" + + "var _loc2_:int = 57;\r\n" + + "switch(_loc2_)\r\n" + + "{\r\n" + + "case 0:\r\n" + + "case 3:\r\n" + + "trace(\"0-3\");\r\n" + + "break;\r\n" + + "case 1:\r\n" + + "case 6:\r\n" + + "trace(\"1-6\");\r\n" + + "addr106:\r\n" + + "trace(\"F\");\r\n" + + "break;\r\n" + + "case 5:\r\n" + + "trace(\"5\");\r\n" + + "addr103:\r\n" + + "trace(\"E\");\r\n" + + "§§goto(addr106);\r\n" + + "case 7:\r\n" + + "trace(\"7\");\r\n" + + "addr100:\r\n" + + "trace(\"D\");\r\n" + + "§§goto(addr103);\r\n" + + "case 2:\r\n" + + "trace(\"2\");\r\n" + + "addr97:\r\n" + + "trace(\"C\");\r\n" + + "§§goto(addr100);\r\n" + + "case 8:\r\n" + + "trace(\"8\");\r\n" + + "addr94:\r\n" + + "trace(\"B\");\r\n" + + "§§goto(addr97);\r\n" + + "default:\r\n" + + "trace(\"def\");\r\n" + + "trace(\"A\");\r\n" + + "§§goto(addr94);\r\n" + + "}\r\n" + + "trace(\"G\");\r\n" + + "return null;\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/ActionScript3ClassicAirDecompileTest.java b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3ClassicAirDecompileTest.java index 6565c9fec..eabdc7eb1 100644 --- a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3ClassicAirDecompileTest.java +++ b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3ClassicAirDecompileTest.java @@ -203,6 +203,38 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile false); } + @Test + public void testDeobfuscation() { + decompileMethod("classic_air", "testDeobfuscation", "var r:int = Math.random();\r\n" + + "var t:Boolean = true;\r\n" + + "var f:Boolean = false;\r\n" + + "if(r > 5 && t)\r\n" + + "{\r\n" + + "trace(\"A\");\r\n" + + "}\r\n" + + "if(r > 10 || f)\r\n" + + "{\r\n" + + "trace(\"B\");\r\n" + + "}\r\n" + + "if(t && r > 15)\r\n" + + "{\r\n" + + "trace(\"C\");\r\n" + + "}\r\n" + + "if(f || r > 20)\r\n" + + "{\r\n" + + "trace(\"D\");\r\n" + + "}\r\n" + + "if(f)\r\n" + + "{\r\n" + + "trace(\"trash1\");\r\n" + + "}\r\n" + + "if(!t)\r\n" + + "{\r\n" + + "trace(\"trash2\");\r\n" + + "}\r\n", + false); + } + @Test public void testDoWhile() { decompileMethod("classic_air", "testDoWhile", "var a:int = 8;\r\n" @@ -740,6 +772,28 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile false); } + @Test + public void testIgnoreAndOr() { + decompileMethod("classic_air", "testIgnoreAndOr", "var k:int = Math.random();\r\n" + + "if(k > 5)\r\n" + + "{\r\n" + + "trace(\"A\");\r\n" + + "}\r\n" + + "if(k > 10)\r\n" + + "{\r\n" + + "trace(\"B\");\r\n" + + "}\r\n" + + "if(k > 15)\r\n" + + "{\r\n" + + "trace(\"C\");\r\n" + + "}\r\n" + + "if(k > 20)\r\n" + + "{\r\n" + + "trace(\"D\");\r\n" + + "}\r\n", + false); + } + @Test public void testInc2() { decompileMethod("classic_air", "testInc2", "var a:* = [1];\r\n" diff --git a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3ClassicDecompileTest.java b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3ClassicDecompileTest.java index 5e5dc9fe0..107282e99 100644 --- a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3ClassicDecompileTest.java +++ b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3ClassicDecompileTest.java @@ -201,6 +201,38 @@ public class ActionScript3ClassicDecompileTest extends ActionScript3DecompileTes false); } + @Test + public void testDeobfuscation() { + decompileMethod("classic", "testDeobfuscation", "var r:int = Math.random();\r\n" + + "var t:Boolean = true;\r\n" + + "var f:Boolean = false;\r\n" + + "if(r > 5 && t)\r\n" + + "{\r\n" + + "trace(\"A\");\r\n" + + "}\r\n" + + "if(r > 10 || f)\r\n" + + "{\r\n" + + "trace(\"B\");\r\n" + + "}\r\n" + + "if(t && r > 15)\r\n" + + "{\r\n" + + "trace(\"C\");\r\n" + + "}\r\n" + + "if(f || r > 20)\r\n" + + "{\r\n" + + "trace(\"D\");\r\n" + + "}\r\n" + + "if(f)\r\n" + + "{\r\n" + + "trace(\"trash1\");\r\n" + + "}\r\n" + + "if(!t)\r\n" + + "{\r\n" + + "trace(\"trash2\");\r\n" + + "}\r\n", + false); + } + @Test public void testDoWhile() { decompileMethod("classic", "testDoWhile", "var a:* = 8;\r\n" @@ -731,6 +763,28 @@ public class ActionScript3ClassicDecompileTest extends ActionScript3DecompileTes false); } + @Test + public void testIgnoreAndOr() { + decompileMethod("classic", "testIgnoreAndOr", "var k:int = Math.random();\r\n" + + "if(k > 5)\r\n" + + "{\r\n" + + "trace(\"A\");\r\n" + + "}\r\n" + + "if(k > 10)\r\n" + + "{\r\n" + + "trace(\"B\");\r\n" + + "}\r\n" + + "if(k > 15)\r\n" + + "{\r\n" + + "trace(\"C\");\r\n" + + "}\r\n" + + "if(k > 20)\r\n" + + "{\r\n" + + "trace(\"D\");\r\n" + + "}\r\n", + false); + } + @Test public void testInc2() { decompileMethod("classic", "testInc2", "var a:* = [1];\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 d325840b0..71fd19103 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 @@ -77,6 +77,23 @@ public class ActionScript3CrossCompileDecompileTest extends ActionScript3Decompi false); } + @Test(dataProvider = "swfNamesProvider") + public void testTryCatchInIf(String swfUsed) { + decompileMethod(swfUsed, "testTryCatchInIf", "var a:int = Math.random();\r\n" + + "if(a > 10)\r\n" + + "{\r\n" + + "try\r\n" + + "{\r\n" + + "return 1;\r\n" + + "}\r\n" + + "catch(e:Error)\r\n" + + "{\r\n" + + "}\r\n" + + "}\r\n" + + "return 2;\r\n", + false); + } + @Test(dataProvider = "swfNamesProvider") public void testTryCatchInWhile(String swfUsed) { decompileMethod(swfUsed, "testTryCatchInWhile", "trace(\"before loop\");\r\n" @@ -139,6 +156,55 @@ public class ActionScript3CrossCompileDecompileTest extends ActionScript3Decompi false); } + @Test(dataProvider = "swfNamesProvider") + public void testTryCatchInWhile3(String swfUsed) { + decompileMethod(swfUsed, "testTryCatchInWhile3", "var a:int = 0;\r\n" + + "a = 0;\r\n" + + "trace(\"before loop\");\r\n" + + "while(a > 5)\r\n" + + "{\r\n" + + "try\r\n" + + "{\r\n" + + "return \"intry return\";\r\n" + + "}\r\n" + + "catch(e:Error)\r\n" + + "{\r\n" + + "trace(\"in catch\");\r\n" + + "a++;\r\n" + + "continue;\r\n" + + "}\r\n" + + "}\r\n" + + "return \"OK\";\r\n", + false); + } + + @Test(dataProvider = "swfNamesProvider") + public void testTryCatchInWhile4(String swfUsed) { + decompileMethod(swfUsed, "testTryCatchInWhile4", "var a:int = 0;\r\n" + + "a = 0;\r\n" + + "while(true)\r\n" + + "{\r\n" + + "try\r\n" + + "{\r\n" + + "trace(\"try2\");\r\n" + + "if(a == 10)\r\n" + + "{\r\n" + + "trace(\"br\");\r\n" + + "break;\r\n" + + "}\r\n" + + "return;\r\n" + + "}\r\n" + + "catch(e:Error)\r\n" + + "{\r\n" + + "trace(\"in catch2\");\r\n" + + "trace(\"a=\" + a);\r\n" + + "continue;\r\n" + + "}\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" @@ -169,6 +235,29 @@ public class ActionScript3CrossCompileDecompileTest extends ActionScript3Decompi false); } + @Test(dataProvider = "swfNamesProvider") + public void testTryCatchLoopBreak(String swfUsed) { + decompileMethod(swfUsed, "testTryCatchLoopBreak", "var a:int = 0;\r\n" + + "a = 0;\r\n" + + "trace(\"before loop\");\r\n" + + "try\r\n" + + "{\r\n" + + "trace(\"in try1\");\r\n" + + "while(a < 10)\r\n" + + "{\r\n" + + "trace(\"a=\" + a);\r\n" + + "a++;\r\n" + + "}\r\n" + + "trace(\"in try2\");\r\n" + + "}\r\n" + + "catch(e:Error)\r\n" + + "{\r\n" + + "trace(\"in catch\");\r\n" + + "}\r\n" + + "trace(\"after\");\r\n", + false); + } + @Test(dataProvider = "swfNamesProvider") public void testTryFinally(String swfUsed) { decompileMethod(swfUsed, "testTryFinally", "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 c9f7b2197..36510089d 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 @@ -68,6 +68,23 @@ public class ActionScript3CrossCompileSwfToolsDecompileTest extends ActionScript false); } + @Test + public void testTryCatchInIf() { + decompileMethod("swftools", "testTryCatchInIf", "var _loc1_:int = Math.random();\r\n" + + "if(_loc1_ > 10)\r\n" + + "{\r\n" + + "try\r\n" + + "{\r\n" + + "return 1;\r\n" + + "}\r\n" + + "catch(e:Error)\r\n" + + "{\r\n" + + "}\r\n" + + "}\r\n" + + "return 2;\r\n", + false); + } + @Test public void testTryCatchInWhile() { decompileMethod("swftools", "testTryCatchInWhile", "trace(\"before loop\");\r\n" @@ -130,6 +147,57 @@ public class ActionScript3CrossCompileSwfToolsDecompileTest extends ActionScript false); } + @Test + public void testTryCatchInWhile3() { + decompileMethod("swftools", "testTryCatchInWhile3", "var _loc1_:int = 0;\r\n" + + "_loc1_ = 0;\r\n" + + "trace(\"before loop\");\r\n" + + "for(; _loc1_ > 5; §§goto(addr15))\r\n" + + "{\r\n" + + "try\r\n" + + "{\r\n" + + "return \"intry return\";\r\n" + + "}\r\n" + + "catch(e:Error)\r\n" + + "{\r\n" + + "addr15:\r\n" + + "trace(\"in catch\");\r\n" + + "_loc1_++;\r\n" + + "continue;\r\n" + + "}\r\n" + + "}\r\n" + + "return \"OK\";\r\n", + false); + } + + @Test + public void testTryCatchInWhile4() { + decompileMethod("swftools", "testTryCatchInWhile4", "var _loc1_:int = 0;\r\n" + + "_loc1_ = 0;\r\n" + + "for(; true; §§goto(addr23))\r\n" + + "{\r\n" + + "try\r\n" + + "{\r\n" + + "trace(\"try2\");\r\n" + + "if(_loc1_ == 10)\r\n" + + "{\r\n" + + "trace(\"br\");\r\n" + + "break;\r\n" + + "}\r\n" + + "return;\r\n" + + "}\r\n" + + "catch(e:Error)\r\n" + + "{\r\n" + + "addr23:\r\n" + + "trace(\"in catch2\");\r\n" + + "trace(\"a=\" + _loc1_);\r\n" + + "continue;\r\n" + + "}\r\n" + + "}\r\n" + + "trace(\"after\");\r\n", + false); + } + @Test public void testTryCatchLoop() { decompileMethod("swftools", "testTryCatchLoop", "var _loc1_:int = 0;\r\n" @@ -159,6 +227,79 @@ public class ActionScript3CrossCompileSwfToolsDecompileTest extends ActionScript false); } + @Test + public void testTryCatchLoopBreak() { + decompileMethod("swftools", "testTryCatchLoopBreak", "var _loc1_:int = 0;\r\n" + + "_loc1_ = 0;\r\n" + + "trace(\"before loop\");\r\n" + + "try\r\n" + + "{\r\n" + + "trace(\"in try1\");\r\n" + + "while(_loc1_ < 10)\r\n" + + "{\r\n" + + "trace(\"a=\" + _loc1_);\r\n" + + "_loc1_++;\r\n" + + "}\r\n" + + "trace(\"in try2\");\r\n" + + "}\r\n" + + "catch(e:Error)\r\n" + + "{\r\n" + + "trace(\"in catch\");\r\n" + + "}\r\n" + + "trace(\"after\");\r\n", + false); + } + + @Test + public void testTryCatchLoopBreak2() { + decompileMethod("swftools", "testTryCatchLoopBreak2", "var _loc1_:int = 0;\r\n" + + "_loc1_ = 0;\r\n" + + "trace(\"before loop\");\r\n" + + "for(; _loc1_ < 20; §§goto(addr17))\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" + + "addr17:\r\n" + + "trace(\"in catch\");\r\n" + + "trace(\"a=\" + _loc1_);\r\n" + + "continue;\r\n" + + "}\r\n" + + "}\r\n" + + "trace(\"after\");\r\n", + false); + } + + @Test + public void testTryCatchLoopBreak3() { + decompileMethod("swftools", "testTryCatchLoopBreak3", "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" + + "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 public void testTryFinally() { decompileMethod("swftools", "testTryFinally", "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 58cd749cabed3d1be6217475bb9f3523b90385c8..7e800452da4bed6c5bb9a5cd25dd83e1922fa432 100644 GIT binary patch delta 1756 zcmYk6O-vg{6vyA2{g@pa%t8`-Sz|tJz-CPr^9><<84O8?lRy$e0vHn;NCQM6RTWhc zQKYojM02TBDZTg59@<+^z4qjgiuTxB4yn{rFS%@Iva;0mO7Hi7|K~URW>))E^M|%> z6M8{hkMw-;L23Jmess8BIyh37w)PIRt@4x7W58*g!P(dCe+HJn*n6_Qd+BiR;Pt4RfPe{Hd|7*&hsYA)}uoiAJu0-0x(;A2$3C~BgNX$|+u-a|Kp0Q``tUYJv_+M(2 z|D)PiR+b`+scf9E+k|!Klr~XgjT-l8=QWBW6c;I8r+ABEE5!|phg5T@mZn-i zWsEYHb`8?*AsSq!$(vLiWqe0ZYj}H!EHrFtgk2xbky zdRL*doT!u=^IaqdKor6PbrpBLyPEEnX@wvf9Tm3(1>zP)-NK+-7^5~ul5pf}UAP0a=XR-{Fv znGZi&VYa(wpUpV5XNfeavS_p*`OZIlv2m21Kj%cVvB*zX+zI9inalutOJqOVwYK{v7`;m`b)3wfPo& zK9)*t2g(Dlih=U^S9w?NP)D`;x~!h(u^K1R{5juh7G77?Ta{jp7izNl4T%f<`RA8_Ku{|{w}9c(oTI-ymFMM95mgb5m#2<;D!TVqyWf?4F7a<_ z2b?Ar-X`-Ww zkVDgP?HG(#yKKlVS5`x@-3WgaN*<$gX&y0I!u4o5I^PE`_HkYGk~ve%QE}h8Ymhok zxng&P5tWAc;FRzo#_xwuJWnK5narWx-f741A|SwIb-7Ks+|p`YY}XRwPKnn`RVuE) zX+%}iE5~kSQJgBw5LMNFBo$XY_k?(EbHyJjF1Z#z4VaMp(a(2De(!U)DpD zNy$I>d{OeZ0P)e&lRx6{&ejEkxpORn;wv=Qgg{>qb4du@7m7J0gysv?>=%OiLNhys zAimJeMj;GeP(4+xI+SirIDXoFY&^ i7=GySL$4qD{E!i$bpc?uy4CA)tFNw_vE8uP(Ek88S3m~< delta 1371 zcmXw$%TF6u6vofFo|!Y(HpbyGGYr^(d3rpUv3Z9iym4M+l0XO{F&I-@G%9J;q^m9x zRZ6=}b$3}-s#JB`zo4rwYgnL4Ro7iqk+SZF-dkzz$htqB?>pc1z2~37Z?m~H6hW@K z5!RnKj$ausKR<1}c&Tk2efmN_YQAcG3Ez+ZA=>eIH?E{s*4H=I4|l@D?VXj%2Cm|o zc#k9ESG2^Rxb@2v`;Lj^V=Iednq3%&9sD&Y_#_7GLPoI4^$G zcX9`WNZ3zUBfLw)lVq+E#t4^*nZ!7;xNwZ&*W6)*ql9_F5@DHeh0rCuLpo7ngAy*~ z`}iQ^hQONam·=7dlGzE0BsPXb~dfhCcr zKt~P1Xh%K?Tw%No`2@5nOr?+);flhJH1Ytt6h%TZ8sxc{`KGT0uqKTE4|VD`?$ zlK|Dx+DLP_)pWv9CVec%c)Yz8RL7$7m@3DZj2dbM4X9yIn-6N!L2Wju%>=c9ptiLK zng7=bRX}{?C42ll97owkvMr|49;mh(Vm>}+^%jnLrId)I9VIP^xABJYP~o!p7%!H+ zV@h`b@H*Aap*L5(W8>_+u7`fCOy-rpFE3?6XOyt5+E&E<#G*YE4naj~cBDO0+N$^= zQ7#PnmAdY|G0zI87?xOVFf2m_a1qdi-pK!0`Pal{Vxl)EeK!GfhSd8beNXA@qLTFT z*}A@&#WxF{cN}j{y{pHY#dqPPdaa?z9V+*Rc%Ss`%va(lBek(e+f~}8_$#??+*eo; zV{Km>`wDN0pW3{&!pmM?j=T%xu;rBHxaG9L_b)2`z}pKoJ3l9PP3}W)FMRDnrcXub zPgKq=(Vd#fGXF-%P@av~04HEBvfNXa+u|hUIn1AumV^GyemK_C@pHpt0 z`L+_7ugR@~X+P-cgT*N2sY-_Rk7By9@pqm@*>BH-Q087zv&(v{u_u4Zjw!H3t DkbUNg 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 2132415f1..b12efa1d3 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 @@ -19,5 +19,6 @@ program #include "tests/TestDeclareReg.script.asasm" #include "tests/TestTryDoWhile.script.asasm" #include "tests/TestTryDoWhile2.script.asasm" + #include "tests/TestSwitchJoin.script.asasm" ; place to add next end ; program diff --git a/libsrc/ffdec_lib/testdata/as3_assembled/abc/as3_assembled-0/tests/TestSwitchJoin.class.asasm b/libsrc/ffdec_lib/testdata/as3_assembled/abc/as3_assembled-0/tests/TestSwitchJoin.class.asasm new file mode 100644 index 000000000..c40405f3f --- /dev/null +++ b/libsrc/ffdec_lib/testdata/as3_assembled/abc/as3_assembled-0/tests/TestSwitchJoin.class.asasm @@ -0,0 +1,195 @@ +class + refid "tests:TestSwitchJoin" + instance QName(PackageNamespace("tests"), "TestSwitchJoin") + extends QName(PackageNamespace(""), "Object") + flag SEALED + flag PROTECTEDNS + protectedns ProtectedNamespace("tests:TestSwitchJoin") + iinit + refid "tests:TestSwitchJoin/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:TestSwitchJoin/instance/run" + returns QName(PackageNamespace(""), "void") + body + maxstack 2 + localcount 4 + initscopedepth 4 + maxscopedepth 5 + code + getlocal0 + pushscope + findproperty QName(PackageNamespace(""),"trace") + pushstring "before" + callpropvoid QName(PackageNamespace(""),"trace"), 1 + jump ofs0079 + ofs0010: + label + findproperty QName(PackageNamespace(""),"trace") + pushstring "0-3" + callpropvoid QName(PackageNamespace(""),"trace"), 1 + jump ofs0150 + ofs001f: + label + findproperty QName(PackageNamespace(""),"trace") + pushstring "1-6" + callpropvoid QName(PackageNamespace(""),"trace"), 1 + jump ofs0146 + ofs002e: + label + findproperty QName(PackageNamespace(""),"trace") + pushstring "5" + callpropvoid QName(PackageNamespace(""),"trace"), 1 + jump ofs013c + ofs003d: + label + findproperty QName(PackageNamespace(""),"trace") + pushstring "7" + callpropvoid QName(PackageNamespace(""),"trace"), 1 + jump ofs0132 + ofs004c: + label + findproperty QName(PackageNamespace(""),"trace") + pushstring "2" + callpropvoid QName(PackageNamespace(""),"trace"), 1 + jump ofs0128 + ofs005b: + label + findproperty QName(PackageNamespace(""),"trace") + pushstring "8" + callpropvoid QName(PackageNamespace(""),"trace"), 1 + jump ofs011e + ofs006a: + label + findproperty QName(PackageNamespace(""),"trace") + pushstring "def" + callpropvoid QName(PackageNamespace(""),"trace"), 1 + jump ofs0114 + ofs0079: + pushbyte 57 + setlocal2 + getlocal2 + setlocal3 + pushbyte 0 + getlocal3 + ifstrictne ofs008b + pushbyte 0 + jump ofs00f2 + ofs008b: + pushbyte 3 + getlocal3 + ifstrictne ofs0098 + pushbyte 1 + jump ofs00f2 + ofs0098: + pushbyte 1 + getlocal3 + ifstrictne ofs00a5 + pushbyte 2 + jump ofs00f2 + ofs00a5: + pushbyte 6 + getlocal3 + ifstrictne ofs00b2 + pushbyte 3 + jump ofs00f2 + ofs00b2: + pushbyte 5 + getlocal3 + ifstrictne ofs00bf + pushbyte 4 + jump ofs00f2 + ofs00bf: + pushbyte 7 + getlocal3 + ifstrictne ofs00cc + pushbyte 5 + jump ofs00f2 + ofs00cc: + pushbyte 2 + getlocal3 + ifstrictne ofs00d9 + pushbyte 6 + jump ofs00f2 + ofs00d9: + pushbyte 8 + getlocal3 + ifstrictne ofs00e6 + pushbyte 7 + jump ofs00f2 + ofs00e6: + jump ofs00f0 + pushbyte 8 + jump ofs00f0 + ofs00f0: + pushbyte 8 + ofs00f2: + kill 3 + lookupswitch ofs006a, [ofs0010, ofs0010, ofs001f, ofs001f, ofs002e, ofs003d, ofs004c, ofs005b, ofs006a] + ofs0114: + findproperty QName(PackageNamespace(""),"trace") + pushstring "A" + callpropvoid QName(PackageNamespace(""),"trace"), 1 + ofs011e: + findproperty QName(PackageNamespace(""),"trace") + pushstring "B" + callpropvoid QName(PackageNamespace(""),"trace"), 1 + ofs0128: + findproperty QName(PackageNamespace(""),"trace") + pushstring "C" + callpropvoid QName(PackageNamespace(""),"trace"), 1 + ofs0132: + findproperty QName(PackageNamespace(""),"trace") + pushstring "D" + callpropvoid QName(PackageNamespace(""),"trace"), 1 + ofs013c: + findproperty QName(PackageNamespace(""),"trace") + pushstring "E" + callpropvoid QName(PackageNamespace(""),"trace"), 1 + ofs0146: + findproperty QName(PackageNamespace(""),"trace") + pushstring "F" + callpropvoid QName(PackageNamespace(""),"trace"), 1 + ofs0150: + findproperty QName(PackageNamespace(""),"trace") + pushstring "G" + callpropvoid QName(PackageNamespace(""),"trace"), 1 + pushnull + returnvalue + end ; code + end ; body + end ; method + end ; trait + end ; instance + cinit + refid "tests:TestSwitchJoin/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/TestSwitchJoin.script.asasm b/libsrc/ffdec_lib/testdata/as3_assembled/abc/as3_assembled-0/tests/TestSwitchJoin.script.asasm new file mode 100644 index 000000000..9a6525d0f --- /dev/null +++ b/libsrc/ffdec_lib/testdata/as3_assembled/abc/as3_assembled-0/tests/TestSwitchJoin.script.asasm @@ -0,0 +1,29 @@ +script + sinit + refid "tests:TestSwitchJoin/init" + body + maxstack 2 + localcount 1 + initscopedepth 1 + maxscopedepth 3 + code + getlocal0 + pushscope + + findpropstrict Multiname("TestSwitchJoin", [PackageNamespace("tests")]) + getlex QName(PackageNamespace(""), "Object") + pushscope + + getlex Multiname("Object", [PrivateNamespace(null, "tests:TestSwitchJoin"), PackageNamespace(""), PackageNamespace("tests"), PackageInternalNs("tests"), Namespace("http://adobe.com/AS3/2006/builtin")]) + newclass "tests:TestSwitchJoin" + popscope + initproperty QName(PackageNamespace("tests"), "TestSwitchJoin") + + returnvoid + end ; code + end ; body + end ; method + trait class QName(PackageNamespace("tests"), "TestSwitchJoin") + #include "TestSwitchJoin.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 6daed0f0afafe978591a18c2a2a54a30270afb82..1cd61aa1aba995701d71b000e86fe6d658e5bd4c 100644 GIT binary patch literal 2721 zcmV;S3SRX?S5qV<6952s+T~bJR~ttX@0x$DmXH{Mkc2=WKsL4zXb=V)4A>X}wqu9H zII-dco6%^*C>9!?G#GQ*ynQeCvKVGskl?c4I#`ySTWR)AG4|ei}WdnGiiPE4-41O>BcG^&SA)vl+w zt(WX0XJvBooV9GcBRxE7)LhE4kuz)NfmwH&x!IXnBq|$A6}xeuJFEKPVXbQDoG$lj zx@p*a;_#?ct2QmOv3gX0QMZr15FM2J7!6Z*>~4=X#^-B# zeg8<`H&-`4cIV#NZjQQRuHM({sr*7VmDlpKUK$)-&b_zW=LjC)Dk-SHh|6SMXti2T z{UV;Qg1?gT<5S{ZTJFxuF`oF}{SWnOo%}WOAC(ZaNu{A5n6pGBGu-V^*)Dx;8jjMm z@o<_Fcb4^vV>Sq^!5vtaH(uhQDLaRas$+&8n@y)+8a2IPJ~H=%u4&_5n1!Q5>RLyK z;q!5=*{tr@`H=@WvS~Lqbi?Yqps(9z!!XM(&AmGA7T6Tu)-a+U{>^_nis)C?%UP6Yd&tA6znHfwPyBqn|WWgp2FfX zEU8+rI?};Oy{R0WVBs7pP1CUJWk27#1JkkWvh3j6X3UjKA8do{G<3rhwdpx=c6tHw zFb~(^Mrf^2*eE=Iy#0LV@!Hk~6oQ3n^RT9$cn1^hves>E#cJJbz=pihXxNQj_jtGu zPZ9A=*b3jPLBvH0+T^1Nmn^Upz7^>W!I zd{AvVCJ$3mN+x!nDVEI&m~y4sXgWc+F=xtNVnbclQdhd^-_ovv$}6NvSrq4wrH6rW9JWr&I4g>XD*l5w1r&hs9JNX zb+L-YUo-3bxPLWUFR$B2b;s|Wb{!kZcW~kvSQFgFp^3F9*)Q}H*>*6#($MQ=`=B2S z*nVkt?XK9Um&L|W-N!44R}|xlV^!<>lxr{bhTL@ULBVCiiCn0wcRkpD0c>|-u&V&W z9qYXB;vXRAop^!lUCTv&1_iW^SoOkX8u+y*u zzXs-|mv*%*A6Ltcbu%hQ$9xZBW6?F4;75pV#^hKsF3Kc6o)8mv66=XVVk5ET&i>XX z=@X)NqeAS6g)kNRsL)S^2o(mX5T!zl3UMk7 zQX#>H1qwL|*C;GgxJBV(3L_MXRQA)rBN`Z?nH0+ij7jXKz@7+fLZNh+`kqqXSM>5H z6mC$sN8wWnpHoOtct*jda+b=|RGy=ZQKr$!d3t4m26pJxJ>KxRN0_!uw-eg**s zJq&^jLJWEts0_jk`WW;xh%gvnevt)$^#BV33jyl|rUDBC>jTygECOr*SQJ z0e?pR0fb_#SMymSKn-31)QcBLgbNmc!*m?NLoDz`#N;2i_XvK2E03xk22ry%2T@hYqgN z>~l_byC@{BUW9u(WWg@75GR{E)y51tP0rHfr!+BWNj4NUjB)Yhgid4(DbC;Jkh57lv8dNeM!rYaJoZzsf+Tm zo7$=NI#U@r`avH-XtGUF?V`wViatDSNW<%r^rs&)M{i&M@yEM_ zOtqOFai+UPf6@xzf^3Irx{GOsGu=Zbc_@LsG=@R(WC+Q*a)FQ)yp!^oI)MW@Q-}F| zov9QD@k|ZjAbXZ_rvBTlt6V#QuXqCYih-mxfUwp{V74oPJWpUAt18qX?J3EeWwa@GVu(-R zTOi+xbUFH_)k09>;1(ptFDH_)%KzuS)lTU-Pw8Q?H)+K&^6gGaYh5Yb;al<-!QGP; zyfyW)w;5@!2f@`Zas9s@KFRf;J^c#T|K;hIx&Aj#zsmJLd-^KZ|A0lec=iULsQ*kT zyg1c;UX-2z>QgQ~Lr@>`0`&}0z0Hf(GbD8mCG`whz093GLs17&`aFa3;#0ZiQwf(o zap!8)bIm}Y=&X#(E&l{$^Va6L~y&;c73VV0Gz0bRR bpFb|DNh`|#KK1kOJ>0KBFn97l)H@>9o2*uf literal 2462 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