diff options
Diffstat (limited to 'boot/validation.cc')
| -rw-r--r-- | boot/validation.cc | 56 |
1 files changed, 51 insertions, 5 deletions
diff --git a/boot/validation.cc b/boot/validation.cc index b29381a..0c03fd0 100644 --- a/boot/validation.cc +++ b/boot/validation.cc @@ -55,6 +55,38 @@ namespace elna::boot { } + void validation_visitor::visit(assign_statement *) + { + } + + void validation_visitor::visit(if_statement *) + { + } + + void validation_visitor::visit(while_statement *) + { + } + + void validation_visitor::visit(repeat_statement *) + { + } + + void validation_visitor::visit(for_statement *) + { + } + + void validation_visitor::visit(defer_statement *) + { + } + + void validation_visitor::visit(empty_statement *) + { + } + + void validation_visitor::visit(procedure_call *) + { + } + void validation_visitor::visit(unit *unit) { for (procedure_declaration *procedure : unit->procedures) @@ -73,17 +105,31 @@ namespace elna::boot { auto procedure = this->bag.lookup(declaration->identifier.name())->is_procedure(); this->bag.enter(procedure->scope); - } - walking_visitor::visit(declaration); - if (declaration->body.has_value()) - { + for (auto *statement : declaration->body.value().entry_point) + { + statement->accept(this); + } this->bag.leave(); } } void validation_visitor::visit(case_statement *statement) { - walking_visitor::visit(statement); + for (const switch_case& case_block : statement->cases) + { + for (auto *block_statement : case_block.statements) + { + block_statement->accept(this); + } + } + if (statement->alternative != nullptr) + { + for (auto *block_statement : *statement->alternative) + { + block_statement->accept(this); + } + } + std::unordered_map<constant_value, source_position, constant_value_hash> seen; for (const auto& case_block : statement->cases) { |
