avm2: Support wildcard/any name in XMLList get_property_local

This is similar to #10018. Improves #8330.
This commit is contained in:
Tom Schuster 2023-03-14 23:08:38 +01:00 committed by Aaron Hill
parent 570b97f270
commit 1f8dccf5a2
4 changed files with 36 additions and 28 deletions

View File

@ -193,35 +193,33 @@ impl<'gc> TObject<'gc> for XmlListObject<'gc> {
return Ok(Value::Undefined);
}
}
let matched_children = write
.children
.iter_mut()
.flat_map(|child| {
let child_prop = child
.get_or_create_xml(activation)
.get_property_local(name, activation)
.unwrap();
if let Some(prop_xml) =
child_prop.as_object().and_then(|obj| obj.as_xml_object())
{
vec![E4XOrXml::Xml(prop_xml)]
} else if let Some(prop_xml_list) = child_prop
.as_object()
.and_then(|obj| obj.as_xml_list_object())
{
// Flatten children
prop_xml_list.children().clone()
} else {
vec![]
}
})
.collect();
return Ok(
XmlListObject::new(activation, matched_children, Some(self.into())).into(),
);
}
let matched_children = write
.children
.iter_mut()
.flat_map(|child| {
let child_prop = child
.get_or_create_xml(activation)
.get_property_local(name, activation)
.unwrap();
if let Some(prop_xml) =
child_prop.as_object().and_then(|obj| obj.as_xml_object())
{
vec![E4XOrXml::Xml(prop_xml)]
} else if let Some(prop_xml_list) = child_prop
.as_object()
.and_then(|obj| obj.as_xml_list_object())
{
// Flatten children
prop_xml_list.children().clone()
} else {
vec![]
}
})
.collect();
return Ok(XmlListObject::new(activation, matched_children, Some(self.into())).into());
}
write.base.get_property_local(name, activation)

View File

@ -25,3 +25,10 @@ for each (var child in children) {
for each (var child in xml.child("*")) {
trace('child("*") child.id: ' + child.@id);
}
var xml_list = xml.animal;
trace("xml_list is an " + Object.prototype.toString.call(xml_list));
for each (var child in xml_list.*) {
trace("xml_list.* child: " + child);
}

View File

@ -6,3 +6,6 @@ child.id: 1
child.id: 2
child("*") child.id: 1
child("*") child.id: 2
xml_list is an [object XMLList]
xml_list.* child: toto
xml_list.* child: piggy