avm2: Support wildcard/any name in XMLList get_property_local
This is similar to #10018. Improves #8330.
This commit is contained in:
parent
570b97f270
commit
1f8dccf5a2
|
@ -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)
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
Binary file not shown.
Loading…
Reference in New Issue