aboutsummaryrefslogtreecommitdiff
path: root/boot/ast.cc
diff options
context:
space:
mode:
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);