avm1: Make XMLNode constructor use NativeObject directly

This commit is contained in:
Nathan Adams 2023-07-11 19:26:31 +02:00
parent d4b81cae5c
commit f9ec5eb9b8
1 changed files with 9 additions and 6 deletions

View File

@ -3,10 +3,10 @@
use crate::avm1::activation::Activation;
use crate::avm1::error::Error;
use crate::avm1::property_decl::{define_properties_on, Declaration};
use crate::avm1::{ArrayObject, Object, ScriptObject, TObject, Value};
use crate::avm1::{ArrayObject, NativeObject, Object, ScriptObject, TObject, Value};
use crate::context::GcContext;
use crate::string::{AvmString, WStr};
use crate::xml::XmlNode;
use crate::xml::{XmlNode, TEXT_NODE};
const PROTO_DECLS: &[Declaration] = declare_properties! {
"localName" => property(local_name);
@ -38,12 +38,15 @@ pub fn constructor<'gc>(
this: Object<'gc>,
args: &[Value<'gc>],
) -> Result<Value<'gc>, Error<'gc>> {
if let [node_type, value, ..] = args {
let mut node = if let [node_type, value, ..] = args {
let node_type = node_type.coerce_to_u8(activation)?;
let node_value = value.coerce_to_string(activation)?;
let mut node = XmlNode::new(activation.context.gc_context, node_type, Some(node_value));
return Ok(node.script_object(activation).into());
}
XmlNode::new(activation.context.gc_context, node_type, Some(node_value))
} else {
XmlNode::new(activation.context.gc_context, TEXT_NODE, Some("".into()))
};
node.introduce_script_object(activation.context.gc_context, this);
this.set_native(activation.context.gc_context, NativeObject::XmlNode(node));
Ok(this.into())
}