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);
+
}
}
}