Runs semantic analysis on the query.
(mut module_tree: pr::ModuleDef)
| 38 | |
| 39 | /// Runs semantic analysis on the query. |
| 40 | pub fn resolve(mut module_tree: pr::ModuleDef) -> Result<RootModule> { |
| 41 | load_std_lib(&mut module_tree); |
| 42 | |
| 43 | // expand AST into PL |
| 44 | debug::log_stage(debug::Stage::Semantic(debug::StageSemantic::AstExpand)); |
| 45 | let root_module_def = ast_expand::expand_module_def(module_tree)?; |
| 46 | debug::log_entry(|| debug::DebugEntryKind::ReprPl(root_module_def.clone())); |
| 47 | |
| 48 | // init new root module |
| 49 | let mut root_module = RootModule { |
| 50 | module: Module::new_root(), |
| 51 | ..Default::default() |
| 52 | }; |
| 53 | let mut resolver = Resolver::new(&mut root_module); |
| 54 | |
| 55 | // resolve the module def into the root module |
| 56 | debug::log_stage(debug::Stage::Semantic(debug::StageSemantic::Resolver)); |
| 57 | resolver.fold_statements(root_module_def.stmts)?; |
| 58 | debug::log_entry(|| debug::DebugEntryKind::ReprDecl(root_module.clone())); |
| 59 | |
| 60 | Ok(root_module) |
| 61 | } |
| 62 | |
| 63 | /// Preferred way of injecting std module. |
| 64 | pub fn load_std_lib(module_tree: &mut pr::ModuleDef) { |
no test coverage detected