diff options
| author | Eugen Wissner <belka@caraus.de> | 2026-09-08 20:43:39 +0200 |
|---|---|---|
| committer | Eugen Wissner <belka@caraus.de> | 2026-09-08 20:43:39 +0200 |
| commit | 47c8f99b6ef812dbc22ca56a39ba21bccad47796 (patch) | |
| tree | 7c057a6d408f9b30801767ed528f7f4c207bfbce /boot/ast.cc | |
| parent | 8f9ba0c67479d8926edead8aa828458c5b3bc1be (diff) | |
| download | elna-47c8f99b6ef812dbc22ca56a39ba21bccad47796.tar.gz | |
Implement generic pointers
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); |
