diff options
Diffstat (limited to 'boot/ast.cc')
| -rw-r--r-- | boot/ast.cc | 47 |
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); |
