aboutsummaryrefslogtreecommitdiff
path: root/boot/ast.cc
diff options
context:
space:
mode:
authorEugen Wissner <belka@caraus.de>2026-09-08 20:43:39 +0200
committerEugen Wissner <belka@caraus.de>2026-09-08 20:43:39 +0200
commit47c8f99b6ef812dbc22ca56a39ba21bccad47796 (patch)
tree7c057a6d408f9b30801767ed528f7f4c207bfbce /boot/ast.cc
parent8f9ba0c67479d8926edead8aa828458c5b3bc1be (diff)
downloadelna-47c8f99b6ef812dbc22ca56a39ba21bccad47796.tar.gz
Implement generic pointers
Diffstat (limited to 'boot/ast.cc')
-rw-r--r--boot/ast.cc47
1 files changed, 47 insertions, 0 deletions
diff --git a/boot/ast.cc b/boot/ast.cc
index edf1237..9dbcf7f 100644
--- a/boot/ast.cc
+++ b/boot/ast.cc
@@ -760,6 +760,23 @@ namespace elna::boot
{
}
+ record_type_expression::record_type_expression(const source_position position,
+ std::vector<field_declaration>&& fields, identifier&& base,
+ std::vector<type_expression *>&& base_arguments)
+ : node(position), fields(std::move(fields)),
+ base(std::make_optional<identifier>(std::move(base))),
+ base_arguments(std::move(base_arguments))
+ {
+ }
+
+ record_type_expression::~record_type_expression()
+ {
+ for (const type_expression *argument : this->base_arguments)
+ {
+ delete argument;
+ }
+ }
+
void record_type_expression::accept(parser_visitor *visitor)
{
visitor->visit(this);
@@ -826,6 +843,22 @@ namespace elna::boot
{
}
+ record_constructor_expression::record_constructor_expression(const source_position position,
+ identifier&& type_name, std::vector<type_expression *>&& arguments,
+ std::vector<field_initializer>&& field_initializers)
+ : node(position), type_name(std::move(type_name)),
+ field_initializers(std::move(field_initializers)), arguments(std::move(arguments))
+ {
+ }
+
+ record_constructor_expression::~record_constructor_expression()
+ {
+ for (const type_expression *argument : this->arguments)
+ {
+ delete argument;
+ }
+ }
+
void record_constructor_expression::accept(parser_visitor *visitor)
{
visitor->visit(this);
@@ -1176,6 +1209,20 @@ namespace elna::boot
{
}
+ named_expression::named_expression(const source_position position, const std::string& name,
+ std::vector<type_expression *>&& arguments)
+ : node(position), name(name), arguments(std::move(arguments))
+ {
+ }
+
+ named_expression::~named_expression()
+ {
+ for (const type_expression *argument : this->arguments)
+ {
+ delete argument;
+ }
+ }
+
void named_expression::accept(parser_visitor *visitor)
{
visitor->visit(this);