From 8e655a0786aec5e0215e09f2a9629c6f32e34793 Mon Sep 17 00:00:00 2001 From: Eugen Wissner Date: Fri, 28 Aug 2026 02:39:42 +0200 Subject: Reject declarations shadowing imports --- boot/dependency.cc | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) (limited to 'boot/dependency.cc') diff --git a/boot/dependency.cc b/boot/dependency.cc index 7f87e40..7e103aa 100644 --- a/boot/dependency.cc +++ b/boot/dependency.cc @@ -37,36 +37,36 @@ namespace elna::boot return "Circular import of module '" + this->module_name + "'"; } - dependency read_source(std::istream& entry_point, const target_info& target) + read_result read_source(std::istream& entry_point, const target_info& target) { driver parse_driver; lexer tokenizer(entry_point); yy::parser parser(tokenizer, parse_driver); - dependency outcome; if (parser() != 0) { - std::swap(outcome.errors, parse_driver.errors()); - return outcome; - } - else - { - std::swap(outcome.value, parse_driver.tree); + diagnostic_list errors; + std::swap(errors, parse_driver.errors()); + return read_result{ std::in_place_type, std::move(errors) }; } + std::unique_ptr tree; + std::swap(tree, parse_driver.tree); materialization_visitor materialization_visitor(target); - outcome.value->accept(&materialization_visitor); + tree->accept(&materialization_visitor); if (materialization_visitor.has_errors()) { - std::swap(outcome.errors, materialization_visitor.errors()); - outcome.value.reset(); + diagnostic_list errors; + std::swap(errors, materialization_visitor.errors()); + return read_result{ std::in_place_type, std::move(errors) }; } - return outcome; + return read_result{ std::in_place_type>, std::move(tree) }; } analysis_result analyze_semantics(std::unique_ptr& tree, const std::vector>& imports, - const std::shared_ptr& globals, const target_info& target) + const std::shared_ptr& globals, const target_info& target, + const std::filesystem::path& module_path) { declaration_visitor declarations{}; tree->accept(&declarations); @@ -81,7 +81,7 @@ namespace elna::boot { result.value.add_import(import); } - name_analysis_visitor name_analyser(result.value, target); + name_analysis_visitor name_analyser(result.value, target, module_path); tree->accept(&name_analyser); if (name_analyser.has_errors()) -- cgit v1.2.3