From c9c2e213bb95b6b64794a77142abec1aa8c60171 Mon Sep 17 00:00:00 2001 From: Nathan Adams Date: Tue, 1 Aug 2023 13:34:03 +0200 Subject: [PATCH] avm2: Use correct error in toPrecision --- core/src/avm2/globals/int.rs | 3 ++- core/src/avm2/globals/number.rs | 3 ++- core/src/avm2/globals/uint.rs | 3 ++- .../RuntimeErrors/Error1002PrecisionArgOutOfRange/test.toml | 1 - 4 files changed, 6 insertions(+), 4 deletions(-) diff --git a/core/src/avm2/globals/int.rs b/core/src/avm2/globals/int.rs index 93310603a..32ba63482 100644 --- a/core/src/avm2/globals/int.rs +++ b/core/src/avm2/globals/int.rs @@ -2,6 +2,7 @@ use crate::avm2::activation::Activation; use crate::avm2::class::{Class, ClassAttributes}; +use crate::avm2::error::range_error; use crate::avm2::globals::number::{print_with_precision, print_with_radix}; use crate::avm2::method::{Method, NativeMethodImpl, ParamConfig}; use crate::avm2::object::{primitive_allocator, FunctionObject, Object, TObject}; @@ -199,7 +200,7 @@ fn to_precision<'gc>( .coerce_to_u32(activation)? as usize; if wanted_digits < 1 || wanted_digits > 21 { - return Err("toPrecision can only print with 1 through 21 digits.".into()); + return Err(Error::AvmError(range_error(activation, "Error #1002: Number.toPrecision has a range of 1 to 21. Number.toFixed and Number.toExponential have a range of 0 to 20. Specified value is not within expected range.", 1002)?)); } return Ok(print_with_precision(activation, number as f64, wanted_digits)?.into()); diff --git a/core/src/avm2/globals/number.rs b/core/src/avm2/globals/number.rs index 7d74594b2..0475b13cb 100644 --- a/core/src/avm2/globals/number.rs +++ b/core/src/avm2/globals/number.rs @@ -2,6 +2,7 @@ use crate::avm2::activation::Activation; use crate::avm2::class::{Class, ClassAttributes}; +use crate::avm2::error::range_error; use crate::avm2::method::{Method, NativeMethodImpl}; use crate::avm2::object::{primitive_allocator, FunctionObject, Object, TObject}; use crate::avm2::value::Value; @@ -241,7 +242,7 @@ fn to_precision<'gc>( .coerce_to_u32(activation)? as usize; if wanted_digits < 1 || wanted_digits > 21 { - return Err("toPrecision can only print with 1 through 21 digits.".into()); + return Err(Error::AvmError(range_error(activation, "Error #1002: Number.toPrecision has a range of 1 to 21. Number.toFixed and Number.toExponential have a range of 0 to 20. Specified value is not within expected range.", 1002)?)); } return Ok(print_with_precision(activation, number, wanted_digits)?.into()); diff --git a/core/src/avm2/globals/uint.rs b/core/src/avm2/globals/uint.rs index 989bdd884..0c2e5cad4 100644 --- a/core/src/avm2/globals/uint.rs +++ b/core/src/avm2/globals/uint.rs @@ -2,6 +2,7 @@ use crate::avm2::activation::Activation; use crate::avm2::class::{Class, ClassAttributes}; +use crate::avm2::error::range_error; use crate::avm2::globals::number::{print_with_precision, print_with_radix}; use crate::avm2::method::{Method, NativeMethodImpl, ParamConfig}; use crate::avm2::object::{primitive_allocator, FunctionObject, Object, TObject}; @@ -198,7 +199,7 @@ fn to_precision<'gc>( .coerce_to_u32(activation)? as usize; if wanted_digits < 1 || wanted_digits > 21 { - return Err("toPrecision can only print with 1 through 21 digits.".into()); + return Err(Error::AvmError(range_error(activation, "Error #1002: Number.toPrecision has a range of 1 to 21. Number.toFixed and Number.toExponential have a range of 0 to 20. Specified value is not within expected range.", 1002)?)); } return Ok(print_with_precision(activation, number as f64, wanted_digits)?.into()); diff --git a/tests/tests/swfs/from_avmplus/as3/RuntimeErrors/Error1002PrecisionArgOutOfRange/test.toml b/tests/tests/swfs/from_avmplus/as3/RuntimeErrors/Error1002PrecisionArgOutOfRange/test.toml index 29f3cef79..cf6123969 100644 --- a/tests/tests/swfs/from_avmplus/as3/RuntimeErrors/Error1002PrecisionArgOutOfRange/test.toml +++ b/tests/tests/swfs/from_avmplus/as3/RuntimeErrors/Error1002PrecisionArgOutOfRange/test.toml @@ -1,2 +1 @@ num_ticks = 1 -known_failure = true