avm2: Namespace support for XML.name()
This commit is contained in:
parent
30614bdd2f
commit
6d51bc3964
|
@ -73,9 +73,7 @@ pub fn name<'gc>(
|
||||||
) -> Result<Value<'gc>, Error<'gc>> {
|
) -> Result<Value<'gc>, Error<'gc>> {
|
||||||
let node = this.as_xml_object().unwrap();
|
let node = this.as_xml_object().unwrap();
|
||||||
if let Some(local_name) = node.local_name() {
|
if let Some(local_name) = node.local_name() {
|
||||||
avm2_stub_method!(activation, "XML", "name", "namespaces");
|
let namespace = node.namespace(activation);
|
||||||
// FIXME - use namespace
|
|
||||||
let namespace = activation.avm2().public_namespace;
|
|
||||||
Ok(QNameObject::from_name(activation, Multiname::new(namespace, local_name))?.into())
|
Ok(QNameObject::from_name(activation, Multiname::new(namespace, local_name))?.into())
|
||||||
} else {
|
} else {
|
||||||
Ok(Value::Null)
|
Ok(Value::Null)
|
||||||
|
@ -162,10 +160,7 @@ pub fn namespace_internal_impl<'gc>(
|
||||||
|
|
||||||
// b. Return the result of calling the [[GetNamespace]] method of x.[[Name]] with argument inScopeNS
|
// b. Return the result of calling the [[GetNamespace]] method of x.[[Name]] with argument inScopeNS
|
||||||
// FIXME: Use inScopeNS
|
// FIXME: Use inScopeNS
|
||||||
let namespace = match node.namespace() {
|
let namespace = xml.namespace(activation);
|
||||||
Some(ns) => Namespace::package(ns, &mut activation.context.borrow_gc()),
|
|
||||||
None => activation.avm2().public_namespace,
|
|
||||||
};
|
|
||||||
Ok(NamespaceObject::from_namespace(activation, namespace)?.into())
|
Ok(NamespaceObject::from_namespace(activation, namespace)?.into())
|
||||||
} else {
|
} else {
|
||||||
// a. Let prefix = ToString(prefix)
|
// a. Let prefix = ToString(prefix)
|
||||||
|
|
|
@ -7,6 +7,7 @@ use crate::avm2::object::script_object::ScriptObjectData;
|
||||||
use crate::avm2::object::{ClassObject, Object, ObjectPtr, TObject, XmlListObject};
|
use crate::avm2::object::{ClassObject, Object, ObjectPtr, TObject, XmlListObject};
|
||||||
use crate::avm2::string::AvmString;
|
use crate::avm2::string::AvmString;
|
||||||
use crate::avm2::value::Value;
|
use crate::avm2::value::Value;
|
||||||
|
use crate::avm2::Namespace;
|
||||||
use crate::avm2::{Error, Multiname};
|
use crate::avm2::{Error, Multiname};
|
||||||
use core::fmt;
|
use core::fmt;
|
||||||
use gc_arena::{Collect, GcCell, GcWeakCell, Mutation};
|
use gc_arena::{Collect, GcCell, GcWeakCell, Mutation};
|
||||||
|
@ -75,6 +76,13 @@ impl<'gc> XmlObject<'gc> {
|
||||||
self.0.read().node.local_name()
|
self.0.read().node.local_name()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn namespace(&self, activation: &mut Activation<'_, 'gc>) -> Namespace<'gc> {
|
||||||
|
match self.0.read().node.namespace() {
|
||||||
|
Some(ns) => Namespace::package(ns, &mut activation.context.borrow_gc()),
|
||||||
|
None => activation.avm2().public_namespace,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub fn matches_name(&self, multiname: &Multiname<'gc>) -> bool {
|
pub fn matches_name(&self, multiname: &Multiname<'gc>) -> bool {
|
||||||
self.0.read().node.matches_name(multiname)
|
self.0.read().node.matches_name(multiname)
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,2 +1 @@
|
||||||
num_ticks = 1
|
num_ticks = 1
|
||||||
known_failure = true # https://github.com/ruffle-rs/ruffle/issues/12351
|
|
||||||
|
|
Loading…
Reference in New Issue