mirror of
https://git.huckle.dev/Huckles-Minecraft-Archive/jpexs-decompiler.git
synced 2026-07-07 04:48:16 +00:00
Fixed: #2270 AS3 decompilation - unnnecessary local registers assignments as part of expressions when using optimization like dup, setlocal N instead of setlocal N, getlocal N
This commit is contained in:
@@ -100,7 +100,8 @@ public class ActionScript3AssembledDecompileTest extends ActionScript3DecompileT
|
||||
public void testDupAssignment() {
|
||||
decompileMethod("assembled", "testDupAssignment", "var _loc1_:int = 0;\r\n"
|
||||
+ "var _loc2_:int = 10;\r\n"
|
||||
+ "if(_loc1_ = _loc2_)\r\n"
|
||||
+ "_loc1_ = _loc2_;\r\n"
|
||||
+ "if(_loc1_)\r\n"
|
||||
+ "{\r\n"
|
||||
+ "trace(_loc2_);\r\n"
|
||||
+ "}\r\n",
|
||||
@@ -154,6 +155,16 @@ public class ActionScript3AssembledDecompileTest extends ActionScript3DecompileT
|
||||
false);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLocalRegIf() {
|
||||
decompileMethod("assembled", "testLocalRegIf", "var _loc1_:int = 8;\r\n"
|
||||
+ "if(_loc1_ > 5 && _loc1_ < 10)\r\n"
|
||||
+ "{\r\n"
|
||||
+ "trace(\"I\");\r\n"
|
||||
+ "}\r\n",
|
||||
false);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testMutatingSwitch() {
|
||||
decompileMethod("assembled", "testMutatingSwitch", "switch(this.k)\r\n"
|
||||
|
||||
@@ -280,8 +280,8 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile
|
||||
+ "var dict:Dictionary = new Dictionary();\r\n"
|
||||
+ "s = \"a\";\r\n"
|
||||
+ "i = int(s);\r\n"
|
||||
+ "var j:int;\r\n"
|
||||
+ "s = String(j = n);\r\n"
|
||||
+ "var j:int = n;\r\n"
|
||||
+ "s = String(j);\r\n"
|
||||
+ "s = ns;\r\n"
|
||||
+ "s = String(i == 4 ? \"\" : i);\r\n"
|
||||
+ "s = i == 4 ? \"\" : String(i);\r\n"
|
||||
@@ -296,8 +296,8 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile
|
||||
+ "2:\"C\"\r\n"
|
||||
+ "};\r\n"
|
||||
+ "i = int(s.charAt(10));\r\n"
|
||||
+ "var v:Vector.<String>;\r\n"
|
||||
+ "(v = new Vector.<String>()).push(\"A\");\r\n"
|
||||
+ "var v:Vector.<String> = new Vector.<String>();\r\n"
|
||||
+ "v.push(\"A\");\r\n"
|
||||
+ "v.push(\"B\");\r\n"
|
||||
+ "i = int(v[0]);\r\n"
|
||||
+ "s = v[1];\r\n"
|
||||
@@ -321,11 +321,11 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile
|
||||
+ "trace(\"c\");\r\n"
|
||||
+ "i = int(x.item[i].@id);\r\n"
|
||||
+ "dict[String(x.item[i].@id)] = \"Hello\";\r\n"
|
||||
+ "var lc:LocalClass;\r\n"
|
||||
+ "i = (lc = new LocalClass()).attr;\r\n"
|
||||
+ "var lc:LocalClass = new LocalClass();\r\n"
|
||||
+ "i = lc.attr;\r\n"
|
||||
+ "s = String(lc.attr);\r\n"
|
||||
+ "var f:Function;\r\n"
|
||||
+ "if(Boolean(f = this.f))\r\n"
|
||||
+ "var f:Function = this.f;\r\n"
|
||||
+ "if(Boolean(f))\r\n"
|
||||
+ "{\r\n"
|
||||
+ "trace(\"OK\");\r\n"
|
||||
+ "}\r\n"
|
||||
@@ -537,7 +537,8 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile
|
||||
decompileMethod("classic_air", "testExpressions", "var arr:Array = null;\r\n"
|
||||
+ "var i:int = 5;\r\n"
|
||||
+ "var j:int = 5;\r\n"
|
||||
+ "if((i = i /= 2) == 1 || i == 2)\r\n"
|
||||
+ "i = i /= 2;\r\n"
|
||||
+ "if(i == 1 || i == 2)\r\n"
|
||||
+ "{\r\n"
|
||||
+ "arguments.concat(i);\r\n"
|
||||
+ "}\r\n"
|
||||
@@ -920,7 +921,8 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile
|
||||
+ "var b:int = 6;\r\n"
|
||||
+ "for(i = 0; i < len; k = myXML.book.(@isbn == \"12345\"))\r\n"
|
||||
+ "{\r\n"
|
||||
+ "if((c = 1) == 2)\r\n"
|
||||
+ "c = 1;\r\n"
|
||||
+ "if(c == 2)\r\n"
|
||||
+ "{\r\n"
|
||||
+ "trace(\"A\");\r\n"
|
||||
+ "}\r\n"
|
||||
@@ -1667,6 +1669,20 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile
|
||||
false);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testOptimization() {
|
||||
decompileMethod("classic_air", "testOptimization", "var f:int = 0;\r\n"
|
||||
+ "var g:* = 0;\r\n"
|
||||
+ "var h:int = 0;\r\n"
|
||||
+ "var a:int = 1;\r\n"
|
||||
+ "var b:int = 2;\r\n"
|
||||
+ "var c:int = 3;\r\n"
|
||||
+ "var d:int = 4;\r\n"
|
||||
+ "var e:int = d + 5;\r\n"
|
||||
+ "var i:int = h = g = f;\r\n",
|
||||
false);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testParamNames() {
|
||||
decompileMethod("classic_air", "testParamNames", "return firstp + secondp + thirdp;\r\n",
|
||||
@@ -2327,12 +2343,12 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile
|
||||
@Test
|
||||
public void testXml() {
|
||||
decompileMethod("classic_air", "testXml", "var name:String = \"ahoj\";\r\n"
|
||||
+ "var myXML:XML;\r\n"
|
||||
+ "var k:* = (myXML = <order id=\"604\">\r\n"
|
||||
+ "var myXML:XML = <order id=\"604\">\r\n"
|
||||
+ "<book isbn=\"12345\">\r\n"
|
||||
+ "<title>{name}</title>\r\n"
|
||||
+ "</book>\r\n"
|
||||
+ "</order>).@id;\r\n"
|
||||
+ "</order>;\r\n"
|
||||
+ "var k:* = myXML.@id;\r\n"
|
||||
+ "var all:String = myXML.@*.toXMLString();\r\n"
|
||||
+ "k = myXML.book;\r\n"
|
||||
+ "k = myXML.book.(@isbn == \"12345\");\r\n"
|
||||
|
||||
@@ -539,7 +539,8 @@ public class ActionScript3ClassicDecompileTest extends ActionScript3DecompileTes
|
||||
decompileMethod("classic", "testExpressions", "var arr:Array = null;\r\n"
|
||||
+ "var i:int = 5;\r\n"
|
||||
+ "var j:int = 5;\r\n"
|
||||
+ "if((i = i = i / 2) == 1 || i == 2)\r\n"
|
||||
+ "i = i = i / 2;\r\n"
|
||||
+ "if(i == 1 || i == 2)\r\n"
|
||||
+ "{\r\n"
|
||||
+ "arguments.concat(i);\r\n"
|
||||
+ "}\r\n"
|
||||
@@ -1654,6 +1655,20 @@ public class ActionScript3ClassicDecompileTest extends ActionScript3DecompileTes
|
||||
false);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testOptimization() {
|
||||
decompileMethod("classic", "testOptimization", "var f:int = 0;\r\n"
|
||||
+ "var g:int = 0;\r\n"
|
||||
+ "var h:int = 0;\r\n"
|
||||
+ "var a:int = 1;\r\n"
|
||||
+ "var b:int = 2;\r\n"
|
||||
+ "var c:int = 3;\r\n"
|
||||
+ "var d:int = 4;\r\n"
|
||||
+ "var e:int = d + 5;\r\n"
|
||||
+ "var i:int = h = g = f;\r\n",
|
||||
false);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testParamNames() {
|
||||
decompileMethod("classic", "testParamNames", "return firstp + secondp + thirdp;\r\n",
|
||||
|
||||
@@ -522,8 +522,8 @@ public class ActionScript3CrossCompileSwfToolsDecompileTest extends ActionScript
|
||||
public void testTryCatchWith() {
|
||||
decompileMethod("swftools", "testTryCatchWith", "var _loc1_:* = new MyTest();\r\n"
|
||||
+ "trace(\"before with\");\r\n"
|
||||
+ "var _loc2_:*;\r\n"
|
||||
+ "with(_loc2_ = _loc1_)\r\n"
|
||||
+ "var _loc2_:* = _loc1_;\r\n"
|
||||
+ "with(_loc2_)\r\n"
|
||||
+ "{\r\n"
|
||||
+ "trace(\"before try\");\r\n"
|
||||
+ "try\r\n"
|
||||
|
||||
Reference in New Issue
Block a user