From c532d7084459f11e3c2725be7137093047f438fa Mon Sep 17 00:00:00 2001 From: relrelb Date: Sat, 24 Sep 2022 16:52:58 +0300 Subject: [PATCH] avm2: Port `flash.net.ObjectEncoding` to ActionScript Along with the `flash.net.IDynamicPropertyOutput` and `flash.net.IDynamicPropertyWriter` interfaces. --- core/src/avm2/globals.rs | 6 ---- .../flash/net/IDynamicPropertyOutput.as | 5 +++ .../flash/net/IDynamicPropertyWriter.as | 5 +++ .../avm2/globals/flash/net/ObjectEncoding.as | 13 ++++++++ .../avm2/globals/flash/net/object_encoding.rs | 33 +++---------------- core/src/avm2/globals/globals.as | 5 +++ 6 files changed, 32 insertions(+), 35 deletions(-) create mode 100644 core/src/avm2/globals/flash/net/IDynamicPropertyOutput.as create mode 100644 core/src/avm2/globals/flash/net/IDynamicPropertyWriter.as create mode 100644 core/src/avm2/globals/flash/net/ObjectEncoding.as diff --git a/core/src/avm2/globals.rs b/core/src/avm2/globals.rs index e869c85f8..d1b7d5ecf 100644 --- a/core/src/avm2/globals.rs +++ b/core/src/avm2/globals.rs @@ -603,12 +603,6 @@ pub fn load_player_globals<'gc>( script ); - class( - activation, - flash::net::object_encoding::create_class(mc), - script, - )?; - // package `flash.text` avm2_system_class!( textfield, diff --git a/core/src/avm2/globals/flash/net/IDynamicPropertyOutput.as b/core/src/avm2/globals/flash/net/IDynamicPropertyOutput.as new file mode 100644 index 000000000..ea807a829 --- /dev/null +++ b/core/src/avm2/globals/flash/net/IDynamicPropertyOutput.as @@ -0,0 +1,5 @@ +package flash.net { + public interface IDynamicPropertyOutput { + function writeDynamicProperty(name: String, value: *): void; + } +} diff --git a/core/src/avm2/globals/flash/net/IDynamicPropertyWriter.as b/core/src/avm2/globals/flash/net/IDynamicPropertyWriter.as new file mode 100644 index 000000000..34c0042f6 --- /dev/null +++ b/core/src/avm2/globals/flash/net/IDynamicPropertyWriter.as @@ -0,0 +1,5 @@ +package flash.net { + public interface IDynamicPropertyWriter { + function writeDynamicProperties(obj: Object, output: IDynamicPropertyOutput): void; + } +} diff --git a/core/src/avm2/globals/flash/net/ObjectEncoding.as b/core/src/avm2/globals/flash/net/ObjectEncoding.as new file mode 100644 index 000000000..9d6ac2b12 --- /dev/null +++ b/core/src/avm2/globals/flash/net/ObjectEncoding.as @@ -0,0 +1,13 @@ +package flash.net { + public final class ObjectEncoding { + public static const AMF0: uint = 0; + + public static const AMF3: uint = 3; + + public static const DEFAULT: uint = 3; + + public static native function get dynamicPropertyWriter(): IDynamicPropertyWriter; + + public static native function set dynamicPropertyWriter(value: IDynamicPropertyWriter): void; + } +} diff --git a/core/src/avm2/globals/flash/net/object_encoding.rs b/core/src/avm2/globals/flash/net/object_encoding.rs index 23d4206f7..6b6cf7d0b 100644 --- a/core/src/avm2/globals/flash/net/object_encoding.rs +++ b/core/src/avm2/globals/flash/net/object_encoding.rs @@ -1,47 +1,22 @@ use crate::avm2::activation::Activation; -use crate::avm2::class::{Class, ClassAttributes}; -use crate::avm2::method::Method; use crate::avm2::object::Object; use crate::avm2::value::Value; use crate::avm2::Error; -use crate::avm2::Multiname; -use crate::avm2::Namespace; -use crate::avm2::QName; -use gc_arena::{GcCell, MutationContext}; -/// Implements `flash.net.ObjectEncoding`'s instance constructor. -pub fn instance_init<'gc>( +pub fn get_dynamic_property_writer<'gc>( _activation: &mut Activation<'_, 'gc, '_>, _this: Option>, _args: &[Value<'gc>], ) -> Result, Error<'gc>> { + log::warn!("ObjectEncoding.dynamicPropertyWriter: Not yet implemented"); Ok(Value::Undefined) } -/// Implements `flash.net.ObjectEncoding`'s class constructor. -pub fn class_init<'gc>( +pub fn set_dynamic_property_writer<'gc>( _activation: &mut Activation<'_, 'gc, '_>, _this: Option>, _args: &[Value<'gc>], ) -> Result, Error<'gc>> { + log::warn!("ObjectEncoding.dynamicPropertyWriter: Not yet implemented"); Ok(Value::Undefined) } - -pub fn create_class<'gc>(mc: MutationContext<'gc, '_>) -> GcCell<'gc, Class<'gc>> { - let class = Class::new( - QName::new(Namespace::package("flash.net"), "ObjectEncoding"), - Some(Multiname::public("Object")), - Method::from_builtin(instance_init, "", mc), - Method::from_builtin(class_init, "", mc), - mc, - ); - - let mut write = class.write(mc); - - write.set_attributes(ClassAttributes::FINAL | ClassAttributes::SEALED); - - const CONSTANTS: &[(&str, u32)] = &[("AMF0", 0), ("AMF3", 3), ("DEFAULT", 3)]; - write.define_public_constant_uint_class_traits(CONSTANTS); - - class -} diff --git a/core/src/avm2/globals/globals.as b/core/src/avm2/globals/globals.as index eaf53092a..8734340ff 100644 --- a/core/src/avm2/globals/globals.as +++ b/core/src/avm2/globals/globals.as @@ -141,16 +141,21 @@ include "flash/media/StageVideoAvailability.as" include "flash/media/StageVideoAvailabilityReason.as" include "flash/media/VideoCodec.as" include "flash/media/VideoStatus.as" + +include "flash/net/IDynamicPropertyOutput.as" +include "flash/net/IDynamicPropertyWriter.as" include "flash/net/NetGroupReceiveMode.as" include "flash/net/NetGroupReplicationStrategy.as" include "flash/net/NetGroupSendMode.as" include "flash/net/NetGroupSendResult.as" +include "flash/net/ObjectEncoding.as" include "flash/net/SharedObjectFlushStatus.as" include "flash/net/URLLoader.as" include "flash/net/URLLoaderDataFormat.as" include "flash/net/URLRequest.as" include "flash/net/URLRequestHeader.as" include "flash/net/URLRequestMethod.as" + include "flash/printing/PrintJobOrientation.as" include "flash/security/CertificateStatus.as" include "flash/system/Capabilities.as"