avm2: Rename native instance initializer to super initializer

This commit is contained in:
Lord-McSweeney 2024-08-18 10:55:59 -07:00 committed by Lord-McSweeney
parent fc820b7710
commit b4b9c75118
42 changed files with 99 additions and 119 deletions

View File

@ -29,7 +29,7 @@ const RUFFLE_METADATA_NAME: &str = "Ruffle";
const METADATA_INSTANCE_ALLOCATOR: &str = "InstanceAllocator";
// Indicates that we should generate a reference to a native initializer
// method (used as a metadata key with `Ruffle` metadata)
const METADATA_NATIVE_INSTANCE_INIT: &str = "NativeInstanceInit";
const METADATA_SUPER_INITIALIZER: &str = "SuperInitializer";
/// Indicates that we should generate a reference to a class call handler
/// method (used as a metadata key with `Ruffle` metadata)
const METADATA_CALL_HANDLER: &str = "CallHandler";
@ -363,7 +363,7 @@ fn write_native_table(data: &[u8], out_dir: &Path) -> Result<Vec<u8>, Box<dyn st
let none_tokens = quote! { None };
let mut rust_paths = vec![none_tokens.clone(); abc.methods.len()];
let mut rust_instance_allocators = vec![none_tokens.clone(); abc.classes.len()];
let mut rust_native_instance_initializers = vec![none_tokens.clone(); abc.classes.len()];
let mut rust_super_initializers = vec![none_tokens.clone(); abc.classes.len()];
let mut rust_call_handlers = vec![none_tokens; abc.classes.len()];
let mut check_trait = |trait_: &Trait, parent: Option<Index<Multiname>>| {
@ -417,7 +417,7 @@ fn write_native_table(data: &[u8], out_dir: &Path) -> Result<Vec<u8>, Box<dyn st
let instance_allocator_method_name =
"::".to_string() + &flash_to_rust_path(&class_name) + "_allocator";
let native_instance_init_method_name = "::native_instance_init".to_string();
let super_init_method_name = "::super_init".to_string();
let call_handler_method_name = "::call_handler".to_string();
for metadata_idx in &trait_.metadata {
let metadata = &abc.metadata[metadata_idx.0 as usize];
@ -451,15 +451,14 @@ fn write_native_table(data: &[u8], out_dir: &Path) -> Result<Vec<u8>, Box<dyn st
&instance_allocator_method_name,
);
}
(None, METADATA_NATIVE_INSTANCE_INIT) if !is_versioning => {
rust_native_instance_initializers[class_id as usize] =
rust_method_name_and_path(
&abc,
trait_,
None,
"",
&native_instance_init_method_name,
)
(None, METADATA_SUPER_INITIALIZER) if !is_versioning => {
rust_super_initializers[class_id as usize] = rust_method_name_and_path(
&abc,
trait_,
None,
"",
&super_init_method_name,
)
}
(None, METADATA_CALL_HANDLER) if !is_versioning => {
rust_call_handlers[class_id as usize] = rust_method_name_and_path(
@ -531,13 +530,13 @@ fn write_native_table(data: &[u8], out_dir: &Path) -> Result<Vec<u8>, Box<dyn st
// This is very similar to `NATIVE_METHOD_TABLE`, but we have one entry per
// class, rather than per method. When an entry is `Some(fn_ptr)`, we use
// `fn_ptr` as the native initializer for the corresponding class when we
// `fn_ptr` as the super initializer for the corresponding class when we
// load it into Ruffle.
pub const NATIVE_INSTANCE_INIT_TABLE: &[Option<(&'static str, crate::avm2::method::NativeMethodImpl)>] = &[
#(#rust_native_instance_initializers,)*
pub const NATIVE_SUPER_INITIALIZER_TABLE: &[Option<(&'static str, crate::avm2::method::NativeMethodImpl)>] = &[
#(#rust_super_initializers,)*
];
// This is very similar to `NATIVE_INSTANCE_INIT_TABLE`.
// This is very similar to `NATIVE_SUPER_INITIALIZER_TABLE`.
// When an entry is `Some(fn_ptr)`, we use
// `fn_ptr` as the native call handler for the corresponding class when we
// load it into Ruffle.

View File

@ -160,7 +160,7 @@ pub struct Avm2<'gc> {
native_instance_allocator_table: &'static [Option<(&'static str, AllocatorFn)>],
#[collect(require_static)]
native_instance_init_table: &'static [Option<(&'static str, NativeMethodImpl)>],
native_super_initializer_table: &'static [Option<(&'static str, NativeMethodImpl)>],
#[collect(require_static)]
native_call_handler_table: &'static [Option<(&'static str, NativeMethodImpl)>],
@ -257,7 +257,7 @@ impl<'gc> Avm2<'gc> {
native_method_table: Default::default(),
native_instance_allocator_table: Default::default(),
native_instance_init_table: Default::default(),
native_super_initializer_table: Default::default(),
native_call_handler_table: Default::default(),
broadcast_list: Default::default(),

View File

@ -567,7 +567,7 @@ impl<'a, 'gc> Activation<'a, 'gc> {
.bound_superclass_object
.expect("Superclass object is required to run super_init");
bound_superclass_object.call_native_init(receiver.into(), args, self)
bound_superclass_object.call_super_init(receiver.into(), args, self)
}
/// Retrieve a local register.

View File

@ -129,19 +129,20 @@ pub struct ClassData<'gc> {
/// Must be called each time a new class instance is constructed.
instance_init: Method<'gc>,
/// The native instance initializer for this class.
/// The super initializer for this class, called when super() is called for
/// a subclass.
///
/// This may be provided to allow natively-constructed classes to
/// initialize themselves in a different manner from user-constructed ones.
/// For example, the user-accessible constructor may error out (as it's not
/// a valid class to construct for users), but native code may still call
/// it's constructor stack.
/// its constructor stack.
///
/// By default, a class's `native_instance_init` will be initialized to the
/// same method as the regular one. You must specify a separate native
/// By default, a class's `super_init` will be initialized to the
/// same method as the regular one. You must specify a separate super
/// initializer to change initialization behavior based on what code is
/// constructing the class.
native_instance_init: Method<'gc>,
super_init: Method<'gc>,
/// Traits for a given class.
///
@ -221,7 +222,7 @@ impl<'gc> Class<'gc> {
class_i_class: Class<'gc>,
mc: &Mutation<'gc>,
) -> Self {
let native_instance_init = instance_init;
let super_init = instance_init;
let instance_allocator = super_class
.map(|c| c.instance_allocator())
@ -239,7 +240,7 @@ impl<'gc> Class<'gc> {
all_interfaces: Vec::new(),
instance_allocator,
instance_init,
native_instance_init,
super_init,
traits: Vec::new(),
vtable: VTable::empty(mc),
call_handler: None,
@ -269,7 +270,7 @@ impl<'gc> Class<'gc> {
all_interfaces: Vec::new(),
instance_allocator: Allocator(scriptobject_allocator),
instance_init: class_init,
native_instance_init: class_init,
super_init: class_init,
traits: Vec::new(),
vtable: VTable::empty(mc),
call_handler: None,
@ -292,7 +293,7 @@ impl<'gc> Class<'gc> {
instance_init: Method<'gc>,
mc: &Mutation<'gc>,
) -> Self {
let native_instance_init = instance_init;
let super_init = instance_init;
Class(GcCell::new(
mc,
@ -306,7 +307,7 @@ impl<'gc> Class<'gc> {
all_interfaces: Vec::new(),
instance_allocator: Allocator(scriptobject_allocator),
instance_init,
native_instance_init,
super_init,
traits: Vec::new(),
vtable: VTable::empty(mc),
call_handler: None,
@ -482,7 +483,7 @@ impl<'gc> Class<'gc> {
}
let instance_init = unit.load_method(abc_instance.init_method, false, activation)?;
let mut native_instance_init = instance_init;
let mut super_init = instance_init;
let class_init = unit.load_method(abc_class.init_method, false, activation)?;
let mut native_call_handler = None;
@ -501,7 +502,7 @@ impl<'gc> Class<'gc> {
.map(|(_name, ptr)| Allocator(ptr));
if let Some((name, table_native_init)) =
activation.avm2().native_instance_init_table[class_index as usize]
activation.avm2().native_super_initializer_table[class_index as usize]
{
let method = Method::from_builtin_and_params(
table_native_init,
@ -511,7 +512,7 @@ impl<'gc> Class<'gc> {
instance_init.is_variadic(),
activation.context.gc_context,
);
native_instance_init = method;
super_init = method;
}
if let Some((name, table_native_call_handler)) =
@ -547,7 +548,7 @@ impl<'gc> Class<'gc> {
all_interfaces: Vec::new(),
instance_allocator,
instance_init,
native_instance_init,
super_init,
traits: Vec::new(),
vtable: VTable::empty(activation.context.gc_context),
call_handler: native_call_handler,
@ -580,7 +581,7 @@ impl<'gc> Class<'gc> {
all_interfaces: Vec::new(),
instance_allocator: Allocator(scriptobject_allocator),
instance_init: class_init,
native_instance_init: class_init,
super_init: class_init,
traits: Vec::new(),
vtable: VTable::empty(activation.context.gc_context),
call_handler: None,
@ -841,7 +842,7 @@ impl<'gc> Class<'gc> {
"<Activation object constructor>",
activation.context.gc_context,
),
native_instance_init: Method::from_builtin(
super_init: Method::from_builtin(
|_, _, _| Ok(Value::Undefined),
"<Activation object constructor>",
activation.context.gc_context,
@ -882,7 +883,7 @@ impl<'gc> Class<'gc> {
"<Activation object class constructor>",
activation.context.gc_context,
),
native_instance_init: Method::from_builtin(
super_init: Method::from_builtin(
|_, _, _| Ok(Value::Undefined),
"<Activation object class constructor>",
activation.context.gc_context,
@ -1250,14 +1251,14 @@ impl<'gc> Class<'gc> {
self.0.read().instance_init
}
/// Get this class's native-code instance initializer.
pub fn native_instance_init(self) -> Method<'gc> {
self.0.read().native_instance_init
/// Get this class's super() initializer.
pub fn super_init(self) -> Method<'gc> {
self.0.read().super_init
}
/// Set a native-code instance initializer for this class.
pub fn set_native_instance_init(self, mc: &Mutation<'gc>, new_native_init: Method<'gc>) {
self.0.write(mc).native_instance_init = new_native_init;
/// Set a super() initializer for this class.
pub fn set_super_init(self, mc: &Mutation<'gc>, new_super_init: Method<'gc>) {
self.0.write(mc).super_init = new_super_init;
}
/// Set a call handler for this class.

View File

@ -761,7 +761,7 @@ fn load_playerglobal<'gc>(
) -> Result<(), Error<'gc>> {
activation.avm2().native_method_table = native::NATIVE_METHOD_TABLE;
activation.avm2().native_instance_allocator_table = native::NATIVE_INSTANCE_ALLOCATOR_TABLE;
activation.avm2().native_instance_init_table = native::NATIVE_INSTANCE_INIT_TABLE;
activation.avm2().native_super_initializer_table = native::NATIVE_SUPER_INITIALIZER_TABLE;
activation.avm2().native_call_handler_table = native::NATIVE_CALL_HANDLER_TABLE;
let movie = Arc::new(

View File

@ -30,7 +30,7 @@ fn instance_init<'gc>(
}
/// Implements `Boolean`'s native instance initializer.
fn native_instance_init<'gc>(
fn super_init<'gc>(
activation: &mut Activation<'_, 'gc>,
this: Object<'gc>,
args: &[Value<'gc>],
@ -145,13 +145,9 @@ pub fn create_class<'gc>(activation: &mut Activation<'_, 'gc>) -> Class<'gc> {
class.set_attributes(mc, ClassAttributes::FINAL | ClassAttributes::SEALED);
class.set_instance_allocator(mc, primitive_allocator);
class.set_native_instance_init(
class.set_super_init(
mc,
Method::from_builtin(
native_instance_init,
"<Boolean native instance initializer>",
mc,
),
Method::from_builtin(super_init, "<Boolean native instance initializer>", mc),
);
class.set_call_handler(
mc,

View File

@ -23,7 +23,7 @@ pub fn instance_init<'gc>(
/// Implements `Class`'s native instance initializer.
///
/// This exists so that super() calls in class initializers will work.
fn native_instance_init<'gc>(
fn super_init<'gc>(
_activation: &mut Activation<'_, 'gc>,
_this: Object<'gc>,
_args: &[Value<'gc>],
@ -68,10 +68,10 @@ pub fn create_i_class<'gc>(
// throws a VerifyError
class_i_class.set_attributes(gc_context, ClassAttributes::FINAL);
class_i_class.set_native_instance_init(
class_i_class.set_super_init(
gc_context,
Method::from_builtin(
native_instance_init,
super_init,
"<Class native instance initializer>",
gc_context,
),

View File

@ -11,7 +11,7 @@ package flash.display {
import flash.events.EventDispatcher;
[Ruffle(InstanceAllocator)]
[Ruffle(NativeInstanceInit)]
[Ruffle(SuperInitializer)]
public class DisplayObject extends EventDispatcher implements IBitmapDrawable {
private var _accessibilityProperties:AccessibilityProperties;

View File

@ -9,7 +9,7 @@ package flash.display {
import flash.display.InteractiveObject;
import flash.text.TextSnapshot;
[Ruffle(NativeInstanceInit)]
[Ruffle(SuperInitializer)]
public class DisplayObjectContainer extends InteractiveObject {
public function DisplayObjectContainer() {

View File

@ -5,7 +5,7 @@ package flash.display {
import flash.geom.Rectangle;
import flash.ui.ContextMenu;
[Ruffle(NativeInstanceInit)]
[Ruffle(SuperInitializer)]
public class InteractiveObject extends DisplayObject {
private var _accessibilityImpl:AccessibilityImplementation = null;
private var _needsSoftKeyboard:Boolean = false;

View File

@ -5,7 +5,7 @@ package flash.display {
import flash.events.UncaughtErrorEvents;
[Ruffle(InstanceAllocator)]
[Ruffle(NativeInstanceInit)]
[Ruffle(SuperInitializer)]
public class LoaderInfo extends EventDispatcher {
public function LoaderInfo() {
throw new Error("LoaderInfo cannot be constructed");

View File

@ -10,13 +10,13 @@ package flash.display {
import flash.text.TextSnapshot;
import flash.ui.ContextMenu;
[Ruffle(NativeInstanceInit)]
[Ruffle(SuperInitializer)]
public class Stage extends DisplayObjectContainer {
private var _colorCorrection:String = ColorCorrection.DEFAULT;
private var _mouseLock:Boolean = false;
public function Stage() {
throw new Error("You cannot construct new instances of the Stage.")
throw new Error("You cannot construct new instances of the Stage.");
}
override public function set accessibilityProperties(value:AccessibilityProperties):void {

View File

@ -63,7 +63,7 @@ pub fn initialize_for_allocator<'gc>(
}
/// Implements `flash.display.DisplayObject`'s native instance constructor.
pub fn native_instance_init<'gc>(
pub fn super_init<'gc>(
activation: &mut Activation<'_, 'gc>,
this: Object<'gc>,
_args: &[Value<'gc>],

View File

@ -16,7 +16,7 @@ use crate::display_object::{DisplayObject, TDisplayObject, TDisplayObjectContain
use std::cmp::min;
/// Implements `flash.display.DisplayObjectContainer`'s native instance constructor.
pub fn native_instance_init<'gc>(
pub fn super_init<'gc>(
activation: &mut Activation<'_, 'gc>,
this: Object<'gc>,
_args: &[Value<'gc>],

View File

@ -9,7 +9,7 @@ use crate::avm2::Error;
use crate::display_object::{TDisplayObject, TInteractiveObject};
/// Implements `flash.display.InteractiveObject`'s native instance constructor.
pub fn native_instance_init<'gc>(
pub fn super_init<'gc>(
activation: &mut Activation<'_, 'gc>,
this: Object<'gc>,
_args: &[Value<'gc>],

View File

@ -17,7 +17,7 @@ const INSUFFICIENT: &str =
"Error #2099: The loading object is not sufficiently loaded to provide this information.";
/// Implements `flash.display.LoaderInfo`'s native instance constructor.
pub fn native_instance_init<'gc>(
pub fn super_init<'gc>(
activation: &mut Activation<'_, 'gc>,
this: Object<'gc>,
_args: &[Value<'gc>],

View File

@ -15,7 +15,7 @@ use crate::{avm2_stub_getter, avm2_stub_setter};
use swf::Color;
/// Implements `flash.display.Stage`'s native instance constructor.
pub fn native_instance_init<'gc>(
pub fn super_init<'gc>(
activation: &mut Activation<'_, 'gc>,
this: Object<'gc>,
args: &[Value<'gc>],

View File

@ -12,7 +12,7 @@ package flash.text.engine {
// the TextLine class in Ruffle, despite the methods working fine in FP-
// however, it's unlikely that SWFs will actually attempt to add children
// to a TextLine.
[Ruffle(NativeInstanceInit)]
[Ruffle(SuperInitializer)]
public final class TextLine extends DisplayObjectContainer {
internal var _specifiedWidth:Number = 0.0;
internal var _textBlock:TextBlock = null;

View File

@ -80,7 +80,7 @@ pub fn create_text_line<'gc>(
apply_format(activation, display_object, text.as_wstr(), element_format)?;
let instance = initialize_for_allocator(activation, display_object.into(), class)?;
class.call_native_init(instance.into(), &[], activation)?;
class.call_super_init(instance.into(), &[], activation)?;
instance.set_property(
&Multiname::new(activation.avm2().flash_text_engine_internal, "_textBlock"),

View File

@ -4,7 +4,7 @@ use crate::avm2::object::{Object, TObject};
use crate::avm2::value::Value;
use crate::display_object::TDisplayObject;
pub fn native_instance_init<'gc>(
pub fn super_init<'gc>(
activation: &mut Activation<'_, 'gc>,
this: Object<'gc>,
_args: &[Value<'gc>],

View File

@ -30,7 +30,7 @@ fn instance_init<'gc>(
}
/// Implements `int`'s native instance initializer.
fn native_instance_init<'gc>(
fn super_init<'gc>(
activation: &mut Activation<'_, 'gc>,
this: Object<'gc>,
args: &[Value<'gc>],
@ -241,13 +241,9 @@ pub fn create_class<'gc>(activation: &mut Activation<'_, 'gc>) -> Class<'gc> {
class.set_attributes(mc, ClassAttributes::FINAL | ClassAttributes::SEALED);
class.set_instance_allocator(mc, primitive_allocator);
class.set_native_instance_init(
class.set_super_init(
mc,
Method::from_builtin(
native_instance_init,
"<int native instance initializer>",
mc,
),
Method::from_builtin(super_init, "<int native instance initializer>", mc),
);
class.set_call_handler(
mc,

View File

@ -101,7 +101,7 @@ fn class_call<'gc>(
}
/// Implements `Namespace`'s native instance initializer.
pub fn native_instance_init<'gc>(
pub fn super_init<'gc>(
activation: &mut Activation<'_, 'gc>,
this: Object<'gc>,
args: &[Value<'gc>],
@ -182,13 +182,9 @@ pub fn create_class<'gc>(activation: &mut Activation<'_, 'gc>) -> Class<'gc> {
);
class.set_instance_allocator(mc, namespace_allocator);
class.set_native_instance_init(
class.set_super_init(
mc,
Method::from_builtin(
native_instance_init,
"<Namespace native instance initializer>",
mc,
),
Method::from_builtin(super_init, "<Namespace native instance initializer>", mc),
);
class.set_call_handler(
mc,

View File

@ -30,7 +30,7 @@ fn instance_init<'gc>(
}
/// Implements `Number`'s native instance initializer.
fn native_instance_init<'gc>(
fn super_init<'gc>(
activation: &mut Activation<'_, 'gc>,
this: Object<'gc>,
args: &[Value<'gc>],
@ -385,13 +385,9 @@ pub fn create_class<'gc>(activation: &mut Activation<'_, 'gc>) -> Class<'gc> {
class.set_attributes(mc, ClassAttributes::FINAL | ClassAttributes::SEALED);
class.set_instance_allocator(mc, primitive_allocator);
class.set_native_instance_init(
class.set_super_init(
mc,
Method::from_builtin(
native_instance_init,
"<Number native instance initializer>",
mc,
),
Method::from_builtin(super_init, "<Number native instance initializer>", mc),
);
class.set_call_handler(
mc,

View File

@ -30,7 +30,7 @@ fn instance_init<'gc>(
}
/// Implements `uint`'s native instance initializer.
fn native_instance_init<'gc>(
fn super_init<'gc>(
activation: &mut Activation<'_, 'gc>,
this: Object<'gc>,
args: &[Value<'gc>],
@ -242,13 +242,9 @@ pub fn create_class<'gc>(activation: &mut Activation<'_, 'gc>) -> Class<'gc> {
class.set_attributes(mc, ClassAttributes::FINAL | ClassAttributes::SEALED);
class.set_instance_allocator(mc, primitive_allocator);
class.set_native_instance_init(
class.set_super_init(
mc,
Method::from_builtin(
native_instance_init,
"<uint native instance initializer>",
mc,
),
Method::from_builtin(super_init, "<uint native instance initializer>", mc),
);
class.set_call_handler(
mc,

View File

@ -87,7 +87,7 @@ impl<'gc> ArrayObject<'gc> {
))
.into();
class.call_native_init(instance.into(), &[], activation)?;
class.call_super_init(instance.into(), &[], activation)?;
Ok(instance)
}

View File

@ -95,7 +95,7 @@ impl<'gc> BitmapDataObject<'gc> {
// when the custom class makes a super() call, the BitmapData constructor will
// load in the real data from the linked SymbolClass.
if class != activation.avm2().classes().bitmapdata {
class.call_native_init(instance.into(), &[1.into(), 1.into()], activation)?;
class.call_super_init(instance.into(), &[1.into(), 1.into()], activation)?;
}
Ok(instance)

View File

@ -98,7 +98,7 @@ impl<'gc> ByteArrayObject<'gc> {
))
.into();
class.call_native_init(instance.into(), &[], activation)?;
class.call_super_init(instance.into(), &[], activation)?;
Ok(instance)
}

View File

@ -377,14 +377,14 @@ impl<'gc> ClassObject<'gc> {
/// The native initializer is called when native code needs to construct an
/// object, or when supercalling into a parent constructor (as there are
/// classes that cannot be constructed but can be supercalled).
pub fn call_native_init(
pub fn call_super_init(
self,
receiver: Value<'gc>,
arguments: &[Value<'gc>],
activation: &mut Activation<'_, 'gc>,
) -> Result<Value<'gc>, Error<'gc>> {
let scope = self.0.instance_scope.get();
let method = self.native_constructor();
let method = self.super_constructor();
exec(
method,
scope,
@ -675,8 +675,8 @@ impl<'gc> ClassObject<'gc> {
self.inner_class_definition().instance_init()
}
pub fn native_constructor(self) -> Method<'gc> {
self.inner_class_definition().native_instance_init()
pub fn super_constructor(self) -> Method<'gc> {
self.inner_class_definition().super_init()
}
pub fn call_handler(self) -> Option<Method<'gc>> {

View File

@ -49,7 +49,7 @@ impl<'gc> Context3DObject<'gc> {
))
.into();
class.call_native_init(this.into(), &[], activation)?;
class.call_super_init(this.into(), &[], activation)?;
Ok(this)
}

View File

@ -55,7 +55,7 @@ impl<'gc> DateObject<'gc> {
))
.into();
class.call_native_init(instance.into(), &[], activation)?;
class.call_super_init(instance.into(), &[], activation)?;
Ok(instance)
}

View File

@ -84,7 +84,7 @@ impl<'gc> DomainObject<'gc> {
class
.superclass_object()
.unwrap()
.call_native_init(this.into(), &[], activation)?;
.call_super_init(this.into(), &[], activation)?;
Ok(this)
}
}

View File

@ -38,7 +38,7 @@ impl<'gc> IndexBuffer3DObject<'gc> {
))
.into();
class.call_native_init(this.into(), &[], activation)?;
class.call_super_init(this.into(), &[], activation)?;
Ok(this)
}

View File

@ -167,7 +167,7 @@ impl<'gc> LoaderInfoObject<'gc> {
))
.into();
class.call_native_init(this.into(), &[], activation)?;
class.call_super_init(this.into(), &[], activation)?;
Ok(this)
}
@ -214,7 +214,7 @@ impl<'gc> LoaderInfoObject<'gc> {
))
.into();
class.call_native_init(this.into(), &[], activation)?;
class.call_super_init(this.into(), &[], activation)?;
Ok(this)
}
@ -355,7 +355,7 @@ impl<'gc> LoaderInfoObject<'gc> {
.expect("for_display_object cannot return Err");
class_object
.call_native_init(object.into(), &[], activation)
.call_super_init(object.into(), &[], activation)
.expect("Native init should succeed");
unlock!(

View File

@ -93,7 +93,7 @@ impl<'gc> NamespaceObject<'gc> {
))
.into();
class.call_native_init(this.into(), &[], activation)?;
class.call_super_init(this.into(), &[], activation)?;
Ok(this)
}

View File

@ -38,7 +38,7 @@ impl<'gc> Program3DObject<'gc> {
))
.into();
class.call_native_init(this.into(), &[], activation)?;
class.call_super_init(this.into(), &[], activation)?;
Ok(this)
}

View File

@ -76,7 +76,7 @@ impl<'gc> RegExpObject<'gc> {
))
.into();
class.call_native_init(this.into(), &[], activation)?;
class.call_super_init(this.into(), &[], activation)?;
Ok(this)
}

View File

@ -96,7 +96,7 @@ impl<'gc> SoundChannelObject<'gc> {
},
));
class.call_native_init(Value::Object(sound_object.into()), &[], activation)?;
class.call_super_init(Value::Object(sound_object.into()), &[], activation)?;
Ok(sound_object)
}

View File

@ -71,7 +71,7 @@ impl<'gc> StageObject<'gc> {
) -> Result<Self, Error<'gc>> {
let this = Self::for_display_object(activation, display_object, class)?;
class.call_native_init(this.into(), &[], activation)?;
class.call_super_init(this.into(), &[], activation)?;
Ok(this)
}
@ -86,7 +86,7 @@ impl<'gc> StageObject<'gc> {
) -> Result<Self, Error<'gc>> {
let this = Self::for_display_object(activation, display_object, class)?;
class.call_native_init(this.into(), args, activation)?;
class.call_super_init(this.into(), args, activation)?;
Ok(this)
}

View File

@ -38,7 +38,7 @@ impl<'gc> TextureObject<'gc> {
))
.into();
class.call_native_init(this.into(), &[], activation)?;
class.call_super_init(this.into(), &[], activation)?;
Ok(this)
}

View File

@ -39,7 +39,7 @@ impl<'gc> VertexBuffer3DObject<'gc> {
))
.into();
class.call_native_init(this.into(), &[], activation)?;
class.call_super_init(this.into(), &[], activation)?;
Ok(this)
}

View File

@ -552,7 +552,7 @@ impl<'gc> TDisplayObject<'gc> for Avm2Button<'gc> {
if let Some(avm2_object) = self.0.object.get() {
let mut activation = Avm2Activation::from_nothing(context);
if let Err(e) = class.call_native_init(avm2_object.into(), &[], &mut activation)
if let Err(e) = class.call_super_init(avm2_object.into(), &[], &mut activation)
{
tracing::error!("Got {} when constructing AVM2 side of button", e);
}

View File

@ -2192,7 +2192,7 @@ impl<'gc> MovieClip<'gc> {
if let Avm2Value::Object(object) = self.object2() {
let mut constr_thing = || {
let mut activation = Avm2Activation::from_nothing(context);
class_object.call_native_init(object.into(), &[], &mut activation)?;
class_object.call_super_init(object.into(), &[], &mut activation)?;
Ok(())
};