From d42b16f02153a5dcb2eae1938cd62bbc93a92c1f Mon Sep 17 00:00:00 2001 From: David Wendt Date: Thu, 20 Feb 2020 20:29:51 -0500 Subject: [PATCH] Add stub impl of `flash.display.MovieClip`. --- core/src/avm2/globals.rs | 16 +++++++++++++++ core/src/avm2/globals/movieclip.rs | 31 ++++++++++++++++++++++++++++++ core/src/avm2/names.rs | 4 ++++ 3 files changed, 51 insertions(+) create mode 100644 core/src/avm2/globals/movieclip.rs diff --git a/core/src/avm2/globals.rs b/core/src/avm2/globals.rs index 52e99f8a0..ebff8da8f 100644 --- a/core/src/avm2/globals.rs +++ b/core/src/avm2/globals.rs @@ -7,6 +7,7 @@ use crate::avm2::script_object::ScriptObject; use gc_arena::{Collect, MutationContext}; mod function; +mod movieclip; mod object; /// This structure represents all system builtins' prototypes. @@ -28,6 +29,7 @@ pub fn construct_global_scope<'gc>( let object_proto = ScriptObject::bare_object(mc); let function_proto = function::create_proto(mc, object_proto); + let movieclip_proto = movieclip::create_proto(mc, object_proto, function_proto); object::fill_proto(mc, object_proto, function_proto); @@ -64,6 +66,20 @@ pub fn construct_global_scope<'gc>( .into(), ) .unwrap(); + global_scope + .install_dynamic_property( + mc, + QName::new(Namespace::package("flash.display"), "MovieClip"), + FunctionObject::from_builtin_constr( + mc, + movieclip::constructor, + movieclip_proto, + function_proto, + ) + .unwrap() + .into(), + ) + .unwrap(); (global_scope, system_prototypes) } diff --git a/core/src/avm2/globals/movieclip.rs b/core/src/avm2/globals/movieclip.rs new file mode 100644 index 000000000..b1e9a2900 --- /dev/null +++ b/core/src/avm2/globals/movieclip.rs @@ -0,0 +1,31 @@ +//! `flash.display.MovieClip` builtin/prototype + +use crate::avm2::object::Object; +use crate::avm2::return_value::ReturnValue; +use crate::avm2::script_object::ScriptObject; +use crate::avm2::value::Value; +use crate::avm2::{Avm2, Error}; +use crate::context::UpdateContext; +use gc_arena::MutationContext; + +/// Implements `flash.display.MovieClip`'s constructor. +pub fn constructor<'gc>( + _avm: &mut Avm2<'gc>, + _action_context: &mut UpdateContext<'_, 'gc, '_>, + _this: Object<'gc>, + _args: &[Value<'gc>], +) -> Result, Error> { + Ok(Value::Undefined.into()) +} + +/// Construct `MovieClip.prototype`. +pub fn create_proto<'gc>( + mc: MutationContext<'gc, '_>, + super_proto: Object<'gc>, + _fn_proto: Object<'gc>, +) -> Object<'gc> { + // TODO: Use `StageObject` here. + let movieclip_proto = ScriptObject::object(mc, super_proto); + + movieclip_proto +} diff --git a/core/src/avm2/names.rs b/core/src/avm2/names.rs index 05e4e429b..d1b4e0bd2 100644 --- a/core/src/avm2/names.rs +++ b/core/src/avm2/names.rs @@ -58,6 +58,10 @@ impl Namespace { pub fn public_namespace() -> Self { Namespace::Package("".to_string()) } + + pub fn package(package_name: &str) -> Self { + Namespace::Package(package_name.to_string()) + } } /// A `QName`, likely "qualified name", consists of a namespace and name string.