#1145 AS3 better declaration type detection,

better convert_x instruction handling
This commit is contained in:
Jindra Petřík
2016-02-16 23:00:17 +01:00
parent 07b0e68bba
commit be8e4df4c7
16 changed files with 291 additions and 86 deletions

View File

@@ -605,7 +605,7 @@ public class ActionScript3Test extends ActionScriptTestBase {
@Test
public void testMissingDefault() {
decompileMethod("testMissingDefault", "var jj:* = 1;\r\n"
decompileMethod("testMissingDefault", "var jj:int = 1;\r\n"
+ "switch(jj)\r\n"
+ "{\r\n"
+ "case 1:\r\n"
@@ -621,10 +621,10 @@ public class ActionScript3Test extends ActionScriptTestBase {
@Test
public void testChainedAssignments() {
decompileMethod("testChainedAssignments", "var a:* = 0;\r\n"
+ "var b:* = 0;\r\n"
+ "var c:* = 0;\r\n"
+ "var d:* = 0;\r\n"
decompileMethod("testChainedAssignments", "var a:int = 0;\r\n"
+ "var b:int = 0;\r\n"
+ "var c:int = 0;\r\n"
+ "var d:int = 0;\r\n"
+ "d = c = b = a = 5;\r\n"
+ "var e:TestClass2 = TestClass2.createMe(\"test\");\r\n"
+ "e.attrib1 = e.attrib2 = e.attrib3 = this.getCounter();\r\n"
@@ -671,10 +671,10 @@ public class ActionScript3Test extends ActionScriptTestBase {
public void testDeclarations() {
decompileMethod("testDeclarations", "var vall:* = undefined;\r\n"
+ "var vstr:String = null;\r\n"
+ "var vint:* = 0;\r\n"
+ "var vint:int = 0;\r\n"
+ "var vuint:uint = 0;\r\n"
+ "var vclass:TestClass1 = null;\r\n"
+ "var vnumber:* = NaN;\r\n"
+ "var vnumber:Number = NaN;\r\n"
+ "var vobject:Object = null;\r\n"
+ "vall = 6;\r\n"
+ "vstr = \"hello\";\r\n"
@@ -689,7 +689,7 @@ public class ActionScript3Test extends ActionScriptTestBase {
@Test
public void testForIn() {
decompileMethod("testForIn", "var dic:Dictionary = null;\r\n"
+ "var item:Object = null;\r\n"
+ "var item:* = null;\r\n"
+ "for(item in dic)\r\n"
+ "{\r\n"
+ "trace(item);\r\n"
@@ -712,16 +712,16 @@ public class ActionScript3Test extends ActionScriptTestBase {
@Test
public void testComplexExpressions() {
decompileMethod("testComplexExpressions", "var i:* = 0;\r\n"
+ "var j:* = 0;\r\n"
decompileMethod("testComplexExpressions", "var i:int = 0;\r\n"
+ "var j:int = 0;\r\n"
+ "j = i = i + (i = i + i++);\r\n", false);
}
@Test
public void testExpressions() {
decompileMethod("testExpressions", "var arr:Array = null;\r\n"
+ "var i:* = 5;\r\n"
+ "var j:* = 5;\r\n"
+ "var i:int = 5;\r\n"
+ "var j:int = 5;\r\n"
+ "if((i = i = i / 2) == 1 || i == 2)\r\n"
+ "{\r\n"
+ "arguments.concat(i);\r\n"
@@ -745,7 +745,7 @@ public class ActionScript3Test extends ActionScriptTestBase {
@Test
public void testLogicalComputing() {
decompileMethod("testLogicalComputing", "var b:* = false;\r\n"
decompileMethod("testLogicalComputing", "var b:Boolean = false;\r\n"
+ "var i:* = 5;\r\n"
+ "var j:* = 7;\r\n"
+ "if(i > j)\r\n"
@@ -770,8 +770,8 @@ public class ActionScript3Test extends ActionScriptTestBase {
@Test
public void testDecl2() {
decompileMethod("testDecl2", "var k:* = 0;\r\n"
+ "var i:* = 5;\r\n"
decompileMethod("testDecl2", "var k:int = 0;\r\n"
+ "var i:int = 5;\r\n"
+ "i = i + 7;\r\n"
+ "if(i == 5)\r\n"
+ "{\r\n"
@@ -786,10 +786,10 @@ public class ActionScript3Test extends ActionScriptTestBase {
@Test
public void testChain2() {
decompileMethod("testChain2", "var g:Array = null;\r\n"
+ "var h:* = false;\r\n"
+ "var extraLine:* = false;\r\n"
+ "var r:* = 7;\r\n"
+ "var t:* = 0;\r\n"
+ "var h:Boolean = false;\r\n"
+ "var extraLine:Boolean = false;\r\n"
+ "var r:int = 7;\r\n"
+ "var t:int = 0;\r\n"
+ "t = this.getInt();\r\n"
+ "if(t + 1 < g.length)\r\n"
+ "{\r\n"
@@ -804,7 +804,7 @@ public class ActionScript3Test extends ActionScriptTestBase {
@Test
public void testDoWhile2() {
decompileMethod("testDoWhile2", "var k:* = 5;\r\n"
decompileMethod("testDoWhile2", "var k:int = 5;\r\n"
+ "do\r\n"
+ "{\r\n"
+ "k++;\r\n"
@@ -825,8 +825,8 @@ public class ActionScript3Test extends ActionScriptTestBase {
@Test
public void testWhileAnd() {
decompileMethod("testWhileAnd", "var a:* = 5;\r\n"
+ "var b:* = 10;\r\n"
decompileMethod("testWhileAnd", "var a:int = 5;\r\n"
+ "var b:int = 10;\r\n"
+ "while(a < 10 && b > 1)\r\n"
+ "{\r\n"
+ "a++;\r\n"
@@ -846,7 +846,7 @@ public class ActionScript3Test extends ActionScriptTestBase {
@Test
public void testStringConcat() {
decompileMethod("testStringConcat", "var k:* = 8;\r\n"
decompileMethod("testStringConcat", "var k:int = 8;\r\n"
+ "this.traceIt(\"hello\" + 5 * 6);\r\n"
+ "this.traceIt(\"hello\" + (k - 1));\r\n"
+ "this.traceIt(\"hello\" + 5 + 6);\r\n", false);
@@ -1176,4 +1176,14 @@ public class ActionScript3Test extends ActionScriptTestBase {
+ "trace(\"after switch\");\r\n", false);
}
/**
* Note: this one should be better compiled with ASC2/air, for String(xy) to
* be convert_s
*/
@Test
public void testManualConvert() {
decompileMethod("testManualConvert", "trace(\"String(this).length\");\r\n"
+ "trace(String(this).length);\r\n", false);
}
}