Skip to content

Commit 11fa149

Browse files
avm2: Add make_error_1019 function and use it
Also fix the error message differing from avmplus in some cases
1 parent cec0bfa commit 11fa149

File tree

3 files changed

+26
-18
lines changed

3 files changed

+26
-18
lines changed

core/src/avm2/error.rs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -316,6 +316,25 @@ pub fn make_error_1014<'gc>(
316316
}
317317
}
318318

319+
#[inline(never)]
320+
#[cold]
321+
pub fn make_error_1019<'gc>(
322+
activation: &mut Activation<'_, 'gc>,
323+
index: Option<usize>,
324+
) -> Error<'gc> {
325+
let message = if let Some(index) = index {
326+
format!("Error #1019: Getscopeobject {index} is out of bounds.")
327+
} else {
328+
"Error #1019: Getscopeobject is out of bounds.".to_string()
329+
};
330+
331+
let err = verify_error(activation, &message, 1019);
332+
match err {
333+
Ok(err) => Error::avm_error(err),
334+
Err(err) => err,
335+
}
336+
}
337+
319338
#[inline(never)]
320339
#[cold]
321340
pub fn make_error_1021<'gc>(activation: &mut Activation<'_, 'gc>) -> Error<'gc> {

core/src/avm2/optimizer/type_aware.rs

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
use crate::avm2::error::{
2-
make_error_1026, make_error_1035, make_error_1051, make_error_1058, verify_error,
2+
make_error_1019, make_error_1026, make_error_1035, make_error_1051, make_error_1058,
3+
verify_error,
34
};
45
use crate::avm2::method::{Method, MethodAssociation, MethodKind, ResolvedParamConfig};
56
use crate::avm2::multiname::Multiname;
@@ -1230,11 +1231,7 @@ fn abstract_interpret_ops<'gc>(
12301231
}
12311232
Op::GetScopeObject { index } => {
12321233
if index >= scope_stack.len() {
1233-
return Err(Error::avm_error(verify_error(
1234-
activation,
1235-
"Error #1019: Getscopeobject is out of bounds.",
1236-
1019,
1237-
)?));
1234+
return Err(make_error_1019(activation, Some(index)));
12381235
}
12391236

12401237
stack.push(activation, scope_stack.at(index).0)?;
@@ -1977,11 +1974,7 @@ fn abstract_interpret_ops<'gc>(
19771974
Op::SetGlobalSlot { .. } => {
19781975
let outer_scope = activation.outer();
19791976
if outer_scope.is_empty() && scope_stack.is_empty() {
1980-
return Err(Error::avm_error(verify_error(
1981-
activation,
1982-
"Error #1019: Getscopeobject is out of bounds.",
1983-
1019,
1984-
)?));
1977+
return Err(make_error_1019(activation, Some(0)));
19851978
}
19861979

19871980
stack.pop(activation)?;

core/src/avm2/verify.rs

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use crate::avm2::class::Class;
22
use crate::avm2::error::{
3-
make_error_1014, make_error_1021, make_error_1025, make_error_1032, make_error_1054,
4-
make_error_1107, verify_error, Error1014Type,
3+
make_error_1014, make_error_1019, make_error_1021, make_error_1025, make_error_1032,
4+
make_error_1054, make_error_1107, verify_error, Error1014Type,
55
};
66
use crate::avm2::method::Method;
77
use crate::avm2::multiname::Multiname;
@@ -797,11 +797,7 @@ fn translate_op<'gc>(
797797

798798
AbcOp::GetOuterScope { index } => {
799799
if activation.outer().get(index as usize).is_none() {
800-
return Err(Error::avm_error(verify_error(
801-
activation,
802-
"Error #1019: Getscopeobject is out of bounds.",
803-
1019,
804-
)?));
800+
return Err(make_error_1019(activation, None));
805801
}
806802
}
807803

0 commit comments

Comments
 (0)