From 0a66dac2806001054f9b1609dc7f0bc0c0085944 Mon Sep 17 00:00:00 2001 From: relrelb Date: Fri, 22 Oct 2021 21:30:04 +0300 Subject: [PATCH] avm1: Remove `set` specialization from `impl_custom_object!` `base_proto` is going to be eliminated in a following commit, so there will no longer be a difference between the two `set_local` variants. --- core/src/avm1/object/bevel_filter.rs | 1 - core/src/avm1/object/bitmap_data.rs | 1 - core/src/avm1/object/blur_filter.rs | 1 - core/src/avm1/object/color_matrix_filter.rs | 1 - .../src/avm1/object/color_transform_object.rs | 1 - core/src/avm1/object/convolution_filter.rs | 1 - core/src/avm1/object/custom_object.rs | 39 ++++++------------- core/src/avm1/object/date_object.rs | 1 - .../avm1/object/displacement_map_filter.rs | 1 - core/src/avm1/object/drop_shadow_filter.rs | 1 - core/src/avm1/object/glow_filter.rs | 1 - core/src/avm1/object/gradient_bevel_filter.rs | 1 - core/src/avm1/object/gradient_glow_filter.rs | 1 - core/src/avm1/object/shared_object.rs | 1 - core/src/avm1/object/sound_object.rs | 1 - core/src/avm1/object/transform_object.rs | 1 - core/src/avm1/object/value_object.rs | 1 - 17 files changed, 12 insertions(+), 43 deletions(-) diff --git a/core/src/avm1/object/bevel_filter.rs b/core/src/avm1/object/bevel_filter.rs index 6cac00309..1636d7a8d 100644 --- a/core/src/avm1/object/bevel_filter.rs +++ b/core/src/avm1/object/bevel_filter.rs @@ -118,7 +118,6 @@ impl<'gc> BevelFilterObject<'gc> { impl<'gc> TObject<'gc> for BevelFilterObject<'gc> { impl_custom_object!(base { - set(proto: bevel_filter); bare_object(as_bevel_filter_object -> BevelFilterObject::empty_object); }); } diff --git a/core/src/avm1/object/bitmap_data.rs b/core/src/avm1/object/bitmap_data.rs index 21eee60dc..2826fcff6 100644 --- a/core/src/avm1/object/bitmap_data.rs +++ b/core/src/avm1/object/bitmap_data.rs @@ -54,7 +54,6 @@ impl<'gc> BitmapDataObject<'gc> { impl<'gc> TObject<'gc> for BitmapDataObject<'gc> { impl_custom_object!(base { - set(proto: bitmap_data); bare_object(as_bitmap_data_object -> BitmapDataObject::empty_object); }); } diff --git a/core/src/avm1/object/blur_filter.rs b/core/src/avm1/object/blur_filter.rs index 0360dc3bb..9fe3dcb7f 100644 --- a/core/src/avm1/object/blur_filter.rs +++ b/core/src/avm1/object/blur_filter.rs @@ -54,7 +54,6 @@ impl<'gc> BlurFilterObject<'gc> { impl<'gc> TObject<'gc> for BlurFilterObject<'gc> { impl_custom_object!(base { - set(proto: blur_filter); bare_object(as_blur_filter_object -> BlurFilterObject::empty_object); }); } diff --git a/core/src/avm1/object/color_matrix_filter.rs b/core/src/avm1/object/color_matrix_filter.rs index 735931018..c1f83cc8f 100644 --- a/core/src/avm1/object/color_matrix_filter.rs +++ b/core/src/avm1/object/color_matrix_filter.rs @@ -47,7 +47,6 @@ impl<'gc> ColorMatrixFilterObject<'gc> { impl<'gc> TObject<'gc> for ColorMatrixFilterObject<'gc> { impl_custom_object!(base { - set(proto: color_matrix_filter); bare_object(as_color_matrix_filter_object -> ColorMatrixFilterObject::empty_object); }); } diff --git a/core/src/avm1/object/color_transform_object.rs b/core/src/avm1/object/color_transform_object.rs index a74ff0240..0d607c156 100644 --- a/core/src/avm1/object/color_transform_object.rs +++ b/core/src/avm1/object/color_transform_object.rs @@ -92,7 +92,6 @@ impl<'gc> ColorTransformObject<'gc> { impl<'gc> TObject<'gc> for ColorTransformObject<'gc> { impl_custom_object!(base { - set(proto: color_transform); bare_object(as_color_transform_object -> ColorTransformObject::empty_color_transform_object); }); } diff --git a/core/src/avm1/object/convolution_filter.rs b/core/src/avm1/object/convolution_filter.rs index 52f4c51b1..160a938df 100644 --- a/core/src/avm1/object/convolution_filter.rs +++ b/core/src/avm1/object/convolution_filter.rs @@ -100,7 +100,6 @@ impl<'gc> ConvolutionFilterObject<'gc> { impl<'gc> TObject<'gc> for ConvolutionFilterObject<'gc> { impl_custom_object!(base { - set(proto: convolution_filter); bare_object(as_convolution_filter_object -> ConvolutionFilterObject::empty_object); }); } diff --git a/core/src/avm1/object/custom_object.rs b/core/src/avm1/object/custom_object.rs index 2edd287ad..bc7671e13 100644 --- a/core/src/avm1/object/custom_object.rs +++ b/core/src/avm1/object/custom_object.rs @@ -1,33 +1,7 @@ #[macro_export] macro_rules! impl_custom_object { ($field:ident) => { - crate::impl_custom_object!($field { set(proto: self); }); - }; - - (@extra $field:ident set(proto: self)) => { - fn set_local( - &self, - name: crate::avm1::AvmString<'gc>, - value: crate::avm1::Value<'gc>, - activation: &mut crate::avm1::Activation<'_, 'gc, '_>, - this: crate::avm1::Object<'gc>, - base_proto: Option>, - ) -> Result<(), crate::avm1::Error<'gc>> { - self.0.read().$field.set_local(name, value, activation, this, base_proto) - } - }; - - (@extra $field:ident set(proto: $proto:ident)) => { - fn set_local( - &self, - name: crate::avm1::AvmString<'gc>, - value: crate::avm1::Value<'gc>, - activation: &mut crate::avm1::Activation<'_, 'gc, '_>, - this: crate::avm1::Object<'gc>, - _base_proto: Option>, - ) -> Result<(), crate::avm1::Error<'gc>> { - self.0.read().$field.set_local(name, value, activation, this, Some(activation.context.avm1.prototypes.$proto)) - } + crate::impl_custom_object!($field {}); }; (@extra $field:ident bare_object($as_obj:ident -> $obj_type:ident :: $new:ident)) => { @@ -61,6 +35,17 @@ macro_rules! impl_custom_object { self.0.read().$field.get_local_stored(name, activation) } + fn set_local( + &self, + name: crate::avm1::AvmString<'gc>, + value: crate::avm1::Value<'gc>, + activation: &mut crate::avm1::Activation<'_, 'gc, '_>, + this: crate::avm1::Object<'gc>, + base_proto: Option>, + ) -> Result<(), crate::avm1::Error<'gc>> { + self.0.read().$field.set_local(name, value, activation, this, base_proto) + } + fn call( &self, name: crate::avm1::AvmString<'gc>, diff --git a/core/src/avm1/object/date_object.rs b/core/src/avm1/object/date_object.rs index ceb11f66d..5bb3c186f 100644 --- a/core/src/avm1/object/date_object.rs +++ b/core/src/avm1/object/date_object.rs @@ -65,7 +65,6 @@ impl<'gc> DateObject<'gc> { impl<'gc> TObject<'gc> for DateObject<'gc> { impl_custom_object!(base { - set(proto: self); bare_object(as_date_object -> DateObject::empty); }); } diff --git a/core/src/avm1/object/displacement_map_filter.rs b/core/src/avm1/object/displacement_map_filter.rs index f28ac458e..a3ed9a97f 100644 --- a/core/src/avm1/object/displacement_map_filter.rs +++ b/core/src/avm1/object/displacement_map_filter.rs @@ -116,7 +116,6 @@ impl<'gc> DisplacementMapFilterObject<'gc> { impl<'gc> TObject<'gc> for DisplacementMapFilterObject<'gc> { impl_custom_object!(base { - set(proto: displacement_map_filter); bare_object(as_displacement_map_filter_object -> DisplacementMapFilterObject::empty_object); }); } diff --git a/core/src/avm1/object/drop_shadow_filter.rs b/core/src/avm1/object/drop_shadow_filter.rs index 12a29faa5..dded3b118 100644 --- a/core/src/avm1/object/drop_shadow_filter.rs +++ b/core/src/avm1/object/drop_shadow_filter.rs @@ -86,7 +86,6 @@ impl<'gc> DropShadowFilterObject<'gc> { impl<'gc> TObject<'gc> for DropShadowFilterObject<'gc> { impl_custom_object!(base { - set(proto: drop_shadow_filter); bare_object(as_drop_shadow_filter_object -> DropShadowFilterObject::empty_object); }); } diff --git a/core/src/avm1/object/glow_filter.rs b/core/src/avm1/object/glow_filter.rs index 7e519f08a..883ca89c0 100644 --- a/core/src/avm1/object/glow_filter.rs +++ b/core/src/avm1/object/glow_filter.rs @@ -74,7 +74,6 @@ impl<'gc> GlowFilterObject<'gc> { impl<'gc> TObject<'gc> for GlowFilterObject<'gc> { impl_custom_object!(base { - set(proto: glow_filter); bare_object(as_glow_filter_object -> GlowFilterObject::empty_object); }); } diff --git a/core/src/avm1/object/gradient_bevel_filter.rs b/core/src/avm1/object/gradient_bevel_filter.rs index a3c796392..bcb61864f 100644 --- a/core/src/avm1/object/gradient_bevel_filter.rs +++ b/core/src/avm1/object/gradient_bevel_filter.rs @@ -99,7 +99,6 @@ impl<'gc> GradientBevelFilterObject<'gc> { impl<'gc> TObject<'gc> for GradientBevelFilterObject<'gc> { impl_custom_object!(base { - set(proto: gradient_bevel_filter); bare_object(as_gradient_bevel_filter_object -> GradientBevelFilterObject::empty_object); }); } diff --git a/core/src/avm1/object/gradient_glow_filter.rs b/core/src/avm1/object/gradient_glow_filter.rs index bd8b85a77..3c109b460 100644 --- a/core/src/avm1/object/gradient_glow_filter.rs +++ b/core/src/avm1/object/gradient_glow_filter.rs @@ -99,7 +99,6 @@ impl<'gc> GradientGlowFilterObject<'gc> { impl<'gc> TObject<'gc> for GradientGlowFilterObject<'gc> { impl_custom_object!(base { - set(proto: gradient_glow_filter); bare_object(as_gradient_glow_filter_object -> GradientGlowFilterObject::empty_object); }); } diff --git a/core/src/avm1/object/shared_object.rs b/core/src/avm1/object/shared_object.rs index e03f25810..3d5d3b501 100644 --- a/core/src/avm1/object/shared_object.rs +++ b/core/src/avm1/object/shared_object.rs @@ -59,7 +59,6 @@ impl<'gc> SharedObject<'gc> { impl<'gc> TObject<'gc> for SharedObject<'gc> { impl_custom_object!(base { - set(proto: self); bare_object(as_shared_object -> SharedObject::empty_shared_obj); }); } diff --git a/core/src/avm1/object/sound_object.rs b/core/src/avm1/object/sound_object.rs index 8cac717a0..23080c575 100644 --- a/core/src/avm1/object/sound_object.rs +++ b/core/src/avm1/object/sound_object.rs @@ -119,7 +119,6 @@ impl<'gc> SoundObject<'gc> { impl<'gc> TObject<'gc> for SoundObject<'gc> { impl_custom_object!(base { - set(proto: self); bare_object(as_sound_object -> SoundObject::empty_sound); }); } diff --git a/core/src/avm1/object/transform_object.rs b/core/src/avm1/object/transform_object.rs index 10541eff9..4067dd045 100644 --- a/core/src/avm1/object/transform_object.rs +++ b/core/src/avm1/object/transform_object.rs @@ -51,7 +51,6 @@ impl<'gc> TransformObject<'gc> { impl<'gc> TObject<'gc> for TransformObject<'gc> { impl_custom_object!(base { - set(proto: color_transform); bare_object(as_transform_object -> TransformObject::empty); }); diff --git a/core/src/avm1/object/value_object.rs b/core/src/avm1/object/value_object.rs index 695f6d04d..fcb868f06 100644 --- a/core/src/avm1/object/value_object.rs +++ b/core/src/avm1/object/value_object.rs @@ -116,7 +116,6 @@ impl fmt::Debug for ValueObject<'_> { impl<'gc> TObject<'gc> for ValueObject<'gc> { impl_custom_object!(base { - set(proto: self); bare_object(as_value_object -> ValueObject::empty_box); }); }