swf: Store register count from DefineFunction2
Also update avm1::Function to use register_count.
This commit is contained in:
parent
ad17166c63
commit
e315fcb6b3
|
@ -112,7 +112,7 @@ impl<'gc> Avm1Function<'gc> {
|
|||
swf_version,
|
||||
data: actions,
|
||||
name,
|
||||
register_count: swf_function.params.capacity() as u8,
|
||||
register_count: swf_function.register_count,
|
||||
preload_parent: swf_function.preload_parent,
|
||||
preload_root: swf_function.preload_root,
|
||||
suppress_super: swf_function.suppress_super,
|
||||
|
|
|
@ -325,9 +325,9 @@ impl<'a> Reader<'a> {
|
|||
fn read_define_function_2(&mut self, action_length: &mut usize) -> Result<Action<'a>> {
|
||||
let name = self.read_c_string()?;
|
||||
let num_params = self.read_u16()?;
|
||||
let num_registers = self.read_u8()?; // Number of registers
|
||||
let register_count = self.read_u8()?; // Number of registers
|
||||
let flags = self.read_u16()?;
|
||||
let mut params = Vec::with_capacity(num_params as usize + num_registers as usize);
|
||||
let mut params = Vec::with_capacity(num_params as usize);
|
||||
for _ in 0..num_params {
|
||||
let register = self.read_u8()?;
|
||||
params.push(FunctionParam {
|
||||
|
@ -341,6 +341,7 @@ impl<'a> Reader<'a> {
|
|||
Ok(Action::DefineFunction2(Function {
|
||||
name,
|
||||
params,
|
||||
register_count,
|
||||
preload_global: flags & 0b1_00000000 != 0,
|
||||
preload_parent: flags & 0b10000000 != 0,
|
||||
preload_root: flags & 0b1000000 != 0,
|
||||
|
|
|
@ -153,6 +153,7 @@ pub enum SendVarsMethod {
|
|||
#[derive(Clone, Debug, PartialEq)]
|
||||
pub struct Function<'a> {
|
||||
pub name: &'a str,
|
||||
pub register_count: u8,
|
||||
pub params: Vec<FunctionParam<'a>>,
|
||||
pub preload_parent: bool,
|
||||
pub preload_root: bool,
|
||||
|
|
|
@ -77,15 +77,10 @@ impl<W: Write> Writer<W> {
|
|||
.map(|p| p.name.len() + 2)
|
||||
.sum::<usize>()
|
||||
+ 4;
|
||||
let num_registers = function
|
||||
.params
|
||||
.iter()
|
||||
.map(|p| if p.register_index.is_none() { 1 } else { 0 })
|
||||
.sum();
|
||||
self.write_action_header(OpCode::DefineFunction2, len)?;
|
||||
self.write_c_string(&function.name)?;
|
||||
self.write_u16(function.params.len() as u16)?;
|
||||
self.write_u8(num_registers)?;
|
||||
self.write_u8(function.register_count)?;
|
||||
let flags = if function.preload_global {
|
||||
0b1_00000000
|
||||
} else {
|
||||
|
|
Loading…
Reference in New Issue