swf: Decode and encode the `applytype` op.

This commit is contained in:
David Wendt 2020-09-30 22:05:55 -04:00 committed by kmeisthax
parent 86616b748f
commit 9dafddc1ae
4 changed files with 11 additions and 0 deletions

View File

@ -2,6 +2,7 @@
pub enum OpCode { pub enum OpCode {
Add = 0xA0, Add = 0xA0,
AddI = 0xC5, AddI = 0xC5,
ApplyType = 0x53,
AsType = 0x86, AsType = 0x86,
AsTypeLate = 0x87, AsTypeLate = 0x87,
BitAnd = 0xA8, BitAnd = 0xA8,

View File

@ -519,6 +519,9 @@ impl<'a> Reader<'a> {
let op = match opcode { let op = match opcode {
OpCode::Add => Op::Add, OpCode::Add => Op::Add,
OpCode::AddI => Op::AddI, OpCode::AddI => Op::AddI,
OpCode::ApplyType => Op::ApplyType {
num_types: self.read_u30()?,
},
OpCode::AsType => Op::AsType { OpCode::AsType => Op::AsType {
type_name: self.read_index()?, type_name: self.read_index()?,
}, },

View File

@ -233,6 +233,9 @@ pub struct Script {
pub enum Op { pub enum Op {
Add, Add,
AddI, AddI,
ApplyType {
num_types: u32,
},
AsType { AsType {
type_name: Index<Multiname>, type_name: Index<Multiname>,
}, },

View File

@ -603,6 +603,10 @@ impl<W: Write> Writer<W> {
match *op { match *op {
Op::Add => self.write_opcode(OpCode::Add)?, Op::Add => self.write_opcode(OpCode::Add)?,
Op::AddI => self.write_opcode(OpCode::AddI)?, Op::AddI => self.write_opcode(OpCode::AddI)?,
Op::ApplyType { num_types } => {
self.write_opcode(OpCode::ApplyType)?;
self.write_u30(num_types)?;
}
Op::AsType { ref type_name } => { Op::AsType { ref type_name } => {
self.write_opcode(OpCode::AsType)?; self.write_opcode(OpCode::AsType)?;
self.write_index(type_name)?; self.write_index(type_name)?;