swf: Add support for the `TypeName` multiname type.
This commit is contained in:
parent
8b665b590d
commit
47e3b2229a
|
@ -340,6 +340,7 @@ impl<'gc> Multiname<'gc> {
|
|||
name: Some(name),
|
||||
}
|
||||
}
|
||||
AbcMultiname::TypeName { .. } => return Err("TypeName not implemented".into()),
|
||||
})
|
||||
}
|
||||
|
||||
|
|
|
@ -171,6 +171,20 @@ impl<'a> Reader<'a> {
|
|||
0x1c => Multiname::MultinameLA {
|
||||
namespace_set: self.read_index()?,
|
||||
},
|
||||
0x1d => {
|
||||
let base_type = self.read_index()?;
|
||||
let count = self.read_u30()?;
|
||||
let mut parameters = Vec::new();
|
||||
|
||||
for _ in 0..count {
|
||||
parameters.push(self.read_index()?);
|
||||
}
|
||||
|
||||
Multiname::TypeName {
|
||||
base_type,
|
||||
parameters,
|
||||
}
|
||||
}
|
||||
_ => return Err(Error::invalid_data("Invalid multiname kind")),
|
||||
})
|
||||
}
|
||||
|
|
|
@ -82,6 +82,10 @@ pub enum Multiname {
|
|||
MultinameLA {
|
||||
namespace_set: Index<NamespaceSet>,
|
||||
},
|
||||
TypeName {
|
||||
base_type: Index<Multiname>,
|
||||
parameters: Vec<Index<Multiname>>,
|
||||
},
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, PartialEq)]
|
||||
|
|
|
@ -311,6 +311,18 @@ impl<W: Write> Writer<W> {
|
|||
self.write_u8(0x1c)?;
|
||||
self.write_index(namespace_set)?;
|
||||
}
|
||||
Multiname::TypeName {
|
||||
ref base_type,
|
||||
ref parameters,
|
||||
} => {
|
||||
self.write_u8(0x1d)?;
|
||||
self.write_index(&base_type)?;
|
||||
self.write_u30(parameters.len() as u32)?;
|
||||
|
||||
for param in parameters {
|
||||
self.write_index(¶m)?;
|
||||
}
|
||||
}
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue