avm2: Calls to object properties should use the new `call_property` method

This commit is contained in:
David Wendt 2021-09-16 19:44:40 -04:00 committed by kmeisthax
parent 7cefeb2b2a
commit b8c086eb7a
3 changed files with 30 additions and 19 deletions

View File

@ -216,14 +216,11 @@ pub fn to_locale_string<'gc>(
join_inner(act, this, &[",".into()], |v, activation| { join_inner(act, this, &[",".into()], |v, activation| {
let o = v.coerce_to_object(activation)?; let o = v.coerce_to_object(activation)?;
let tls = o.get_property( o.call_property(
o,
&QName::new(Namespace::public(), "toLocaleString").into(), &QName::new(Namespace::public(), "toLocaleString").into(),
&[],
activation, activation,
)?; )
tls.coerce_to_object(activation)?
.call(Some(o), &[], activation, o.proto())
}) })
} }

View File

@ -402,13 +402,11 @@ pub fn to_locale_string<'gc>(
) -> Result<Value<'gc>, Error> { ) -> Result<Value<'gc>, Error> {
join_inner(activation, this, &[",".into()], |v, act| { join_inner(activation, this, &[",".into()], |v, act| {
if let Ok(o) = v.coerce_to_object(act) { if let Ok(o) = v.coerce_to_object(act) {
let ls = o.get_property( o.call_property(
o,
&QName::new(Namespace::public(), "toLocaleString").into(), &QName::new(Namespace::public(), "toLocaleString").into(),
&[],
act, act,
)?; )
ls.coerce_to_object(act)?.call(Some(o), &[], act, None)
} else { } else {
Ok(v) Ok(v)
} }

View File

@ -302,20 +302,28 @@ impl<'gc> Value<'gc> {
let mut prim = self.clone(); let mut prim = self.clone();
let object = *o; let object = *o;
if let Value::Object(f) = if let Value::Object(_) =
object.get_property(*o, &QName::dynamic_name("toString").into(), activation)? object.get_property(*o, &QName::dynamic_name("toString").into(), activation)?
{ {
prim = f.call(Some(*o), &[], activation, None)?; prim = object.call_property(
&QName::dynamic_name("toString").into(),
&[],
activation,
)?;
} }
if prim.is_primitive() { if prim.is_primitive() {
return Ok(prim); return Ok(prim);
} }
if let Value::Object(f) = if let Value::Object(_) =
object.get_property(*o, &QName::dynamic_name("valueOf").into(), activation)? object.get_property(*o, &QName::dynamic_name("valueOf").into(), activation)?
{ {
prim = f.call(Some(*o), &[], activation, None)?; prim = object.call_property(
&QName::dynamic_name("valueOf").into(),
&[],
activation,
)?;
} }
if prim.is_primitive() { if prim.is_primitive() {
@ -328,20 +336,28 @@ impl<'gc> Value<'gc> {
let mut prim = self.clone(); let mut prim = self.clone();
let object = *o; let object = *o;
if let Value::Object(f) = if let Value::Object(_) =
object.get_property(*o, &QName::dynamic_name("valueOf").into(), activation)? object.get_property(*o, &QName::dynamic_name("valueOf").into(), activation)?
{ {
prim = f.call(Some(*o), &[], activation, None)?; prim = object.call_property(
&QName::dynamic_name("valueOf").into(),
&[],
activation,
)?;
} }
if prim.is_primitive() { if prim.is_primitive() {
return Ok(prim); return Ok(prim);
} }
if let Value::Object(f) = if let Value::Object(_) =
object.get_property(*o, &QName::dynamic_name("toString").into(), activation)? object.get_property(*o, &QName::dynamic_name("toString").into(), activation)?
{ {
prim = f.call(Some(*o), &[], activation, None)?; prim = object.call_property(
&QName::dynamic_name("toString").into(),
&[],
activation,
)?;
} }
if prim.is_primitive() { if prim.is_primitive() {