swf: Add missing opcodes

This commit is contained in:
EmperorBale 2021-04-14 21:12:02 -07:00 committed by Mike Welsh
parent b2bed7a18d
commit a39a1dd64f
4 changed files with 52 additions and 0 deletions

View File

@ -91,6 +91,11 @@ pub enum OpCode {
Label = 0x09, Label = 0x09,
LessEquals = 0xae, LessEquals = 0xae,
LessThan = 0xad, LessThan = 0xad,
Lf32 = 0x38,
Lf64 = 0x39,
Li16 = 0x36,
Li32 = 0x37,
Li8 = 0x35,
LookupSwitch = 0x1b, LookupSwitch = 0x1b,
LShift = 0xa5, LShift = 0xa5,
Modulo = 0xa4, Modulo = 0xa4,
@ -136,10 +141,18 @@ pub enum OpCode {
SetProperty = 0x61, SetProperty = 0x61,
SetSlot = 0x6d, SetSlot = 0x6d,
SetSuper = 0x05, SetSuper = 0x05,
Sf32 = 0x3d,
Sf64 = 0x3e,
Si16 = 0x3b,
Si32 = 0x3c,
Si8 = 0x3a,
StrictEquals = 0xac, StrictEquals = 0xac,
Subtract = 0xa1, Subtract = 0xa1,
SubtractI = 0xc6, SubtractI = 0xc6,
Swap = 0x2b, Swap = 0x2b,
Sxi1 = 0x50,
Sxi16 = 0x52,
Sxi8 = 0x51,
Throw = 0x03, Throw = 0x03,
TypeOf = 0x95, TypeOf = 0x95,
URShift = 0xa7, URShift = 0xa7,

View File

@ -726,6 +726,11 @@ impl<'a> Reader<'a> {
OpCode::Label => Op::Label, OpCode::Label => Op::Label,
OpCode::LessEquals => Op::LessEquals, OpCode::LessEquals => Op::LessEquals,
OpCode::LessThan => Op::LessThan, OpCode::LessThan => Op::LessThan,
OpCode::Lf32 => Op::Lf32,
OpCode::Lf64 => Op::Lf64,
OpCode::Li16 => Op::Li16,
OpCode::Li32 => Op::Li32,
OpCode::Li8 => Op::Li8,
OpCode::LookupSwitch => Op::LookupSwitch { OpCode::LookupSwitch => Op::LookupSwitch {
default_offset: self.read_i24()?, default_offset: self.read_i24()?,
case_offsets: { case_offsets: {
@ -815,10 +820,18 @@ impl<'a> Reader<'a> {
OpCode::SetSuper => Op::SetSuper { OpCode::SetSuper => Op::SetSuper {
index: self.read_index()?, index: self.read_index()?,
}, },
OpCode::Sf32 => Op::Sf32,
OpCode::Sf64 => Op::Sf64,
OpCode::Si16 => Op::Si16,
OpCode::Si32 => Op::Si32,
OpCode::Si8 => Op::Si8,
OpCode::StrictEquals => Op::StrictEquals, OpCode::StrictEquals => Op::StrictEquals,
OpCode::Subtract => Op::Subtract, OpCode::Subtract => Op::Subtract,
OpCode::SubtractI => Op::SubtractI, OpCode::SubtractI => Op::SubtractI,
OpCode::Swap => Op::Swap, OpCode::Swap => Op::Swap,
OpCode::Sxi1 => Op::Sxi1,
OpCode::Sxi16 => Op::Sxi16,
OpCode::Sxi8 => Op::Sxi8,
OpCode::Throw => Op::Throw, OpCode::Throw => Op::Throw,
OpCode::TypeOf => Op::TypeOf, OpCode::TypeOf => Op::TypeOf,
OpCode::URShift => Op::URShift, OpCode::URShift => Op::URShift,

View File

@ -427,6 +427,11 @@ pub enum Op {
Label, Label,
LessEquals, LessEquals,
LessThan, LessThan,
Lf32,
Lf64,
Li16,
Li32,
Li8,
LookupSwitch { LookupSwitch {
default_offset: i32, default_offset: i32,
case_offsets: Vec<i32>, case_offsets: Vec<i32>,
@ -505,10 +510,18 @@ pub enum Op {
SetSuper { SetSuper {
index: Index<Multiname>, index: Index<Multiname>,
}, },
Sf32,
Sf64,
Si16,
Si32,
Si8,
StrictEquals, StrictEquals,
Subtract, Subtract,
SubtractI, SubtractI,
Swap, Swap,
Sxi1,
Sxi16,
Sxi8,
Throw, Throw,
TypeOf, TypeOf,
URShift, URShift,

View File

@ -890,6 +890,11 @@ impl<W: Write> Writer<W> {
Op::Label => self.write_opcode(OpCode::Label)?, Op::Label => self.write_opcode(OpCode::Label)?,
Op::LessEquals => self.write_opcode(OpCode::LessEquals)?, Op::LessEquals => self.write_opcode(OpCode::LessEquals)?,
Op::LessThan => self.write_opcode(OpCode::LessThan)?, Op::LessThan => self.write_opcode(OpCode::LessThan)?,
Op::Lf32 => self.write_opcode(OpCode::Lf32)?,
Op::Lf64 => self.write_opcode(OpCode::Lf64)?,
Op::Li16 => self.write_opcode(OpCode::Li16)?,
Op::Li32 => self.write_opcode(OpCode::Li32)?,
Op::Li8 => self.write_opcode(OpCode::Li8)?,
Op::LookupSwitch { Op::LookupSwitch {
default_offset, default_offset,
ref case_offsets, ref case_offsets,
@ -998,10 +1003,18 @@ impl<W: Write> Writer<W> {
self.write_opcode(OpCode::SetSuper)?; self.write_opcode(OpCode::SetSuper)?;
self.write_index(index)?; self.write_index(index)?;
} }
Op::Sf32 => self.write_opcode(OpCode::Sf32)?,
Op::Sf64 => self.write_opcode(OpCode::Sf64)?,
Op::Si16 => self.write_opcode(OpCode::Si16)?,
Op::Si32 => self.write_opcode(OpCode::Si32)?,
Op::Si8 => self.write_opcode(OpCode::Si8)?,
Op::StrictEquals => self.write_opcode(OpCode::StrictEquals)?, Op::StrictEquals => self.write_opcode(OpCode::StrictEquals)?,
Op::Subtract => self.write_opcode(OpCode::Subtract)?, Op::Subtract => self.write_opcode(OpCode::Subtract)?,
Op::SubtractI => self.write_opcode(OpCode::SubtractI)?, Op::SubtractI => self.write_opcode(OpCode::SubtractI)?,
Op::Swap => self.write_opcode(OpCode::Swap)?, Op::Swap => self.write_opcode(OpCode::Swap)?,
Op::Sxi1 => self.write_opcode(OpCode::Sxi1)?,
Op::Sxi16 => self.write_opcode(OpCode::Sxi16)?,
Op::Sxi8 => self.write_opcode(OpCode::Sxi8)?,
Op::Throw => self.write_opcode(OpCode::Throw)?, Op::Throw => self.write_opcode(OpCode::Throw)?,
Op::TypeOf => self.write_opcode(OpCode::TypeOf)?, Op::TypeOf => self.write_opcode(OpCode::TypeOf)?,
Op::URShift => self.write_opcode(OpCode::URShift)?, Op::URShift => self.write_opcode(OpCode::URShift)?,