aboutsummaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorEugen Wissner <belka@caraus.de>2026-10-18 09:25:36 +0200
committerEugen Wissner <belka@caraus.de>2026-10-18 22:54:00 +0200
commit7440060f179e35fe63155a149bb5003c97e12013 (patch)
treeabdcb8aa74513312b2cc92d4c2b2b986c29fbc03 /include
parent81043b67437445dcf83055098490e04cc88ff7ee (diff)
downloadelna-7440060f179e35fe63155a149bb5003c97e12013.tar.gz
Fix ICE on variable declarations in case branches
Diffstat (limited to 'include')
-rw-r--r--include/elna/boot/ast.h4
-rw-r--r--include/elna/boot/type_check.h6
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;