diff options
| author | Eugen Wissner <belka@caraus.de> | 2026-09-18 12:19:13 +0200 |
|---|---|---|
| committer | Eugen Wissner <belka@caraus.de> | 2026-09-18 12:19:13 +0200 |
| commit | dc9d03915c4b169fec749081b45d56f722105813 (patch) | |
| tree | 0a0719bc95f942b675fb52865d9c5bac9e105767 /boot/validation.cc | |
| parent | b575036fe804f14b78da74897a74b010cc94f730 (diff) | |
| download | elna-dc9d03915c4b169fec749081b45d56f722105813.tar.gz | |
Allow block-local variables
Diffstat (limited to 'boot/validation.cc')
| -rw-r--r-- | boot/validation.cc | 29 |
1 files changed, 18 insertions, 11 deletions
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<constant_value, source_position, constant_value_hash> 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 *) |
