diff --git a/core/src/avm2/globals/flash/display/movieclip.rs b/core/src/avm2/globals/flash/display/movieclip.rs index 27c08477c..9f797c350 100644 --- a/core/src/avm2/globals/flash/display/movieclip.rs +++ b/core/src/avm2/globals/flash/display/movieclip.rs @@ -6,7 +6,7 @@ use crate::avm2::class::Class; use crate::avm2::globals::flash::display::{framelabel, scene}; use crate::avm2::method::Method; use crate::avm2::names::{Namespace, QName}; -use crate::avm2::object::{ArrayObject, Object, StageObject, TObject}; +use crate::avm2::object::{ArrayObject, Object, TObject}; use crate::avm2::string::AvmString; use crate::avm2::traits::Trait; use crate::avm2::value::Value; @@ -535,26 +535,6 @@ pub fn next_scene<'gc>( Ok(Value::Undefined) } -/// Implements `graphics`. -pub fn graphics<'gc>( - activation: &mut Activation<'_, 'gc, '_>, - this: Option>, - _args: &[Value<'gc>], -) -> Result, Error> { - if let Some(dobj) = this.and_then(|o| o.as_display_object()) { - let graphics_proto = activation.context.avm2.prototypes().graphics; - - return Ok(StageObject::for_display_object( - activation.context.gc_context, - dobj, - graphics_proto, - ) - .into()); - } - - Ok(Value::Undefined) -} - /// Construct `MovieClip`'s class. pub fn create_class<'gc>(mc: MutationContext<'gc, '_>) -> GcCell<'gc, Class<'gc>> { let class = Class::new( @@ -657,10 +637,5 @@ pub fn create_class<'gc>(mc: MutationContext<'gc, '_>) -> GcCell<'gc, Class<'gc> Method::from_builtin(next_scene), )); - write.define_instance_trait(Trait::from_getter( - QName::new(Namespace::public(), "graphics"), - Method::from_builtin(graphics), - )); - class } diff --git a/core/src/avm2/globals/flash/display/sprite.rs b/core/src/avm2/globals/flash/display/sprite.rs index e9c930515..b63ea8886 100644 --- a/core/src/avm2/globals/flash/display/sprite.rs +++ b/core/src/avm2/globals/flash/display/sprite.rs @@ -1,10 +1,11 @@ //! `flash.display.Sprite` builtin/prototype use crate::avm2::activation::Activation; -use crate::avm2::class::Class; +use crate::avm2::class::{Class, ClassAttributes}; use crate::avm2::method::Method; use crate::avm2::names::{Namespace, QName}; -use crate::avm2::object::Object; +use crate::avm2::object::{Object, StageObject, TObject}; +use crate::avm2::traits::Trait; use crate::avm2::value::Value; use crate::avm2::Error; use gc_arena::{GcCell, MutationContext}; @@ -31,9 +32,29 @@ pub fn class_init<'gc>( Ok(Value::Undefined) } +/// Implements `graphics`. +pub fn graphics<'gc>( + activation: &mut Activation<'_, 'gc, '_>, + this: Option>, + _args: &[Value<'gc>], +) -> Result, Error> { + if let Some(dobj) = this.and_then(|o| o.as_display_object()) { + let graphics_proto = activation.context.avm2.prototypes().graphics; + + return Ok(StageObject::for_display_object( + activation.context.gc_context, + dobj, + graphics_proto, + ) + .into()); + } + + Ok(Value::Undefined) +} + /// Construct `Sprite`'s class. pub fn create_class<'gc>(mc: MutationContext<'gc, '_>) -> GcCell<'gc, Class<'gc>> { - Class::new( + let class = Class::new( QName::new(Namespace::package("flash.display"), "Sprite"), Some( QName::new( @@ -45,5 +66,16 @@ pub fn create_class<'gc>(mc: MutationContext<'gc, '_>) -> GcCell<'gc, Class<'gc> Method::from_builtin(instance_init), Method::from_builtin(class_init), mc, - ) + ); + + let mut write = class.write(mc); + + write.set_attributes(ClassAttributes::SEALED); + + write.define_instance_trait(Trait::from_getter( + QName::new(Namespace::public(), "graphics"), + Method::from_builtin(graphics), + )); + + class }