diff --git a/core/src/avm2/globals/XMLList.as b/core/src/avm2/globals/XMLList.as index e6564f9cd..8b508dd94 100644 --- a/core/src/avm2/globals/XMLList.as +++ b/core/src/avm2/globals/XMLList.as @@ -1,5 +1,6 @@ package { [Ruffle(InstanceAllocator)] + [Ruffle(CallHandler)] public final dynamic class XMLList { public function XMLList(value:* = undefined) { diff --git a/core/src/avm2/globals/xml_list.rs b/core/src/avm2/globals/xml_list.rs index 84620d661..0265cfa08 100644 --- a/core/src/avm2/globals/xml_list.rs +++ b/core/src/avm2/globals/xml_list.rs @@ -56,6 +56,19 @@ pub fn init<'gc>( Ok(Value::Undefined) } +pub fn call_handler<'gc>( + activation: &mut Activation<'_, 'gc>, + _this: Option>, + args: &[Value<'gc>], +) -> Result, Error<'gc>> { + Ok(activation + .avm2() + .classes() + .xml_list + .construct(activation, args)? + .into()) +} + pub fn has_complex_content<'gc>( _activation: &mut Activation<'_, 'gc>, this: Option>, diff --git a/tests/tests/swfs/avm2/xml_class_call/Test.as b/tests/tests/swfs/avm2/xml_class_call/Test.as index ff6164ccd..5d6fa72ec 100644 --- a/tests/tests/swfs/avm2/xml_class_call/Test.as +++ b/tests/tests/swfs/avm2/xml_class_call/Test.as @@ -10,6 +10,9 @@ trace("From complex string:") trace(complexXML.children().length()); trace(complexXML.name()); + + trace("XMLList from string:"); + trace(XMLList("

First element

Second element

")); } } } \ No newline at end of file diff --git a/tests/tests/swfs/avm2/xml_class_call/output.txt b/tests/tests/swfs/avm2/xml_class_call/output.txt index 6d98fa0ec..ac115184d 100644 --- a/tests/tests/swfs/avm2/xml_class_call/output.txt +++ b/tests/tests/swfs/avm2/xml_class_call/output.txt @@ -4,3 +4,6 @@ Some string From complex string: 1 outer +XMLList from string: +

First element

+

Second element

diff --git a/tests/tests/swfs/avm2/xml_class_call/test.swf b/tests/tests/swfs/avm2/xml_class_call/test.swf index f9e3a6b4e..f4d5c1a13 100644 Binary files a/tests/tests/swfs/avm2/xml_class_call/test.swf and b/tests/tests/swfs/avm2/xml_class_call/test.swf differ