From eb27151af7c3986f5004ae3192bd5ab8451ef801 Mon Sep 17 00:00:00 2001 From: Lord-McSweeney Date: Thu, 9 May 2024 20:33:08 -0700 Subject: [PATCH] avm2: Don't call global init in optimizer --- core/src/avm2/optimize.rs | 16 ++++++++-------- core/src/avm2/script.rs | 13 +++++++++++++ 2 files changed, 21 insertions(+), 8 deletions(-) diff --git a/core/src/avm2/optimize.rs b/core/src/avm2/optimize.rs index 7f0e4eb4a..e974c3ed3 100644 --- a/core/src/avm2/optimize.rs +++ b/core/src/avm2/optimize.rs @@ -798,15 +798,15 @@ pub fn optimize<'gc>( { *op = Op::GetScriptGlobals { script }; - let script_globals = script - .globals(&mut activation.context) - .expect("Script should be resolved if traits exist"); + let script_globals = script.globals_if_init(); - stack_push_done = true; - if let Some(global_class) = script_globals.instance_of() { - stack.push_class_object(global_class); - } else { - stack.push_any(); + if let Some(script_globals) = script_globals { + stack_push_done = true; + if let Some(global_class) = script_globals.instance_of() { + stack.push_class_object(global_class); + } else { + stack.push_any(); + } } } } diff --git a/core/src/avm2/script.rs b/core/src/avm2/script.rs index e67624a89..fc19523d6 100644 --- a/core/src/avm2/script.rs +++ b/core/src/avm2/script.rs @@ -597,6 +597,19 @@ impl<'gc> Script<'gc> { } } + /// Return the global scope for the script. + /// + /// If the script has not yet been initialized, this will return None. + pub fn globals_if_init(&self) -> Option> { + let read = self.0.read(); + + if !read.initialized { + None + } else { + Some(read.globals) + } + } + /// Return traits for this script. /// /// This function will return an error if it is incorrectly called before