@@ -161,13 +161,8 @@ pub struct Activation<'a, 'gc: 'a> {
161161
162162 /// Local registers, if any.
163163 ///
164- /// None indicates a function executing out of the global register set.
165- /// Some indicates the existence of local registers, even if none exist.
166- /// i.e. None(Vec::new()) means no registers should exist at all.
167- ///
168- /// Registers are numbered from 1; r0 does not exist. Therefore this vec,
169- /// while nominally starting from zero, actually starts from r1.
170- local_registers : Option < & ' a [ Cell < Value < ' gc > > ] > ,
164+ /// An empty slice indicates a function executing out of the global register set.
165+ local_registers : & ' a [ Cell < Value < ' gc > > ] ,
171166
172167 /// The base clip of this stack frame.
173168 /// This will be the MovieClip that contains the bytecode.
@@ -234,7 +229,7 @@ impl<'a, 'gc> Activation<'a, 'gc> {
234229 base_clip : DisplayObject < ' gc > ,
235230 this : Value < ' gc > ,
236231 callee : Option < Object < ' gc > > ,
237- registers : & ' a [ Cell < Value < ' gc > > ] ,
232+ local_registers : & ' a [ Cell < Value < ' gc > > ] ,
238233 ) -> Self {
239234 avm_debug ! ( context. avm1, "START {id}" ) ;
240235 Self {
@@ -247,7 +242,7 @@ impl<'a, 'gc> Activation<'a, 'gc> {
247242 target_clip : Some ( base_clip) ,
248243 this,
249244 callee,
250- local_registers : Some ( registers ) . filter ( |r| !r . is_empty ( ) ) ,
245+ local_registers,
251246 }
252247 }
253248
@@ -298,7 +293,7 @@ impl<'a, 'gc> Activation<'a, 'gc> {
298293 target_clip : Some ( base_clip) ,
299294 this : scope. locals_cell ( ) . into ( ) ,
300295 callee : None ,
301- local_registers : None ,
296+ local_registers : & [ ] ,
302297 context,
303298 }
304299 }
@@ -2399,13 +2394,11 @@ impl<'a, 'gc> Activation<'a, 'gc> {
23992394 /// Value::Undefined, which is also a valid register value.
24002395 pub fn current_register ( & self , id : u8 ) -> Value < ' gc > {
24012396 let id = id as usize ;
2402- if let Some ( local_registers) = & self . local_registers {
2403- if let Some ( reg) = local_registers. get ( id) {
2404- return reg. get ( ) ;
2405- } else if self . context . player_version <= 10 {
2406- // Old FP versions do not fall back to the global register set.
2407- return Value :: Undefined ;
2408- }
2397+ if let Some ( reg) = self . local_registers . get ( id) {
2398+ return reg. get ( ) ;
2399+ } else if !self . local_registers . is_empty ( ) && self . context . player_version <= 10 {
2400+ // Old FP versions do not fall back to the global register set.
2401+ return Value :: Undefined ;
24092402 }
24102403
24112404 self . context
@@ -2430,16 +2423,12 @@ impl<'a, 'gc> Activation<'a, 'gc> {
24302423 ///
24312424 /// If a given local register does not exist, this function does nothing.
24322425 pub fn set_local_register ( & mut self , id : u8 , value : Value < ' gc > ) -> bool {
2433- if let Some ( local_registers) = & self . local_registers {
2434- if let Some ( reg) = local_registers. get ( id as usize ) {
2435- reg. set ( value) ;
2436- true
2437- } else {
2438- // Old FP versions do not fall back to the global register set.
2439- self . context . player_version <= 10
2440- }
2426+ if let Some ( reg) = self . local_registers . get ( id as usize ) {
2427+ reg. set ( value) ;
2428+ true
24412429 } else {
2442- false
2430+ // Old FP versions do not fall back to the global register set.
2431+ !self . local_registers . is_empty ( ) && self . context . player_version <= 10
24432432 }
24442433 }
24452434
0 commit comments