From 2e58a2e675f66693740bc7f8c5ae1de7f05b41a8 Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Tue, 8 Sep 2026 08:20:41 +0000 Subject: [PATCH] Extract import lowering to reduce deep nesting in lower_statement Co-authored-by: Tcode-Motion <188012755+Tcode-Motion@users.noreply.github.com> --- compiler/ir/src/lowering.rs | 136 ++++++++++++++++++------------------ 1 file changed, 68 insertions(+), 68 deletions(-) diff --git a/compiler/ir/src/lowering.rs b/compiler/ir/src/lowering.rs index 6c87a767..2efc53d9 100644 --- a/compiler/ir/src/lowering.rs +++ b/compiler/ir/src/lowering.rs @@ -215,74 +215,7 @@ impl LoweringContext { self.lower_statement(&decl.declaration); } Statement::Import(import_stmt) => { - let path_str = import_stmt - .path - .iter() - .map(|ident| ident.name.clone()) - .collect::>() - .join("/"); - self.builder.declare_import(path_str); - - if let Some(symbols) = &import_stmt.symbols { - if import_stmt.path.len() > 1 - && symbols.len() == 1 - && !symbols[0].name.contains(':') - && symbols[0].name != "*" - { - let alias_name = symbols[0].name.clone(); - // For namespace alias, the global variable representing it is the root namespace of the path - let root_name = import_stmt.path[0].name.clone(); - let global_id = self.builder.declare_global(root_name, IRType::Any); - self.symbol_map - .insert(alias_name, SymbolBinding::Global(global_id, IRType::Any)); - } else { - for sym in symbols { - if sym.name == "*" { - let module_path = import_stmt - .path - .iter() - .map(|i| i.name.clone()) - .collect::>() - .join("."); - let registry = techscript_stdlib::StdlibRegistry::new(); - if let Some(module) = registry.get_module(&module_path) { - for func_name in module.exports.keys() { - let global_id = self - .builder - .declare_global(func_name.clone(), IRType::Any); - self.symbol_map.insert( - func_name.clone(), - SymbolBinding::Global(global_id, IRType::Any), - ); - } - } - } else if sym.name.contains(':') { - let parts: Vec<&str> = sym.name.split(':').collect(); - let orig_name = parts[0].to_string(); - let alias_name = parts[1].to_string(); - let global_id = self.builder.declare_global(orig_name, IRType::Any); - self.symbol_map.insert( - alias_name, - SymbolBinding::Global(global_id, IRType::Any), - ); - } else { - let global_id = - self.builder.declare_global(sym.name.clone(), IRType::Any); - self.symbol_map.insert( - sym.name.clone(), - SymbolBinding::Global(global_id, IRType::Any), - ); - } - } - } - } else if !import_stmt.path.is_empty() { - let root_name = import_stmt.path[0].name.clone(); - let global_id = self.builder.declare_global(root_name.clone(), IRType::Any); - self.symbol_map.insert( - root_name.clone(), - SymbolBinding::Global(global_id, IRType::Any), - ); - } + self.lower_import(import_stmt); } Statement::EnumDecl(decl) => { // Declare enum type globally @@ -305,6 +238,73 @@ impl LoweringContext { } } + fn lower_import(&mut self, import_stmt: &techscript_ast::ImportStmt) { + let path_str = import_stmt + .path + .iter() + .map(|ident| ident.name.clone()) + .collect::>() + .join("/"); + self.builder.declare_import(path_str); + + if let Some(symbols) = &import_stmt.symbols { + if import_stmt.path.len() > 1 + && symbols.len() == 1 + && !symbols[0].name.contains(':') + && symbols[0].name != "*" + { + let alias_name = symbols[0].name.clone(); + // For namespace alias, the global variable representing it is the root namespace of the path + let root_name = import_stmt.path[0].name.clone(); + let global_id = self.builder.declare_global(root_name, IRType::Any); + self.symbol_map + .insert(alias_name, SymbolBinding::Global(global_id, IRType::Any)); + } else { + for sym in symbols { + if sym.name == "*" { + let module_path = import_stmt + .path + .iter() + .map(|i| i.name.clone()) + .collect::>() + .join("."); + let registry = techscript_stdlib::StdlibRegistry::new(); + if let Some(module) = registry.get_module(&module_path) { + for func_name in module.exports.keys() { + let global_id = + self.builder.declare_global(func_name.clone(), IRType::Any); + self.symbol_map.insert( + func_name.clone(), + SymbolBinding::Global(global_id, IRType::Any), + ); + } + } + } else if sym.name.contains(':') { + let parts: Vec<&str> = sym.name.split(':').collect(); + let orig_name = parts[0].to_string(); + let alias_name = parts[1].to_string(); + let global_id = self.builder.declare_global(orig_name, IRType::Any); + self.symbol_map + .insert(alias_name, SymbolBinding::Global(global_id, IRType::Any)); + } else { + let global_id = self.builder.declare_global(sym.name.clone(), IRType::Any); + self.symbol_map.insert( + sym.name.clone(), + SymbolBinding::Global(global_id, IRType::Any), + ); + } + } + } + } else if !import_stmt.path.is_empty() { + let root_name = import_stmt.path[0].name.clone(); + let global_id = self.builder.declare_global(root_name.clone(), IRType::Any); + self.symbol_map.insert( + root_name.clone(), + SymbolBinding::Global(global_id, IRType::Any), + ); + } + } + fn lower_var_decl(&mut self, decl: &VarDecl) { let ty = self.map_type_spec(&decl.type_ann); let init_val = self.lower_expression(&decl.initializer);