diff --git a/sway-core/src/semantic_analysis/ast_node/code_block.rs b/sway-core/src/semantic_analysis/ast_node/code_block.rs index 623b5e40b3a..e063566d6f8 100644 --- a/sway-core/src/semantic_analysis/ast_node/code_block.rs +++ b/sway-core/src/semantic_analysis/ast_node/code_block.rs @@ -44,6 +44,11 @@ impl ty::TyCodeBlock { } ctx.engines.te().clear_unifications(); + ctx.namespace() + .module(ctx.engines) + .current_lexical_scope() + .items + .clear_symbols_unique_while_collecting_unifications(); // We are typechecking the code block AST nodes twice. // The first pass does all the unifications to the variables types. diff --git a/sway-core/src/semantic_analysis/ast_node/declaration/declaration.rs b/sway-core/src/semantic_analysis/ast_node/declaration/declaration.rs index a0e77e643bf..817a997a9ba 100644 --- a/sway-core/src/semantic_analysis/ast_node/declaration/declaration.rs +++ b/sway-core/src/semantic_analysis/ast_node/declaration/declaration.rs @@ -167,7 +167,7 @@ impl TyDecl { .namespace() .module(engines) .current_items() - .check_symbol_unique(&var_decl.name.clone()) + .check_symbols_unique_while_collecting_unifications(&var_decl.name.clone()) .ok(); if let Some(ResolvedDeclaration::Typed(ty::TyDecl::VariableDecl( diff --git a/sway-core/src/semantic_analysis/namespace/lexical_scope.rs b/sway-core/src/semantic_analysis/namespace/lexical_scope.rs index ee117bd6e73..0a85f6a3f4c 100644 --- a/sway-core/src/semantic_analysis/namespace/lexical_scope.rs +++ b/sway-core/src/semantic_analysis/namespace/lexical_scope.rs @@ -704,7 +704,7 @@ impl Items { }) } - pub(crate) fn check_symbol_unique( + pub(crate) fn check_symbols_unique_while_collecting_unifications( &self, name: &Ident, ) -> Result { @@ -718,6 +718,12 @@ impl Items { }) } + pub(crate) fn clear_symbols_unique_while_collecting_unifications(&self) { + self.symbols_unique_while_collecting_unifications + .write() + .clear(); + } + pub fn get_items_for_type( &self, engines: &Engines, diff --git a/sway-core/src/semantic_analysis/namespace/module.rs b/sway-core/src/semantic_analysis/namespace/module.rs index e98c7f07f6d..9230af73984 100644 --- a/sway-core/src/semantic_analysis/namespace/module.rs +++ b/sway-core/src/semantic_analysis/namespace/module.rs @@ -194,7 +194,7 @@ impl Module { } /// Returns the current lexical scope associated with this module. - fn current_lexical_scope(&self) -> &LexicalScope { + pub fn current_lexical_scope(&self) -> &LexicalScope { self.lexical_scopes .get(self.current_lexical_scope_id) .unwrap()