diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/GetPropertyIns.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/GetPropertyIns.java index 78f5dc113..b3235f8bc 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/GetPropertyIns.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/GetPropertyIns.java @@ -244,7 +244,16 @@ public class GetPropertyIns extends InstructionDefinition { //TODO: handle method calls to return proper param type results } } + if (receiverType.equals(new TypeItem("XMLList"))) { + if (multiname.name != null && multiname.name.returnType().equals(TypeItem.INT)) { + type.setVal(new TypeItem("XML")); + return; + } + } localData.abcIndex.findPropertyTypeOrCallType(localData.abc, receiverType, multiname.resolvedMultinameName, localData.abc.constants.getMultiname(multiname.multinameIndex).namespace_index, parentStatic, !parentStatic, false, type, callType); + if (receiverType.equals(new TypeItem("XML")) && !type.getVal().equals(new TypeItem("Function"))) { + type.setVal(new TypeItem("XMLList")); + } } } } 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 482b490b7..18400bc46 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 @@ -252,7 +252,17 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile + "i = int(v.join(\"x\"));\r\n" + "i = int(prot);\r\n" + "s = prot;\r\n" - + "s = String(getTimer());\r\n", + + "s = String(getTimer());\r\n" + + "var x:XML;\r\n" + + "s = x = \r\n" + + "1\r\n" + + "2\r\n" + + "3\r\n" + + ";\r\n" + + "trace(\"a\");\r\n" + + "var xlist:XMLList = x.item;\r\n" + + "trace(\"b\");\r\n" + + "i = int(xlist[i].@id);\r\n", false); } 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 bf6cfdb21..fc0a308cc 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 @@ -251,7 +251,17 @@ public class ActionScript3ClassicDecompileTest extends ActionScript3DecompileTes + "i = int(v.join(\"x\"));\r\n" + "i = int(prot);\r\n" + "s = prot;\r\n" - + "s = String(getTimer());\r\n", + + "s = String(getTimer());\r\n" + + "var x:XML = \r\n" + + "1\r\n" + + "2\r\n" + + "3\r\n" + + ";\r\n" + + "s = x;\r\n" + + "trace(\"a\");\r\n" + + "var xlist:XMLList = x.item;\r\n" + + "trace(\"b\");\r\n" + + "i = int(xlist[i].@id);\r\n", false); } 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 bea13f742..b20c59a47 100644 Binary files a/libsrc/ffdec_lib/testdata/as3_new/bin/as3_new.air.swf and b/libsrc/ffdec_lib/testdata/as3_new/bin/as3_new.air.swf differ diff --git a/libsrc/ffdec_lib/testdata/as3_new/bin/as3_new.flex.swf b/libsrc/ffdec_lib/testdata/as3_new/bin/as3_new.flex.swf index 0cff1bcf9..737f2c083 100644 Binary files a/libsrc/ffdec_lib/testdata/as3_new/bin/as3_new.flex.swf and b/libsrc/ffdec_lib/testdata/as3_new/bin/as3_new.flex.swf differ diff --git a/libsrc/ffdec_lib/testdata/as3_new/src/tests/TestConvert.as b/libsrc/ffdec_lib/testdata/as3_new/src/tests/TestConvert.as index 9709b079c..e2d94ca51 100644 --- a/libsrc/ffdec_lib/testdata/as3_new/src/tests/TestConvert.as +++ b/libsrc/ffdec_lib/testdata/as3_new/src/tests/TestConvert.as @@ -53,6 +53,19 @@ package tests s = prot; s = String(getTimer()); + + + var x:XML = + 1 + 2 + 3 + ; + s = x; + trace("a"); + var xlist:XMLList = x.item; + trace("b"); + i = int(xlist[i].@id); + } } }