chore: Cleanup multiname creation in XML

This commit is contained in:
EmperorBale 2023-03-03 01:50:15 -08:00 committed by Bale
parent f95599b816
commit ac9106ccb4
2 changed files with 11 additions and 15 deletions

View File

@ -4,7 +4,7 @@ use crate::avm2::e4x::{E4XNode, E4XNodeKind};
pub use crate::avm2::object::xml_allocator; pub use crate::avm2::object::xml_allocator;
use crate::avm2::object::{E4XOrXml, QNameObject, TObject, XmlListObject}; use crate::avm2::object::{E4XOrXml, QNameObject, TObject, XmlListObject};
use crate::avm2::string::AvmString; use crate::avm2::string::AvmString;
use crate::avm2::{Activation, Error, Object, QName, Value}; use crate::avm2::{Activation, Error, Multiname, Object, Value};
use crate::avm2_stub_method; use crate::avm2_stub_method;
pub fn init<'gc>( pub fn init<'gc>(
@ -53,7 +53,7 @@ pub fn name<'gc>(
avm2_stub_method!(activation, "XML", "name", "namespaces"); avm2_stub_method!(activation, "XML", "name", "namespaces");
// FIXME - use namespace // FIXME - use namespace
let namespace = activation.avm2().public_namespace; let namespace = activation.avm2().public_namespace;
Ok(QNameObject::from_name(activation, QName::new(namespace, local_name))?.into()) Ok(QNameObject::from_name(activation, Multiname::new(namespace, local_name))?.into())
} else { } else {
Ok(Value::Null) Ok(Value::Null)
} }
@ -128,23 +128,21 @@ pub fn attribute<'gc>(
let xml = this.as_xml_object().unwrap(); let xml = this.as_xml_object().unwrap();
let name = args[0]; let name = args[0];
let multiname = match name { let multiname = match name {
Value::String(s) => QName::new(activation.avm2().public_namespace, s).into(), Value::String(s) => Multiname::new(activation.avm2().public_namespace, s),
Value::Object(o) => { Value::Object(o) => {
if let Some(qname) = o.as_qname_object() { if let Some(qname) = o.as_qname_object() {
qname.name().clone() qname.name().clone()
} else { } else {
QName::new( Multiname::new(
activation.avm2().public_namespace, activation.avm2().public_namespace,
name.coerce_to_string(activation)?, name.coerce_to_string(activation)?,
) )
.into()
} }
} }
_ => QName::new( _ => Multiname::new(
activation.avm2().public_namespace, activation.avm2().public_namespace,
name.coerce_to_string(activation)?, name.coerce_to_string(activation)?,
) ),
.into(),
}; };
let attribute = if let E4XNodeKind::Element { attributes, .. } = &*xml.node().kind() { let attribute = if let E4XNodeKind::Element { attributes, .. } = &*xml.node().kind() {

View File

@ -5,7 +5,7 @@ use crate::{
avm2::{ avm2::{
e4x::{simple_content_to_string, E4XNode, E4XNodeKind}, e4x::{simple_content_to_string, E4XNode, E4XNodeKind},
object::{E4XOrXml, XmlListObject}, object::{E4XOrXml, XmlListObject},
Activation, Error, Object, QName, TObject, Value, Activation, Error, Multiname, Object, TObject, Value,
}, },
avm2_stub_method, avm2_stub_method,
}; };
@ -106,23 +106,21 @@ pub fn attribute<'gc>(
let name = args[0]; let name = args[0];
let multiname = match name { let multiname = match name {
Value::String(s) => QName::new(activation.avm2().public_namespace, s).into(), Value::String(s) => Multiname::new(activation.avm2().public_namespace, s),
Value::Object(o) => { Value::Object(o) => {
if let Some(qname) = o.as_qname_object() { if let Some(qname) = o.as_qname_object() {
qname.name().clone() qname.name().clone()
} else { } else {
QName::new( Multiname::new(
activation.avm2().public_namespace, activation.avm2().public_namespace,
name.coerce_to_string(activation)?, name.coerce_to_string(activation)?,
) )
.into()
} }
} }
_ => QName::new( _ => Multiname::new(
activation.avm2().public_namespace, activation.avm2().public_namespace,
name.coerce_to_string(activation)?, name.coerce_to_string(activation)?,
) ),
.into(),
}; };
let children = list.children(); let children = list.children();