avm1: Cleanup CallMethod
This commit is contained in:
parent
2e0bc78cd6
commit
72531eddff
|
@ -829,7 +829,7 @@ impl<'a, 'gc, 'gc_context> Activation<'a, 'gc, 'gc_context> {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn action_call_method(&mut self) -> Result<FrameControl<'gc>, Error<'gc>> {
|
fn action_call_method(&mut self) -> Result<FrameControl<'gc>, Error<'gc>> {
|
||||||
let method = self.context.avm1.pop();
|
let method_name = self.context.avm1.pop();
|
||||||
let object_val = self.context.avm1.pop();
|
let object_val = self.context.avm1.pop();
|
||||||
let num_args = self.context.avm1.pop().coerce_to_u32(self)? as usize; // TODO(Herschel): max arg count?
|
let num_args = self.context.avm1.pop().coerce_to_u32(self)? as usize; // TODO(Herschel): max arg count?
|
||||||
let num_args = num_args.min(self.context.avm1.stack.len());
|
let num_args = num_args.min(self.context.avm1.stack.len());
|
||||||
|
@ -846,28 +846,24 @@ impl<'a, 'gc, 'gc_context> Activation<'a, 'gc, 'gc_context> {
|
||||||
|
|
||||||
let object = object_val.coerce_to_object(self);
|
let object = object_val.coerce_to_object(self);
|
||||||
|
|
||||||
let method_name = if method != Value::Undefined {
|
let method_name = if method_name == Value::Undefined {
|
||||||
let name = method.coerce_to_string(self)?;
|
"".into()
|
||||||
if name.is_empty() {
|
|
||||||
None
|
|
||||||
} else {
|
} else {
|
||||||
Some(name)
|
method_name.coerce_to_string(self)?
|
||||||
}
|
|
||||||
} else {
|
|
||||||
None
|
|
||||||
};
|
};
|
||||||
|
|
||||||
let result = if let Some(method_name) = method_name {
|
let result = if method_name.is_empty() {
|
||||||
// Call `this[method_name]`
|
|
||||||
object.call_method(&method_name.as_str(), &args, self)?
|
|
||||||
} else {
|
|
||||||
// Undefined/empty method name; call `this` as a function.
|
// Undefined/empty method name; call `this` as a function.
|
||||||
// TODO: Pass primitive value instead of boxing (#843).
|
// TODO: Pass primitive value instead of boxing (#843).
|
||||||
let this = Value::Undefined.coerce_to_object(self);
|
let this = Value::Undefined.coerce_to_object(self);
|
||||||
object.call("[Anonymous]", self, this, None, &args)?
|
object.call("[Anonymous]", self, this, None, &args)?
|
||||||
|
} else {
|
||||||
|
// Call `this[method_name]`.
|
||||||
|
object.call_method(&method_name.as_str(), &args, self)?
|
||||||
};
|
};
|
||||||
|
|
||||||
self.context.avm1.push(result);
|
self.context.avm1.push(result);
|
||||||
|
|
||||||
self.continue_if_base_clip_exists()
|
self.continue_if_base_clip_exists()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue