Method calls on `super` objects should substitute the child object instead of itself as `this`.
This commit is contained in:
parent
869cbd17da
commit
e76ba4de87
|
@ -1,6 +1,7 @@
|
|||
//! Special object that implements `super`
|
||||
|
||||
use crate::avm1::function::Executable;
|
||||
use crate::avm1::object::search_prototype;
|
||||
use crate::avm1::property::Attribute;
|
||||
use crate::avm1::return_value::ReturnValue;
|
||||
use crate::avm1::script_object::TYPE_OF_OBJECT;
|
||||
|
@ -110,6 +111,26 @@ impl<'gc> TObject<'gc> for SuperObject<'gc> {
|
|||
}
|
||||
}
|
||||
|
||||
fn call_method(
|
||||
&self,
|
||||
name: &str,
|
||||
args: &[Value<'gc>],
|
||||
avm: &mut Avm1<'gc>,
|
||||
context: &mut UpdateContext<'_, 'gc, '_>,
|
||||
) -> Result<ReturnValue<'gc>, Error> {
|
||||
let child = self.0.read().child;
|
||||
let super_proto = self.0.read().super_proto;
|
||||
let (method, base_proto) = search_prototype(super_proto, name, avm, context, child)?;
|
||||
let method = method.resolve(avm, context)?;
|
||||
|
||||
if let Value::Object(_) = method {
|
||||
} else {
|
||||
log::warn!("Super method {} is not callable", name);
|
||||
}
|
||||
|
||||
method.call(avm, context, child, base_proto, args)
|
||||
}
|
||||
|
||||
#[allow(clippy::new_ret_no_self)]
|
||||
fn new(
|
||||
&self,
|
||||
|
|
Loading…
Reference in New Issue