avm2: Class initializers will be called twice when constructing two `ClassObject`s for one `Class`
This commit is contained in:
parent
7e7032d908
commit
1705870951
|
@ -151,9 +151,6 @@ pub struct ClassData<'gc> {
|
|||
/// Must be called once and only once prior to any use of this class.
|
||||
class_init: Method<'gc>,
|
||||
|
||||
/// Whether or not the class initializer has already been called.
|
||||
class_initializer_called: bool,
|
||||
|
||||
/// The customization point for `Class(args...)` without `new`
|
||||
/// If None, a simple coercion is done.
|
||||
call_handler: Option<Method<'gc>>,
|
||||
|
@ -238,7 +235,6 @@ impl<'gc> Class<'gc> {
|
|||
instance_traits: Vec::new(),
|
||||
instance_vtable: VTable::empty(mc),
|
||||
class_init,
|
||||
class_initializer_called: false,
|
||||
call_handler: None,
|
||||
class_traits: Vec::new(),
|
||||
traits_loaded: true,
|
||||
|
@ -463,7 +459,6 @@ impl<'gc> Class<'gc> {
|
|||
instance_traits: Vec::new(),
|
||||
instance_vtable: VTable::empty(activation.context.gc_context),
|
||||
class_init,
|
||||
class_initializer_called: false,
|
||||
call_handler: native_call_handler,
|
||||
class_traits: Vec::new(),
|
||||
traits_loaded: false,
|
||||
|
@ -718,7 +713,6 @@ impl<'gc> Class<'gc> {
|
|||
"<Activation object class constructor>",
|
||||
activation.context.gc_context,
|
||||
),
|
||||
class_initializer_called: false,
|
||||
call_handler: None,
|
||||
class_traits: Vec::new(),
|
||||
traits_loaded: true,
|
||||
|
@ -1111,16 +1105,6 @@ impl<'gc> Class<'gc> {
|
|||
self.0.read().call_handler
|
||||
}
|
||||
|
||||
/// Check if the class has already been initialized.
|
||||
pub fn is_class_initialized(self) -> bool {
|
||||
self.0.read().class_initializer_called
|
||||
}
|
||||
|
||||
/// Mark the class as initialized.
|
||||
pub fn mark_class_initialized(self, mc: &Mutation<'gc>) {
|
||||
self.0.write(mc).class_initializer_called = true;
|
||||
}
|
||||
|
||||
pub fn direct_interfaces(&self) -> Ref<Vec<Class<'gc>>> {
|
||||
Ref::map(self.0.read(), |c| &c.direct_interfaces)
|
||||
}
|
||||
|
|
|
@ -351,7 +351,6 @@ impl<'gc> ClassObject<'gc> {
|
|||
let scope = self.0.read().class_scope;
|
||||
let class = self.0.read().class;
|
||||
|
||||
if !class.is_class_initialized() {
|
||||
let class_initializer = class.class_init();
|
||||
let class_init_fn = FunctionObject::from_method(
|
||||
activation,
|
||||
|
@ -361,10 +360,7 @@ impl<'gc> ClassObject<'gc> {
|
|||
Some(self),
|
||||
);
|
||||
|
||||
class.mark_class_initialized(activation.context.gc_context);
|
||||
|
||||
class_init_fn.call(object.into(), &[], activation)?;
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue