From dc9d03915c4b169fec749081b45d56f722105813 Mon Sep 17 00:00:00 2001 From: Eugen Wissner Date: Fri, 18 Sep 2026 12:19:13 +0200 Subject: Allow block-local variables --- boot/validation.cc | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) (limited to 'boot/validation.cc') diff --git a/boot/validation.cc b/boot/validation.cc index e628cd8..facef04 100644 --- a/boot/validation.cc +++ b/boot/validation.cc @@ -49,6 +49,13 @@ namespace elna::boot } } + void validation_visitor::visit_block(const block& body) + { + this->bag.enter(body.symbols); + visit_statements(body.statements); + this->bag.leave(); + } + void validation_visitor::visit(unit *unit) { for (declaration *unit_declaration : unit->declarations) @@ -88,11 +95,11 @@ namespace elna::boot { for (const switch_case& case_block : statement->cases) { - visit_statements(case_block.statements); + visit_block(case_block.body); } if (statement->alternative != nullptr) { - visit_statements(*statement->alternative); + visit_block(*statement->alternative); } std::unordered_map seen; @@ -122,44 +129,44 @@ namespace elna::boot void validation_visitor::visit(if_statement *statement) { - visit_statements(statement->branch().statements); + visit_block(statement->branch().body); for (const conditional_statements *branch : statement->branches) { - visit_statements(branch->statements); + visit_block(branch->body); } if (statement->alternative != nullptr) { - visit_statements(*statement->alternative); + visit_block(*statement->alternative); } } void validation_visitor::visit(while_statement *statement) { - visit_statements(statement->branch().statements); + visit_block(statement->branch().body); for (const conditional_statements *branch : statement->branches) { - visit_statements(branch->statements); + visit_block(branch->body); } } void validation_visitor::visit(repeat_statement *statement) { - visit_statements(statement->body); + visit_block(statement->body); } void validation_visitor::visit(for_statement *statement) { - visit_statements(statement->body); + visit_block(statement->body); } void validation_visitor::visit(defer_statement *statement) { - visit_statements(statement->statements); + visit_block(statement->body); } void validation_visitor::visit(block_statement *statement) { - visit_statements(statement->statements); + visit_block(statement->body); } void validation_visitor::visit(break_statement *) -- cgit v1.2.3