From 6e453db3f7cf01173e3385c646eb2e1ffbbc5a12 Mon Sep 17 00:00:00 2001 From: Dunqing <29533304+Dunqing@users.noreply.github.com> Date: Mon, 5 Aug 2024 22:27:06 +0000 Subject: [PATCH] refactor(semantic): simplify inherit scope flags from parent scope (#4664) close: #3862 This is reaming last part of close #3862 --- crates/oxc_semantic/src/builder.rs | 3 +-- crates/oxc_semantic/src/scope.rs | 23 +++++++---------------- 2 files changed, 8 insertions(+), 18 deletions(-) diff --git a/crates/oxc_semantic/src/builder.rs b/crates/oxc_semantic/src/builder.rs index 20daaecdb..3bc288b59 100644 --- a/crates/oxc_semantic/src/builder.rs +++ b/crates/oxc_semantic/src/builder.rs @@ -510,10 +510,9 @@ impl<'a> SemanticBuilder<'a> { impl<'a> Visit<'a> for SemanticBuilder<'a> { // NB: Not called for `Program` - fn enter_scope(&mut self, flags: ScopeFlags, scope_id: &Cell>) { + fn enter_scope(&mut self, mut flags: ScopeFlags, scope_id: &Cell>) { let parent_scope_id = self.current_scope_id; - let mut flags = flags; if !flags.is_strict_mode() && self.current_node_flags.has_class() { // NOTE A class definition is always strict mode code. flags |= ScopeFlags::StrictMode; diff --git a/crates/oxc_semantic/src/scope.rs b/crates/oxc_semantic/src/scope.rs index f594072f0..521efb64a 100644 --- a/crates/oxc_semantic/src/scope.rs +++ b/crates/oxc_semantic/src/scope.rs @@ -116,27 +116,18 @@ impl ScopeTree { &mut self.flags[scope_id] } - pub fn get_new_scope_flags(&self, flags: ScopeFlags, parent_scope_id: ScopeId) -> ScopeFlags { - let mut strict_mode = self.root_flags().is_strict_mode(); - let parent_scope_flags = self.get_flags(parent_scope_id); - - // Inherit strict mode for functions + pub fn get_new_scope_flags( + &self, + mut flags: ScopeFlags, + parent_scope_id: ScopeId, + ) -> ScopeFlags { // https://tc39.es/ecma262/#sec-strict-mode-code - if !strict_mode - && (parent_scope_flags.is_function() || parent_scope_flags.is_ts_module_block()) - && parent_scope_flags.is_strict_mode() - { - strict_mode = true; - } + let parent_scope_flags = self.get_flags(parent_scope_id); + flags |= parent_scope_flags & ScopeFlags::StrictMode; // inherit flags for non-function scopes - let mut flags = flags; if !flags.contains(ScopeFlags::Function) { flags |= parent_scope_flags & ScopeFlags::Modifiers; - }; - - if strict_mode { - flags |= ScopeFlags::StrictMode; } flags