diff options
| author | Eugen Wissner <belka@caraus.de> | 2026-10-18 09:25:36 +0200 |
|---|---|---|
| committer | Eugen Wissner <belka@caraus.de> | 2026-10-18 22:54:00 +0200 |
| commit | 7440060f179e35fe63155a149bb5003c97e12013 (patch) | |
| tree | abdcb8aa74513312b2cc92d4c2b2b986c29fbc03 /include | |
| parent | 81043b67437445dcf83055098490e04cc88ff7ee (diff) | |
| download | elna-7440060f179e35fe63155a149bb5003c97e12013.tar.gz | |
Fix ICE on variable declarations in case branches
Diffstat (limited to 'include')
| -rw-r--r-- | include/elna/boot/ast.h | 4 | ||||
| -rw-r--r-- | include/elna/boot/type_check.h | 6 |
2 files changed, 6 insertions, 4 deletions
diff --git a/include/elna/boot/ast.h b/include/elna/boot/ast.h index c12d8e8..cf381fc 100644 --- a/include/elna/boot/ast.h +++ b/include/elna/boot/ast.h @@ -322,6 +322,10 @@ namespace elna::boot void visit(literal<bool> *) override; void visit(literal<std::uint32_t> *) override; void visit(literal<std::string> *) override; + + protected: + /// Passes needing the scope of a block override this. + virtual void traverse_block(const block& body); }; /** diff --git a/include/elna/boot/type_check.h b/include/elna/boot/type_check.h index 98db843..3774311 100644 --- a/include/elna/boot/type_check.h +++ b/include/elna/boot/type_check.h @@ -276,7 +276,7 @@ namespace elna::boot static bool is_assignable_from(const type& assignee, const type& assignment); static bool is_equality_compatible(const type& left, const type& right); - void visit_and_validate_condition(expression& condition); + void validate_condition(const expression& condition); void check_arguments(const named_expression& reference, const std::vector<type>& arguments, const argument_rule rule); void check_parameters_used(const source_position position, const std::string& name, @@ -292,7 +292,7 @@ namespace elna::boot type promote_variadic_argument(const expression& argument); protected: - void traverse_block(block& body); + void traverse_block(const block& body) override; public: explicit type_analysis_visitor(symbol_bag bag, const target_info& target); @@ -309,8 +309,6 @@ namespace elna::boot void visit(repeat_statement *statement) override; void visit(while_statement *statement) override; void visit(if_statement *statement) override; - void visit(defer_statement *statement) override; - void visit(block_statement *statement) override; void visit(record_constructor_expression *expression) override; void visit(array_constructor_expression *expression) override; void visit(traits_expression *trait) override; |
