diff options
| author | Eugen Wissner <belka@caraus.de> | 2026-07-14 01:45:58 +0200 |
|---|---|---|
| committer | Eugen Wissner <belka@caraus.de> | 2026-07-14 01:45:58 +0200 |
| commit | 51e2f98e33ae10fc3052335cc6847bc93d0784fa (patch) | |
| tree | 7588effe2778d38d19adbf83cf23b5429df93691 /include | |
| parent | 8ceb48a4e60b8ff89f28372da4f66cd152e2e0fe (diff) | |
| download | elna-51e2f98e33ae10fc3052335cc6847bc93d0784fa.tar.gz | |
Add static array initializer
Diffstat (limited to 'include')
| -rw-r--r-- | include/elna/boot/ast.h | 19 | ||||
| -rw-r--r-- | include/elna/boot/semantic.h | 2 | ||||
| -rw-r--r-- | include/elna/gcc/elna-generic.h | 1 |
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; |
