avm2: Implement StrictArray conversion for FLV script data
This commit is contained in:
parent
ab02e89b3b
commit
0a4d1449fc
|
@ -1,4 +1,4 @@
|
|||
use crate::avm2::{Activation, TObject as _, Value as Avm2Value};
|
||||
use crate::avm2::{Activation, ArrayObject, ArrayStorage, TObject as _, Value as Avm2Value};
|
||||
use crate::string::AvmString;
|
||||
use flv_rs::{Value as FlvValue, Variable as FlvVariable};
|
||||
|
||||
|
@ -29,6 +29,22 @@ fn avm2_object_from_flv_variables<'gc>(
|
|||
info_object.into()
|
||||
}
|
||||
|
||||
fn avm2_array_from_flv_values<'gc>(
|
||||
activation: &mut Activation<'_, 'gc>,
|
||||
values: Vec<FlvValue>,
|
||||
) -> Avm2Value<'gc> {
|
||||
let storage = ArrayStorage::from_storage(
|
||||
values
|
||||
.iter()
|
||||
.map(|v| Some(v.clone().to_avm2_value(activation)))
|
||||
.collect::<Vec<Option<Avm2Value<'gc>>>>(),
|
||||
);
|
||||
|
||||
ArrayObject::from_storage(activation, storage)
|
||||
.unwrap()
|
||||
.into()
|
||||
}
|
||||
|
||||
pub trait FlvValueAvm2Ext<'gc> {
|
||||
fn to_avm2_value(self, activation: &mut Activation<'_, 'gc>) -> Avm2Value<'gc>;
|
||||
}
|
||||
|
@ -36,7 +52,8 @@ pub trait FlvValueAvm2Ext<'gc> {
|
|||
impl<'gc> FlvValueAvm2Ext<'gc> for FlvValue<'_> {
|
||||
fn to_avm2_value(self, activation: &mut Activation<'_, 'gc>) -> Avm2Value<'gc> {
|
||||
match self {
|
||||
FlvValue::EcmaArray(values) => avm2_object_from_flv_variables(activation, values),
|
||||
FlvValue::EcmaArray(variables) => avm2_object_from_flv_variables(activation, variables),
|
||||
FlvValue::StrictArray(values) => avm2_array_from_flv_values(activation, values),
|
||||
FlvValue::String(string_data) | FlvValue::LongString(string_data) => {
|
||||
AvmString::new_utf8_bytes(activation.context.gc_context, string_data).into()
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue