aboutsummaryrefslogtreecommitdiff
path: root/boot/ast.cc
diff options
context:
space:
mode:
authorEugen Wissner <belka@caraus.de>2026-07-14 01:45:58 +0200
committerEugen Wissner <belka@caraus.de>2026-07-14 01:45:58 +0200
commit51e2f98e33ae10fc3052335cc6847bc93d0784fa (patch)
tree7588effe2778d38d19adbf83cf23b5429df93691 /boot/ast.cc
parent8ceb48a4e60b8ff89f28372da4f66cd152e2e0fe (diff)
downloadelna-51e2f98e33ae10fc3052335cc6847bc93d0784fa.tar.gz
Add static array initializer
Diffstat (limited to 'boot/ast.cc')
-rw-r--r--boot/ast.cc35
1 files changed, 35 insertions, 0 deletions
diff --git a/boot/ast.cc b/boot/ast.cc
index 36215c1..4af906f 100644
--- a/boot/ast.cc
+++ b/boot/ast.cc
@@ -119,6 +119,11 @@ namespace elna::boot
__builtin_unreachable();
}
+ void empty_visitor::visit(array_constructor_expression *)
+ {
+ __builtin_unreachable();
+ }
+
void empty_visitor::visit(traits_expression *)
{
__builtin_unreachable();
@@ -416,6 +421,15 @@ namespace elna::boot
}
}
+ void walking_visitor::visit(array_constructor_expression *expression)
+ {
+ expression->m_element_type->accept(this);
+ for (auto element : expression->elements)
+ {
+ element->accept(this);
+ }
+ }
+
void walking_visitor::visit(traits_expression *trait)
{
if (!trait->parameters.empty())
@@ -656,6 +670,27 @@ namespace elna::boot
}
}
+ array_constructor_expression::array_constructor_expression(const struct position position,
+ std::uint32_t size, type_expression *element_type,
+ std::vector<expression *>&& elements)
+ : node(position), size(size), m_element_type(element_type), elements(std::move(elements))
+ {
+ }
+
+ void array_constructor_expression::accept(parser_visitor *visitor)
+ {
+ visitor->visit(this);
+ }
+
+ array_constructor_expression::~array_constructor_expression()
+ {
+ delete m_element_type;
+ for (expression *const element : elements)
+ {
+ delete element;
+ }
+ }
+
variable_declaration::variable_declaration(const struct position position,
std::vector<identifier_definition>&& identifier, std::shared_ptr<type_expression> variable_type,
expression *initializer)