aboutsummaryrefslogtreecommitdiff
path: root/include
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 /include
parent8ceb48a4e60b8ff89f28372da4f66cd152e2e0fe (diff)
downloadelna-51e2f98e33ae10fc3052335cc6847bc93d0784fa.tar.gz
Add static array initializer
Diffstat (limited to 'include')
-rw-r--r--include/elna/boot/ast.h19
-rw-r--r--include/elna/boot/semantic.h2
-rw-r--r--include/elna/gcc/elna-generic.h1
3 files changed, 22 insertions, 0 deletions
diff --git a/include/elna/boot/ast.h b/include/elna/boot/ast.h
index 67e9fbe..fbe65a4 100644
--- a/include/elna/boot/ast.h
+++ b/include/elna/boot/ast.h
@@ -61,6 +61,7 @@ namespace elna::boot
class procedure_call;
class cast_expression;
class record_constructor_expression;
+ class array_constructor_expression;
struct field_initializer;
class assign_statement;
class if_statement;
@@ -100,6 +101,7 @@ namespace elna::boot
virtual void visit(procedure_call *) = 0;
virtual void visit(cast_expression *) = 0;
virtual void visit(record_constructor_expression *) = 0;
+ virtual void visit(array_constructor_expression *) = 0;
virtual void visit(traits_expression *) = 0;
virtual void visit(assign_statement *) = 0;
virtual void visit(if_statement *) = 0;
@@ -156,6 +158,7 @@ namespace elna::boot
[[noreturn]] virtual void visit(unit *) override;
[[noreturn]] virtual void visit(cast_expression *) override;
[[noreturn]] virtual void visit(record_constructor_expression *) override;
+ [[noreturn]] virtual void visit(array_constructor_expression *) override;
[[noreturn]] virtual void visit(traits_expression *) override;
[[noreturn]] virtual void visit(binary_expression *) override;
[[noreturn]] virtual void visit(unary_expression *) override;
@@ -199,6 +202,7 @@ namespace elna::boot
virtual void visit(unit *unit) override;
virtual void visit(cast_expression *expression) override;
virtual void visit(record_constructor_expression *expression) override;
+ virtual void visit(array_constructor_expression *expression) override;
virtual void visit(traits_expression *trait) override;
virtual void visit(binary_expression *expression) override;
virtual void visit(unary_expression *expression) override;
@@ -350,6 +354,21 @@ namespace elna::boot
virtual ~record_constructor_expression() override;
};
+ class array_constructor_expression : public expression
+ {
+ public:
+ const std::uint32_t size;
+ type_expression *const m_element_type;
+ const std::vector<expression *> elements;
+
+ array_constructor_expression(const struct position position,
+ std::uint32_t size, type_expression *element_type,
+ std::vector<expression *>&& elements);
+ void accept(parser_visitor *visitor) override;
+
+ virtual ~array_constructor_expression() override;
+ };
+
/**
* Enumeration type.
*/
diff --git a/include/elna/boot/semantic.h b/include/elna/boot/semantic.h
index 5ef4bc8..4041f33 100644
--- a/include/elna/boot/semantic.h
+++ b/include/elna/boot/semantic.h
@@ -162,6 +162,7 @@ namespace elna::boot
void visit(procedure_call *call) override;
void visit(case_statement *statement) override;
void visit(record_constructor_expression *expression) override;
+ void visit(array_constructor_expression *expression) override;
};
/**
@@ -193,6 +194,7 @@ namespace elna::boot
void visit(type_declaration *declaration) override;
void visit(record_type_expression *expression) override;
void visit(record_constructor_expression *expression) override;
+ void visit(array_constructor_expression *expression) override;
void visit(procedure_type_expression *expression) override;
void visit(enumeration_type_expression *expression) override;
diff --git a/include/elna/gcc/elna-generic.h b/include/elna/gcc/elna-generic.h
index f30f9d6..23e1738 100644
--- a/include/elna/gcc/elna-generic.h
+++ b/include/elna/gcc/elna-generic.h
@@ -84,6 +84,7 @@ namespace elna::gcc
void visit(boot::dereference_expression *expression) override;
void visit(boot::unit *unit) override;
void visit(boot::record_constructor_expression *expression) override;
+ void visit(boot::array_constructor_expression *expression) override;
void visit(boot::assign_statement *statement) override;
void visit(boot::if_statement *statement) override;
void visit(boot::import_declaration *) override;