avm2: Add make_error_2008() function and use it
This commit is contained in:
parent
24dfb82d12
commit
4a50f9f31e
|
@ -133,6 +133,23 @@ pub fn make_reference_error<'gc>(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[inline(never)]
|
||||||
|
#[cold]
|
||||||
|
pub fn make_error_2008<'gc>(activation: &mut Activation<'_, 'gc>, param_name: &str) -> Error<'gc> {
|
||||||
|
let err = argument_error(
|
||||||
|
activation,
|
||||||
|
&format!(
|
||||||
|
"Error #2008: Parameter {} must be one of the accepted values.",
|
||||||
|
param_name
|
||||||
|
),
|
||||||
|
2008,
|
||||||
|
);
|
||||||
|
match err {
|
||||||
|
Ok(err) => Error::AvmError(err),
|
||||||
|
Err(err) => err,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[inline(never)]
|
#[inline(never)]
|
||||||
#[cold]
|
#[cold]
|
||||||
pub fn range_error<'gc>(
|
pub fn range_error<'gc>(
|
||||||
|
|
|
@ -5,7 +5,7 @@ use swf::{
|
||||||
Fixed8, GlowFilter, GlowFilterFlags, GradientFilter, GradientFilterFlags, GradientRecord,
|
Fixed8, GlowFilter, GlowFilterFlags, GradientFilter, GradientFilterFlags, GradientRecord,
|
||||||
};
|
};
|
||||||
|
|
||||||
use crate::avm2::error::{argument_error, type_error};
|
use crate::avm2::error::{make_error_2008, type_error};
|
||||||
use crate::avm2::{Activation, ArrayObject, ClassObject, Error, Object, TObject, Value};
|
use crate::avm2::{Activation, ArrayObject, ClassObject, Error, Object, TObject, Value};
|
||||||
|
|
||||||
pub trait FilterAvm2Ext {
|
pub trait FilterAvm2Ext {
|
||||||
|
@ -77,7 +77,7 @@ impl FilterAvm2Ext for Filter {
|
||||||
Err(Error::AvmError(type_error(
|
Err(Error::AvmError(type_error(
|
||||||
activation,
|
activation,
|
||||||
&format!(
|
&format!(
|
||||||
"Type Coercion failed: cannot convert {object:?} to flash.filters.BitmapFilter."
|
"Error #1034: Type Coercion failed: cannot convert {object:?} to flash.filters.BitmapFilter."
|
||||||
),
|
),
|
||||||
1034,
|
1034,
|
||||||
)?))
|
)?))
|
||||||
|
@ -396,11 +396,7 @@ fn avm2_to_displacement_map_filter<'gc>(
|
||||||
} else if &mode == b"wrap" {
|
} else if &mode == b"wrap" {
|
||||||
DisplacementMapFilterMode::Wrap
|
DisplacementMapFilterMode::Wrap
|
||||||
} else {
|
} else {
|
||||||
return Err(Error::AvmError(argument_error(
|
return Err(make_error_2008(activation, "mode"));
|
||||||
activation,
|
|
||||||
"Parameter mode must be one of the accepted values.",
|
|
||||||
2008,
|
|
||||||
)?));
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
DisplacementMapFilterMode::Wrap
|
DisplacementMapFilterMode::Wrap
|
||||||
|
@ -420,7 +416,7 @@ fn avm2_to_displacement_map_filter<'gc>(
|
||||||
return Err(Error::AvmError(type_error(
|
return Err(Error::AvmError(type_error(
|
||||||
activation,
|
activation,
|
||||||
&format!(
|
&format!(
|
||||||
"Type Coercion failed: cannot convert {bitmap:?} to flash.display.BitmapData."
|
"Error #1034: Type Coercion failed: cannot convert {bitmap:?} to flash.display.BitmapData."
|
||||||
),
|
),
|
||||||
1034,
|
1034,
|
||||||
)?));
|
)?));
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
//! `flash.display.BitmapData` builtin/prototype
|
//! `flash.display.BitmapData` builtin/prototype
|
||||||
|
|
||||||
use crate::avm2::activation::Activation;
|
use crate::avm2::activation::Activation;
|
||||||
use crate::avm2::error::argument_error;
|
use crate::avm2::error::{argument_error, make_error_2008};
|
||||||
use crate::avm2::filters::FilterAvm2Ext;
|
use crate::avm2::filters::FilterAvm2Ext;
|
||||||
use crate::avm2::object::{BitmapDataObject, ByteArrayObject, Object, TObject, VectorObject};
|
use crate::avm2::object::{BitmapDataObject, ByteArrayObject, Object, TObject, VectorObject};
|
||||||
use crate::avm2::value::Value;
|
use crate::avm2::value::Value;
|
||||||
|
@ -812,7 +812,7 @@ pub fn draw<'gc>(
|
||||||
blend_mode = mode;
|
blend_mode = mode;
|
||||||
} else {
|
} else {
|
||||||
tracing::error!("Unknown blend mode {:?}", mode);
|
tracing::error!("Unknown blend mode {:?}", mode);
|
||||||
return Err("ArgumentError: Error #2008: Parameter blendMode must be one of the accepted values.".into());
|
return Err(make_error_2008(activation, "blendMode"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -891,7 +891,7 @@ pub fn draw_with_quality<'gc>(
|
||||||
blend_mode = mode;
|
blend_mode = mode;
|
||||||
} else {
|
} else {
|
||||||
tracing::error!("Unknown blend mode {:?}", mode);
|
tracing::error!("Unknown blend mode {:?}", mode);
|
||||||
return Err("ArgumentError: Error #2008: Parameter blendMode must be one of the accepted values.".into());
|
return Err(make_error_2008(activation, "blendMode"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
//! `flash.display.DisplayObject` builtin/prototype
|
//! `flash.display.DisplayObject` builtin/prototype
|
||||||
|
|
||||||
use crate::avm2::activation::Activation;
|
use crate::avm2::activation::Activation;
|
||||||
|
use crate::avm2::error::make_error_2008;
|
||||||
use crate::avm2::filters::FilterAvm2Ext;
|
use crate::avm2::filters::FilterAvm2Ext;
|
||||||
use crate::avm2::object::{Object, TObject};
|
use crate::avm2::object::{Object, TObject};
|
||||||
use crate::avm2::value::Value;
|
use crate::avm2::value::Value;
|
||||||
|
@ -765,7 +766,7 @@ pub fn set_blend_mode<'gc>(
|
||||||
dobj.set_blend_mode(activation.context.gc_context, mode);
|
dobj.set_blend_mode(activation.context.gc_context, mode);
|
||||||
} else {
|
} else {
|
||||||
tracing::error!("Unknown blend mode {}", mode);
|
tracing::error!("Unknown blend mode {}", mode);
|
||||||
return Err("ArgumentError: Error #2008: Parameter blendMode must be one of the accepted values.".into());
|
return Err(make_error_2008(activation, "blendMode"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Ok(Value::Undefined)
|
Ok(Value::Undefined)
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
//! `flash.display.Graphics` builtin/prototype
|
//! `flash.display.Graphics` builtin/prototype
|
||||||
|
|
||||||
use crate::avm2::activation::Activation;
|
use crate::avm2::activation::Activation;
|
||||||
use crate::avm2::error::argument_error;
|
use crate::avm2::error::make_error_2008;
|
||||||
use crate::avm2::globals::flash::geom::transform::object_to_matrix;
|
use crate::avm2::globals::flash::geom::transform::object_to_matrix;
|
||||||
use crate::avm2::object::{Object, TObject, VectorObject};
|
use crate::avm2::object::{Object, TObject, VectorObject};
|
||||||
use crate::avm2::parameters::ParametersExt;
|
use crate::avm2::parameters::ParametersExt;
|
||||||
|
@ -191,11 +191,7 @@ fn parse_gradient_type<'gc>(
|
||||||
} else if &gradient_type == b"radial" {
|
} else if &gradient_type == b"radial" {
|
||||||
Ok(GradientType::Radial)
|
Ok(GradientType::Radial)
|
||||||
} else {
|
} else {
|
||||||
Err(Error::AvmError(argument_error(
|
Err(make_error_2008(activation, "type"))
|
||||||
activation,
|
|
||||||
"Parameter type must be one of the accepted values.",
|
|
||||||
2008,
|
|
||||||
)?))
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
//! `flash.display.Stage` builtin/prototype
|
//! `flash.display.Stage` builtin/prototype
|
||||||
|
|
||||||
use crate::avm2::activation::Activation;
|
use crate::avm2::activation::Activation;
|
||||||
use crate::avm2::error::argument_error;
|
use crate::avm2::error::make_error_2008;
|
||||||
use crate::avm2::object::{Object, TObject};
|
use crate::avm2::object::{Object, TObject};
|
||||||
use crate::avm2::parameters::ParametersExt;
|
use crate::avm2::parameters::ParametersExt;
|
||||||
use crate::avm2::value::Value;
|
use crate::avm2::value::Value;
|
||||||
|
@ -176,11 +176,7 @@ pub fn set_display_state<'gc>(
|
||||||
.stage
|
.stage
|
||||||
.set_display_state(&mut activation.context, display_state);
|
.set_display_state(&mut activation.context, display_state);
|
||||||
} else {
|
} else {
|
||||||
return Err(Error::AvmError(argument_error(
|
return Err(make_error_2008(activation, "displayState"));
|
||||||
activation,
|
|
||||||
"Error #2008: Parameter displayState must be one of the accepted values.",
|
|
||||||
2008,
|
|
||||||
)?));
|
|
||||||
}
|
}
|
||||||
Ok(Value::Undefined)
|
Ok(Value::Undefined)
|
||||||
}
|
}
|
||||||
|
@ -290,11 +286,7 @@ pub fn set_scale_mode<'gc>(
|
||||||
.stage
|
.stage
|
||||||
.set_scale_mode(&mut activation.context, scale_mode);
|
.set_scale_mode(&mut activation.context, scale_mode);
|
||||||
} else {
|
} else {
|
||||||
return Err(Error::AvmError(argument_error(
|
return Err(make_error_2008(activation, "scaleMode"));
|
||||||
activation,
|
|
||||||
"Error #2008: Parameter scaleMode must be one of the accepted values.",
|
|
||||||
2008,
|
|
||||||
)?));
|
|
||||||
}
|
}
|
||||||
Ok(Value::Undefined)
|
Ok(Value::Undefined)
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
use crate::avm2::error::argument_error;
|
use crate::avm2::error::make_error_2008;
|
||||||
use crate::avm2::parameters::ParametersExt;
|
use crate::avm2::parameters::ParametersExt;
|
||||||
use crate::avm2::Activation;
|
use crate::avm2::Activation;
|
||||||
use crate::avm2::TObject;
|
use crate::avm2::TObject;
|
||||||
|
@ -618,27 +618,11 @@ pub fn set_sampler_state_at<'gc>(
|
||||||
let filter = args[2].coerce_to_string(activation)?;
|
let filter = args[2].coerce_to_string(activation)?;
|
||||||
let mip_filter = args[3].coerce_to_string(activation)?;
|
let mip_filter = args[3].coerce_to_string(activation)?;
|
||||||
|
|
||||||
let wrap = Context3DWrapMode::from_wstr(&wrap).ok_or_else(|| {
|
let wrap = Context3DWrapMode::from_wstr(&wrap)
|
||||||
Error::AvmError(
|
.ok_or_else(|| make_error_2008(activation, "wrap"))?;
|
||||||
argument_error(
|
|
||||||
activation,
|
|
||||||
"Error #2008: Parameter wrap must be one of the accepted values.",
|
|
||||||
2008,
|
|
||||||
)
|
|
||||||
.expect("Failed to construct error"),
|
|
||||||
)
|
|
||||||
})?;
|
|
||||||
|
|
||||||
let filter = Context3DTextureFilter::from_wstr(&filter).ok_or_else(|| {
|
let filter = Context3DTextureFilter::from_wstr(&filter)
|
||||||
Error::AvmError(
|
.ok_or_else(|| make_error_2008(activation, "filter"))?;
|
||||||
argument_error(
|
|
||||||
activation,
|
|
||||||
"Error #2008: Parameter filter must be one of the accepted values.",
|
|
||||||
2008,
|
|
||||||
)
|
|
||||||
.expect("Failed to construct error"),
|
|
||||||
)
|
|
||||||
})?;
|
|
||||||
|
|
||||||
if matches!(
|
if matches!(
|
||||||
filter,
|
filter,
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
use crate::avm2::activation::Activation;
|
use crate::avm2::activation::Activation;
|
||||||
|
use crate::avm2::error::make_error_2008;
|
||||||
use crate::avm2::object::{ArrayObject, Object, TObject};
|
use crate::avm2::object::{ArrayObject, Object, TObject};
|
||||||
use crate::avm2::value::Value;
|
use crate::avm2::value::Value;
|
||||||
use crate::avm2::Error;
|
use crate::avm2::Error;
|
||||||
|
@ -54,10 +55,7 @@ pub fn set_align<'gc>(
|
||||||
} else if value == WStr::from_units(b"justify") {
|
} else if value == WStr::from_units(b"justify") {
|
||||||
Some(swf::TextAlign::Justify)
|
Some(swf::TextAlign::Justify)
|
||||||
} else {
|
} else {
|
||||||
return Err(
|
return Err(make_error_2008(activation, "align"));
|
||||||
"ArgumentError: Error #2008: Parameter align must be one of the accepted values."
|
|
||||||
.into(),
|
|
||||||
);
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue