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