avm2: Make `RegExpObject::from_regexp` pull it's own constructor and call it's own initializer.
This doesn't appear to actually be in use, but I'm doing it for completeness' sake.
This commit is contained in:
parent
c167912f52
commit
602895e2de
|
@ -111,6 +111,7 @@ pub struct SystemPrototypes<'gc> {
|
||||||
pub stage: Object<'gc>,
|
pub stage: Object<'gc>,
|
||||||
pub sprite: Object<'gc>,
|
pub sprite: Object<'gc>,
|
||||||
pub simplebutton: Object<'gc>,
|
pub simplebutton: Object<'gc>,
|
||||||
|
pub regexp: Object<'gc>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'gc> SystemPrototypes<'gc> {
|
impl<'gc> SystemPrototypes<'gc> {
|
||||||
|
@ -158,6 +159,7 @@ impl<'gc> SystemPrototypes<'gc> {
|
||||||
stage: empty,
|
stage: empty,
|
||||||
sprite: empty,
|
sprite: empty,
|
||||||
simplebutton: empty,
|
simplebutton: empty,
|
||||||
|
regexp: empty,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -196,6 +198,7 @@ pub struct SystemConstructors<'gc> {
|
||||||
pub stage: Object<'gc>,
|
pub stage: Object<'gc>,
|
||||||
pub sprite: Object<'gc>,
|
pub sprite: Object<'gc>,
|
||||||
pub simplebutton: Object<'gc>,
|
pub simplebutton: Object<'gc>,
|
||||||
|
pub regexp: Object<'gc>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'gc> SystemConstructors<'gc> {
|
impl<'gc> SystemConstructors<'gc> {
|
||||||
|
@ -243,6 +246,7 @@ impl<'gc> SystemConstructors<'gc> {
|
||||||
stage: empty,
|
stage: empty,
|
||||||
sprite: empty,
|
sprite: empty,
|
||||||
simplebutton: empty,
|
simplebutton: empty,
|
||||||
|
regexp: empty,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -478,7 +482,7 @@ pub fn load_player_globals<'gc>(
|
||||||
constant(mc, "", "Infinity", f64::INFINITY.into(), domain, script)?;
|
constant(mc, "", "Infinity", f64::INFINITY.into(), domain, script)?;
|
||||||
|
|
||||||
class(activation, math::create_class(mc), domain, script)?;
|
class(activation, math::create_class(mc), domain, script)?;
|
||||||
class(activation, regexp::create_class(mc), domain, script)?;
|
avm2_system_class!(regexp, activation, regexp::create_class(mc), domain, script);
|
||||||
|
|
||||||
avm2_system_class!(xml, activation, xml::create_class(mc), domain, script);
|
avm2_system_class!(xml, activation, xml::create_class(mc), domain, script);
|
||||||
avm2_system_class!(
|
avm2_system_class!(
|
||||||
|
|
|
@ -21,11 +21,16 @@ pub fn regexp_deriver<'gc>(
|
||||||
proto: Object<'gc>,
|
proto: Object<'gc>,
|
||||||
activation: &mut Activation<'_, 'gc, '_>,
|
activation: &mut Activation<'_, 'gc, '_>,
|
||||||
) -> Result<Object<'gc>, Error> {
|
) -> Result<Object<'gc>, Error> {
|
||||||
Ok(RegExpObject::derive(
|
let base = ScriptObjectData::base_new(Some(proto), ScriptObjectClass::ClassInstance(constr));
|
||||||
constr,
|
|
||||||
proto,
|
Ok(RegExpObject(GcCell::allocate(
|
||||||
activation.context.gc_context,
|
activation.context.gc_context,
|
||||||
|
RegExpObjectData {
|
||||||
|
base,
|
||||||
|
regexp: RegExp::new(""),
|
||||||
|
},
|
||||||
))
|
))
|
||||||
|
.into())
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone, Collect, Debug, Copy)]
|
#[derive(Clone, Collect, Debug, Copy)]
|
||||||
|
@ -43,33 +48,23 @@ pub struct RegExpObjectData<'gc> {
|
||||||
|
|
||||||
impl<'gc> RegExpObject<'gc> {
|
impl<'gc> RegExpObject<'gc> {
|
||||||
pub fn from_regexp(
|
pub fn from_regexp(
|
||||||
mc: MutationContext<'gc, '_>,
|
activation: &mut Activation<'_, 'gc, '_>,
|
||||||
constr: Object<'gc>,
|
|
||||||
base_proto: Option<Object<'gc>>,
|
|
||||||
regexp: RegExp<'gc>,
|
regexp: RegExp<'gc>,
|
||||||
) -> Object<'gc> {
|
) -> Result<Object<'gc>, Error> {
|
||||||
let base = ScriptObjectData::base_new(base_proto, ScriptObjectClass::ClassInstance(constr));
|
let constr = activation.avm2().constructors().regexp;
|
||||||
|
let proto = activation.avm2().prototypes().regexp;
|
||||||
RegExpObject(GcCell::allocate(mc, RegExpObjectData { base, regexp })).into()
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Instantiate a regexp subclass.
|
|
||||||
pub fn derive(
|
|
||||||
constr: Object<'gc>,
|
|
||||||
base_proto: Object<'gc>,
|
|
||||||
mc: MutationContext<'gc, '_>,
|
|
||||||
) -> Object<'gc> {
|
|
||||||
let base =
|
let base =
|
||||||
ScriptObjectData::base_new(Some(base_proto), ScriptObjectClass::ClassInstance(constr));
|
ScriptObjectData::base_new(Some(proto), ScriptObjectClass::ClassInstance(constr));
|
||||||
|
|
||||||
RegExpObject(GcCell::allocate(
|
let this = RegExpObject(GcCell::allocate(
|
||||||
mc,
|
activation.context.gc_context,
|
||||||
RegExpObjectData {
|
RegExpObjectData { base, regexp },
|
||||||
base,
|
|
||||||
regexp: RegExp::new(""),
|
|
||||||
},
|
|
||||||
))
|
))
|
||||||
.into()
|
.into();
|
||||||
|
|
||||||
|
constr.call_native_initializer(Some(this), &[], activation, Some(constr))?;
|
||||||
|
|
||||||
|
Ok(this)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue