@@ -2380,28 +2380,44 @@ impl<'a, 'gc> Activation<'a, 'gc> {
23802380 /// If a given register does not exist, this function yields
23812381 /// Value::Undefined, which is also a valid register value.
23822382 pub fn current_register ( & self , id : u8 ) -> Value < ' gc > {
2383- if self . has_local_register ( id) {
2384- self . local_register ( id) . unwrap_or ( Value :: Undefined )
2385- } else {
2386- self . context
2387- . avm1
2388- . get_register ( id as usize )
2389- . cloned ( )
2390- . unwrap_or ( Value :: Undefined )
2383+ let id = id as usize ;
2384+ if let Some ( local_registers) = & self . local_registers {
2385+ if let Some ( reg) = local_registers. get ( id) {
2386+ return reg. get ( ) ;
2387+ }
23912388 }
2389+
2390+ self . context
2391+ . avm1
2392+ . get_register ( id)
2393+ . copied ( )
2394+ . unwrap_or ( Value :: Undefined )
23922395 }
23932396
23942397 /// Set a register to a given value.
23952398 ///
23962399 /// If a given register does not exist, this function does nothing.
23972400 pub fn set_current_register ( & mut self , id : u8 , value : Value < ' gc > ) {
2398- if self . has_local_register ( id) {
2399- self . set_local_register ( id, value ) ;
2400- } else if let Some ( v ) = self . context . avm1 . get_register_mut ( id as usize ) {
2401- * v = value ;
2401+ if ! self . set_local_register ( id, value ) {
2402+ if let Some ( reg ) = self . context . avm1 . get_register_mut ( id as usize ) {
2403+ * reg = value ;
2404+ }
24022405 }
24032406 }
24042407
2408+ /// Set a local register to a given value, and returns `true` if successful.
2409+ ///
2410+ /// If a given local register does not exist, this function does nothing.
2411+ pub fn set_local_register ( & mut self , id : u8 , value : Value < ' gc > ) -> bool {
2412+ if let Some ( local_registers) = & self . local_registers {
2413+ if let Some ( reg) = local_registers. get ( id as usize ) {
2414+ reg. set ( value) ;
2415+ return true ;
2416+ }
2417+ }
2418+ false
2419+ }
2420+
24052421 /// Convert the enumerable properties of an object into a set of form values.
24062422 ///
24072423 /// This is necessary to support form submission from Flash via a couple of
@@ -3021,39 +3037,13 @@ impl<'a, 'gc> Activation<'a, 'gc> {
30213037 self . this
30223038 }
30233039
3024- /// Returns true if this activation has a given local register ID.
3025- pub fn has_local_register ( & self , id : u8 ) -> bool {
3026- self . local_registers
3027- . as_deref ( )
3028- . map ( |rs| usize:: from ( id) < rs. len ( ) )
3029- . unwrap_or ( false )
3030- }
3031-
30323040 pub fn allocate_local_registers ( & mut self , num : u8 ) {
30333041 self . local_registers = match num {
30343042 0 => None ,
30353043 num => Some ( ( 0 ..num) . map ( |_| Cell :: new ( Value :: Undefined ) ) . collect ( ) ) ,
30363044 } ;
30373045 }
30383046
3039- /// Retrieve a local register.
3040- pub fn local_register ( & self , id : u8 ) -> Option < Value < ' gc > > {
3041- if let Some ( local_registers) = self . local_registers . as_deref ( ) {
3042- local_registers. get ( usize:: from ( id) ) . map ( Cell :: get)
3043- } else {
3044- None
3045- }
3046- }
3047-
3048- /// Set a local register.
3049- pub fn set_local_register ( & mut self , id : u8 , value : Value < ' gc > ) {
3050- if let Some ( ref mut local_registers) = self . local_registers {
3051- if let Some ( r) = local_registers. get ( usize:: from ( id) ) {
3052- r. set ( value) ;
3053- }
3054- }
3055- }
3056-
30573047 pub fn constant_pool ( & self ) -> Gc < ' gc , Vec < Value < ' gc > > > {
30583048 self . constant_pool
30593049 }
0 commit comments