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),
|
name: Some(name),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
AbcMultiname::TypeName { .. } => return Err("TypeName not implemented".into()),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -171,6 +171,20 @@ impl<'a> Reader<'a> {
|
||||||
0x1c => Multiname::MultinameLA {
|
0x1c => Multiname::MultinameLA {
|
||||||
namespace_set: self.read_index()?,
|
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")),
|
_ => return Err(Error::invalid_data("Invalid multiname kind")),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
@ -82,6 +82,10 @@ pub enum Multiname {
|
||||||
MultinameLA {
|
MultinameLA {
|
||||||
namespace_set: Index<NamespaceSet>,
|
namespace_set: Index<NamespaceSet>,
|
||||||
},
|
},
|
||||||
|
TypeName {
|
||||||
|
base_type: Index<Multiname>,
|
||||||
|
parameters: Vec<Index<Multiname>>,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone, Debug, PartialEq)]
|
#[derive(Clone, Debug, PartialEq)]
|
||||||
|
|
|
@ -311,6 +311,18 @@ impl<W: Write> Writer<W> {
|
||||||
self.write_u8(0x1c)?;
|
self.write_u8(0x1c)?;
|
||||||
self.write_index(namespace_set)?;
|
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(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue