From 967a6d8bf2352457ef292af48ec10b91c47ddb64 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=C5=99=C3=ADk?= Date: Sun, 3 Aug 2025 10:10:17 +0200 Subject: [PATCH] Separated increment/decrement tests. --- .../ActionScript3ClassicAirDecompileTest.java | 247 ++++++++++++++---- .../ActionScript3ClassicDecompileTest.java | 247 +++++++++++++----- .../flash/generators/AS3Generator.java | 5 +- .../testdata/as3_new/bin/as3_new.air.swf | Bin 32350 -> 33947 bytes .../testdata/as3_new/bin/as3_new.flex.swf | Bin 43028 -> 44436 bytes libsrc/ffdec_lib/testdata/as3_new/src/Main.as | 16 +- .../testdata/as3_new/src/tests/TestInc2.as | 26 -- .../testdata/as3_new/src/tests/TestIncDec.as | 65 ----- .../testdata/as3_new/src/tests/TestIncDec1.as | 24 ++ .../as3_new/src/tests/TestIncDec10.as | 23 ++ .../as3_new/src/tests/TestIncDec11.as | 24 ++ .../as3_new/src/tests/TestIncDec12.as | 24 ++ .../as3_new/src/tests/TestIncDec13.as | 28 ++ .../as3_new/src/tests/TestIncDec14.as | 28 ++ .../testdata/as3_new/src/tests/TestIncDec2.as | 24 ++ .../testdata/as3_new/src/tests/TestIncDec3.as | 24 ++ .../testdata/as3_new/src/tests/TestIncDec4.as | 24 ++ .../testdata/as3_new/src/tests/TestIncDec5.as | 29 ++ .../testdata/as3_new/src/tests/TestIncDec6.as | 29 ++ .../testdata/as3_new/src/tests/TestIncDec7.as | 19 ++ .../testdata/as3_new/src/tests/TestIncDec8.as | 20 ++ .../testdata/as3_new/src/tests/TestIncDec9.as | 23 ++ .../as3_new/src/tests/TestLoopInLoop.as | 2 +- 23 files changed, 738 insertions(+), 213 deletions(-) delete mode 100644 libsrc/ffdec_lib/testdata/as3_new/src/tests/TestInc2.as delete mode 100644 libsrc/ffdec_lib/testdata/as3_new/src/tests/TestIncDec.as create mode 100644 libsrc/ffdec_lib/testdata/as3_new/src/tests/TestIncDec1.as create mode 100644 libsrc/ffdec_lib/testdata/as3_new/src/tests/TestIncDec10.as create mode 100644 libsrc/ffdec_lib/testdata/as3_new/src/tests/TestIncDec11.as create mode 100644 libsrc/ffdec_lib/testdata/as3_new/src/tests/TestIncDec12.as create mode 100644 libsrc/ffdec_lib/testdata/as3_new/src/tests/TestIncDec13.as create mode 100644 libsrc/ffdec_lib/testdata/as3_new/src/tests/TestIncDec14.as create mode 100644 libsrc/ffdec_lib/testdata/as3_new/src/tests/TestIncDec2.as create mode 100644 libsrc/ffdec_lib/testdata/as3_new/src/tests/TestIncDec3.as create mode 100644 libsrc/ffdec_lib/testdata/as3_new/src/tests/TestIncDec4.as create mode 100644 libsrc/ffdec_lib/testdata/as3_new/src/tests/TestIncDec5.as create mode 100644 libsrc/ffdec_lib/testdata/as3_new/src/tests/TestIncDec6.as create mode 100644 libsrc/ffdec_lib/testdata/as3_new/src/tests/TestIncDec7.as create mode 100644 libsrc/ffdec_lib/testdata/as3_new/src/tests/TestIncDec8.as create mode 100644 libsrc/ffdec_lib/testdata/as3_new/src/tests/TestIncDec9.as 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 6f5432d9a..d2bad1cd4 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 @@ -1297,67 +1297,198 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile } @Test - public void testInc2() { - decompileMethod("classic_air", "testInc2", "var a:* = [1];\r\n" - + "var d:* = a[this.getInt()]++;\r\n" - + "var e:* = ++a[this.getInt()];\r\n" - + "a[this.getInt()]++;\r\n" - + "++a[this.getInt()];\r\n" - + "var b:* = 1;\r\n" - + "b++;\r\n" - + "var c:int = 1;\r\n" - + "b = c++;\r\n", + public void testIncDec1() { + decompileMethod("classic_air", "testIncDec1", "var a:int = 5;\r\n" + + "trace(\"++a with result\");\r\n" + + "trace(++a);\r\n" + + "trace(\"--a with result\");\r\n" + + "trace(--a);\r\n" + + "trace(\"++a no result\");\r\n" + + "a++;\r\n" + + "trace(\"--a no result\");\r\n" + + "a--;\r\n", false); } @Test - public void testIncDec() { - decompileMethod("classic_air", "testIncDec", "var a:int = 5;\r\n" - + "var b:* = 0;\r\n" - + "trace(\"++var\");\r\n" - + "b = ++a;\r\n" - + "trace(\"var++\");\r\n" - + "b = a++;\r\n" - + "trace(\"--var\");\r\n" - + "b = --a;\r\n" - + "trace(\"var--\");\r\n" - + "b = a--;\r\n" - + "var c:* = [1,2,3,4,5];\r\n" - + "trace(\"++arr\");\r\n" - + "b = ++c[2];\r\n" - + "trace(\"arr++\");\r\n" - + "b = c[2]++;\r\n" - + "trace(\"--arr\");\r\n" - + "b = --c[2];\r\n" - + "trace(\"arr--\");\r\n" - + "b = c[2]--;\r\n" - + "var d:* = new TestClass1();\r\n" - + "trace(\"++property\");\r\n" - + "trace(++d.attrib);\r\n" - + "trace(\"property++\");\r\n" - + "trace(d.attrib++);\r\n" - + "trace(\"--property\");\r\n" - + "trace(--d.attrib);\r\n" - + "trace(\"property--\");\r\n" - + "trace(d.attrib--);\r\n" - + "trace(\"arr[e++]\");\r\n" - + "var chars:Array = new Array(36);\r\n" - + "var index:uint = 0;\r\n" - + "chars[index++] = 5;\r\n" - + "trace(\"arr[++e]\");\r\n" - + "chars[++index] = 5;\r\n" - + "trace(\"attr++\");\r\n" - + "trace(attrx++);\r\n" - + "attrx++;\r\n" - + "trace(\"attr--\");\r\n" - + "trace(attrx--);\r\n" - + "attrx--;\r\n" - + "trace(\"++attr\");\r\n" - + "trace(++attrx);\r\n" - + "++attrx;\r\n" - + "trace(\"--attr\");\r\n" - + "trace(--attrx);\r\n" - + "--attrx;\r\n", + public void testIncDec2() { + decompileMethod("classic_air", "testIncDec2", "var a:int = 5;\r\n" + + "trace(\"a++ with result\");\r\n" + + "trace(a++);\r\n" + + "trace(\"a-- with result\");\r\n" + + "trace(a--);\r\n" + + "trace(\"a++ no result\");\r\n" + + "a++;\r\n" + + "trace(\"a-- no result\");\r\n" + + "a--;\r\n", + false); + } + + @Test + public void testIncDec3() { + decompileMethod("classic_air", "testIncDec3", "var a:* = [1,2,3,4,5];\r\n" + + "trace(\"++a[2] with result\");\r\n" + + "trace(++a[2]);\r\n" + + "trace(\"--a[2] with result\");\r\n" + + "trace(--a[2]);\r\n" + + "trace(\"++a[2] no result\");\r\n" + + "++a[2];\r\n" + + "trace(\"--a[2] no result\");\r\n" + + "--a[2];\r\n", + false); + } + + @Test + public void testIncDec4() { + decompileMethod("classic_air", "testIncDec4", "var a:* = [1,2,3,4,5];\r\n" + + "trace(\"a[2]++ with result\");\r\n" + + "trace(a[2]++);\r\n" + + "trace(\"a[2]-- with result\");\r\n" + + "trace(a[2]--);\r\n" + + "trace(\"a[2]++ no result\");\r\n" + + "a[2]++;\r\n" + + "trace(\"a[2]-- no result\");\r\n" + + "a[2]--;\r\n", + false); + } + + @Test + public void testIncDec5() { + decompileMethod("classic_air", "testIncDec5", "var a:* = new TestClass1();\r\n" + + "trace(\"++a.attrib with result\");\r\n" + + "trace(++a.attrib);\r\n" + + "trace(\"--a.attrib with result\");\r\n" + + "trace(--a.attrib);\r\n" + + "trace(\"++a.attrib no result\");\r\n" + + "++a.attrib;\r\n" + + "trace(\"--a.attrib no result\");\r\n" + + "--a.attrib;\r\n", + false); + } + + @Test + public void testIncDec6() { + decompileMethod("classic_air", "testIncDec6", "var a:* = new TestClass1();\r\n" + + "trace(\"a.attrib++ with result\");\r\n" + + "trace(a.attrib++);\r\n" + + "trace(\"a.attrib-- with result\");\r\n" + + "trace(a.attrib--);\r\n" + + "trace(\"a.attrib++ no result\");\r\n" + + "a.attrib++;\r\n" + + "trace(\"a.attrib-- no result\");\r\n" + + "a.attrib--;\r\n", + false); + } + + @Test + public void testIncDec7() { + decompileMethod("classic_air", "testIncDec7", "var a:* = [1,2,3,4,5];\r\n" + + "var index:int = 0;\r\n" + + "trace(\"a[++index]\");\r\n" + + "index++;\r\n" + + "trace(a[index]);\r\n" + + "trace(\"a[--index]\");\r\n" + + "index--;\r\n" + + "trace(a[index]);\r\n", + false); + } + + @Test + public void testIncDec8() { + decompileMethod("classic_air", "testIncDec8", "var a:* = [1,2,3,4,5];\r\n" + + "var index:int = 0;\r\n" + + "trace(\"a[index++]\");\r\n" + + "trace(a[index++]);\r\n" + + "trace(\"a[index--]\");\r\n" + + "trace(a[index--]);\r\n", + false); + } + + @Test + public void testIncDec9() { + decompileMethod("classic_air", "testIncDec9", "trace(\"++attrib with result\");\r\n" + + "trace(++attrib);\r\n" + + "trace(\"--attrib with result\");\r\n" + + "trace(--attrib);\r\n" + + "trace(\"++attrib no result\");\r\n" + + "++attrib;\r\n" + + "trace(\"--attrib no result\");\r\n" + + "--attrib;\r\n", + false); + } + + @Test + public void testIncDec10() { + decompileMethod("classic_air", "testIncDec10", "trace(\"attrib++ with result\");\r\n" + + "trace(attrib++);\r\n" + + "trace(\"attrib-- with result\");\r\n" + + "trace(attrib--);\r\n" + + "trace(\"attrib++ no result\");\r\n" + + "attrib++;\r\n" + + "trace(\"attrib-- no result\");\r\n" + + "attrib--;\r\n", + false); + } + + @Test + public void testIncDec11() { + decompileMethod("classic_air", "testIncDec11", "var f:Function = function():void\r\n" + + "{\r\n" + + "};\r\n" + + "var slot:int = 0;\r\n" + + "trace(\"++slot with result\");\r\n" + + "trace(++slot);\r\n" + + "trace(\"--slot with result\");\r\n" + + "trace(--slot);\r\n" + + "trace(\"++slot no result\");\r\n" + + "++slot;\r\n" + + "trace(\"--slot no result\");\r\n" + + "--slot;\r\n", + false); + } + + @Test + public void testIncDec12() { + decompileMethod("classic_air", "testIncDec12", "var f:Function = function():void\r\n" + + "{\r\n" + + "};\r\n" + + "var slot:int = 0;\r\n" + + "trace(\"slot++ with result\");\r\n" + + "trace(slot++);\r\n" + + "trace(\"slot-- with result\");\r\n" + + "trace(slot--);\r\n" + + "trace(\"slot++ no result\");\r\n" + + "slot++;\r\n" + + "trace(\"slot-- no result\");\r\n" + + "slot--;\r\n", + false); + } + + @Test + public void testIncDec13() { + decompileMethod("classic_air", "testIncDec13", "var a:* = [1,2,3,4,5];\r\n" + + "trace(\"++a[this.f()] with result\");\r\n" + + "trace(++a[this.f()]);\r\n" + + "trace(\"--a[this.f()] with result\");\r\n" + + "trace(--a[this.f()]);\r\n" + + "trace(\"++a[this.f()] no result\");\r\n" + + "++a[this.f()];\r\n" + + "trace(\"--a[this.f()] no result\");\r\n" + + "--a[this.f()];\r\n", + false); + } + + @Test + public void testIncDec14() { + decompileMethod("classic_air", "testIncDec14", "var a:* = [1,2,3,4,5];\r\n" + + "trace(\"a[this.f()]++ with result\");\r\n" + + "trace(a[this.f()]++);\r\n" + + "trace(\"a[this.f()]-- with result\");\r\n" + + "trace(a[this.f()]--);\r\n" + + "trace(\"a[this.f()]++ no result\");\r\n" + + "a[this.f()]++;\r\n" + + "trace(\"a[this.f()]-- no result\");\r\n" + + "a[this.f()]--;\r\n", false); } @@ -1501,7 +1632,7 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile @Test public void testLoopInLoop() { - decompileMethod("classic_air", "testLoopInLoop", "var i:* = undefined;\r\n" + decompileMethod("classic_air", "testLoopInLoop", "var i:int = 0;\r\n" + "var a:Boolean = true;\r\n" + "var b:Boolean = true;\r\n" + "var c:Boolean = true;\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 f86dd3b13..7bc243fcd 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 @@ -1293,69 +1293,196 @@ public class ActionScript3ClassicDecompileTest extends ActionScript3DecompileTes } @Test - public void testInc2() { - decompileMethod("classic", "testInc2", "var a:* = [1];\r\n" - + "var d:* = a[this.getInt()]++;\r\n" - + "var e:* = ++a[this.getInt()];\r\n" - + "++a[this.getInt()];\r\n" - + "++a[this.getInt()];\r\n" - + "var b:* = 1;\r\n" - + "b++;\r\n" - + "var c:* = 1;\r\n" - + "b = c++;\r\n", + public void testIncDec1() { + decompileMethod("classic", "testIncDec1", "var a:* = 5;\r\n" + + "trace(\"++a with result\");\r\n" + + "trace(++a);\r\n" + + "trace(\"--a with result\");\r\n" + + "trace(--a);\r\n" + + "trace(\"++a no result\");\r\n" + + "a++;\r\n" + + "trace(\"--a no result\");\r\n" + + "a--;\r\n", false); } @Test - public void testIncDec() { - decompileMethod("classic", "testIncDec", "var a:* = 5;\r\n" - + "var b:* = 0;\r\n" - + "trace(\"++var\");\r\n" - + "b = ++a;\r\n" - + "trace(\"var++\");\r\n" - + "b = a++;\r\n" - + "trace(\"--var\");\r\n" - + "b = --a;\r\n" - + "trace(\"var--\");\r\n" - + "b = a--;\r\n" - + "var c:* = [1,2,3,4,5];\r\n" - + "trace(\"++arr\");\r\n" - + "b = ++c[2];\r\n" - + "trace(\"arr++\");\r\n" - + "b = c[2]++;\r\n" - + "trace(\"--arr\");\r\n" - + "b = --c[2];\r\n" - + "trace(\"arr--\");\r\n" - + "b = c[2]--;\r\n" - + "var d:* = new TestClass1();\r\n" - + "trace(\"++property\");\r\n" - + "trace(++d.attrib);\r\n" - + "trace(\"property++\");\r\n" - + "trace(d.attrib++);\r\n" - + "trace(\"--property\");\r\n" - + "trace(--d.attrib);\r\n" - + "trace(\"property--\");\r\n" - + "trace(d.attrib--);\r\n" - + "trace(\"arr[e++]\");\r\n" - + "var chars:Array = new Array(36);\r\n" - + "var index:uint = 0;\r\n" - + "var _loc7_:* = index++;\r\n" - + "chars[_loc7_] = 5;\r\n" - + "trace(\"arr[++e]\");\r\n" - + "var _loc8_:* = ++index;\r\n" - + "chars[_loc8_] = 5;\r\n" - + "trace(\"attr++\");\r\n" - + "trace(this.attrx++);\r\n" - + "++this.attrx;\r\n" - + "trace(\"attr--\");\r\n" - + "trace(this.attrx--);\r\n" - + "--this.attrx;\r\n" - + "trace(\"++attr\");\r\n" - + "trace(++this.attrx);\r\n" - + "++this.attrx;\r\n" - + "trace(\"--attr\");\r\n" - + "trace(--this.attrx);\r\n" - + "--this.attrx;\r\n", + public void testIncDec2() { + decompileMethod("classic", "testIncDec2", "var a:* = 5;\r\n" + + "trace(\"a++ with result\");\r\n" + + "trace(a++);\r\n" + + "trace(\"a-- with result\");\r\n" + + "trace(a--);\r\n" + + "trace(\"a++ no result\");\r\n" + + "a++;\r\n" + + "trace(\"a-- no result\");\r\n" + + "a--;\r\n", + false); + } + + @Test + public void testIncDec3() { + decompileMethod("classic", "testIncDec3", "var a:* = [1,2,3,4,5];\r\n" + + "trace(\"++a[2] with result\");\r\n" + + "trace(++a[2]);\r\n" + + "trace(\"--a[2] with result\");\r\n" + + "trace(--a[2]);\r\n" + + "trace(\"++a[2] no result\");\r\n" + + "++a[2];\r\n" + + "trace(\"--a[2] no result\");\r\n" + + "--a[2];\r\n", + false); + } + + @Test + public void testIncDec4() { + decompileMethod("classic", "testIncDec4", "var a:* = [1,2,3,4,5];\r\n" + + "trace(\"a[2]++ with result\");\r\n" + + "trace(a[2]++);\r\n" + + "trace(\"a[2]-- with result\");\r\n" + + "trace(a[2]--);\r\n" + + "trace(\"a[2]++ no result\");\r\n" + + "++a[2];\r\n" + + "trace(\"a[2]-- no result\");\r\n" + + "--a[2];\r\n", + false); + } + + @Test + public void testIncDec5() { + decompileMethod("classic", "testIncDec5", "var a:* = new TestClass1();\r\n" + + "trace(\"++a.attrib with result\");\r\n" + + "trace(++a.attrib);\r\n" + + "trace(\"--a.attrib with result\");\r\n" + + "trace(--a.attrib);\r\n" + + "trace(\"++a.attrib no result\");\r\n" + + "++a.attrib;\r\n" + + "trace(\"--a.attrib no result\");\r\n" + + "--a.attrib;\r\n", + false); + } + + @Test + public void testIncDec6() { + decompileMethod("classic", "testIncDec6", "var a:* = new TestClass1();\r\n" + + "trace(\"a.attrib++ with result\");\r\n" + + "trace(a.attrib++);\r\n" + + "trace(\"a.attrib-- with result\");\r\n" + + "trace(a.attrib--);\r\n" + + "trace(\"a.attrib++ no result\");\r\n" + + "++a.attrib;\r\n" + + "trace(\"a.attrib-- no result\");\r\n" + + "--a.attrib;\r\n", + false); + } + + @Test + public void testIncDec7() { + decompileMethod("classic", "testIncDec7", "var a:* = [1,2,3,4,5];\r\n" + + "var index:int = 0;\r\n" + + "trace(\"a[++index]\");\r\n" + + "trace(a[++index]);\r\n" + + "trace(\"a[--index]\");\r\n" + + "trace(a[--index]);\r\n", + false); + } + + @Test + public void testIncDec8() { + decompileMethod("classic", "testIncDec8", "var a:* = [1,2,3,4,5];\r\n" + + "var index:int = 0;\r\n" + + "trace(\"a[index++]\");\r\n" + + "trace(a[index++]);\r\n" + + "trace(\"a[index--]\");\r\n" + + "trace(a[index--]);\r\n", + false); + } + + @Test + public void testIncDec9() { + decompileMethod("classic", "testIncDec9", "trace(\"++attrib with result\");\r\n" + + "trace(++this.attrib);\r\n" + + "trace(\"--attrib with result\");\r\n" + + "trace(--this.attrib);\r\n" + + "trace(\"++attrib no result\");\r\n" + + "++this.attrib;\r\n" + + "trace(\"--attrib no result\");\r\n" + + "--this.attrib;\r\n", + false); + } + + @Test + public void testIncDec10() { + decompileMethod("classic", "testIncDec10", "trace(\"attrib++ with result\");\r\n" + + "trace(this.attrib++);\r\n" + + "trace(\"attrib-- with result\");\r\n" + + "trace(this.attrib--);\r\n" + + "trace(\"attrib++ no result\");\r\n" + + "++this.attrib;\r\n" + + "trace(\"attrib-- no result\");\r\n" + + "--this.attrib;\r\n", + false); + } + + @Test + public void testIncDec11() { + decompileMethod("classic", "testIncDec11", "var f:Function = function():void\r\n" + + "{\r\n" + + "};\r\n" + + "var slot:int = 0;\r\n" + + "trace(\"++slot with result\");\r\n" + + "trace(++slot);\r\n" + + "trace(\"--slot with result\");\r\n" + + "trace(--slot);\r\n" + + "trace(\"++slot no result\");\r\n" + + "slot++;\r\n" + + "trace(\"--slot no result\");\r\n" + + "slot--;\r\n", + false); + } + + @Test + public void testIncDec12() { + decompileMethod("classic", "testIncDec12", "var f:Function = function():void\r\n" + + "{\r\n" + + "};\r\n" + + "var slot:int = 0;\r\n" + + "trace(\"slot++ with result\");\r\n" + + "trace(slot++);\r\n" + + "trace(\"slot-- with result\");\r\n" + + "trace(slot--);\r\n" + + "trace(\"slot++ no result\");\r\n" + + "slot++;\r\n" + + "trace(\"slot-- no result\");\r\n" + + "slot--;\r\n", + false); + } + + @Test + public void testIncDec13() { + decompileMethod("classic", "testIncDec13", "var a:* = [1,2,3,4,5];\r\n" + + "trace(\"++a[this.f()] with result\");\r\n" + + "trace(++a[this.f()]);\r\n" + + "trace(\"--a[this.f()] with result\");\r\n" + + "trace(--a[this.f()]);\r\n" + + "trace(\"++a[this.f()] no result\");\r\n" + + "++a[this.f()];\r\n" + + "trace(\"--a[this.f()] no result\");\r\n" + + "--a[this.f()];\r\n", + false); + } + + @Test + public void testIncDec14() { + decompileMethod("classic", "testIncDec14", "var a:* = [1,2,3,4,5];\r\n" + + "trace(\"a[this.f()]++ with result\");\r\n" + + "trace(a[this.f()]++);\r\n" + + "trace(\"a[this.f()]-- with result\");\r\n" + + "trace(a[this.f()]--);\r\n" + + "trace(\"a[this.f()]++ no result\");\r\n" + + "++a[this.f()];\r\n" + + "trace(\"a[this.f()]-- no result\");\r\n" + + "--a[this.f()];\r\n", false); } @@ -1497,7 +1624,7 @@ public class ActionScript3ClassicDecompileTest extends ActionScript3DecompileTes @Test public void testLoopInLoop() { - decompileMethod("classic", "testLoopInLoop", "var i:* = undefined;\r\n" + decompileMethod("classic", "testLoopInLoop", "var i:int = 0;\r\n" + "var a:Boolean = true;\r\n" + "var b:Boolean = true;\r\n" + "for(var c:Boolean = true; true; )\r\n" diff --git a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/generators/AS3Generator.java b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/generators/AS3Generator.java index 38f99e8a5..8e75f601d 100644 --- a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/generators/AS3Generator.java +++ b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/generators/AS3Generator.java @@ -37,12 +37,14 @@ import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.util.ArrayList; +import java.util.Comparator; import java.util.HashSet; import java.util.LinkedHashSet; import java.util.List; import java.util.Map; import java.util.Set; import java.util.TreeMap; +import natorder.NaturalOrderComparator; /** * @@ -52,13 +54,14 @@ import java.util.TreeMap; */ public class AS3Generator { + @SuppressWarnings("unchecked") private static void useFile(String testClassName, String[][] swfAndIdentifierList, boolean multipleProviders) throws FileNotFoundException, IOException, InterruptedException { StringBuilder s = new StringBuilder(); File f = new File(swfAndIdentifierList[0][0]); SWF swf = new SWF(new BufferedInputStream(new FileInputStream(f)), false); DoABC2Tag tag = null; List scriptPacks = swf.getAS3Packs(); - Map sortedPacks = new TreeMap<>(); + Map sortedPacks = new TreeMap<>(new NaturalOrderComparator()); for (ScriptPack pack : scriptPacks) { sortedPacks.put(pack.getClassPath().toRawString(), pack); } diff --git a/libsrc/ffdec_lib/testdata/as3_new/bin/as3_new.air.swf b/libsrc/ffdec_lib/testdata/as3_new/bin/as3_new.air.swf index ba5ee6ecbda63a76fcb94e942e14871405504392..7999b4f5e0ad0b1921ef950d55f3fd8b0e0e223d 100644 GIT binary patch literal 33947 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