From 47c8f99b6ef812dbc22ca56a39ba21bccad47796 Mon Sep 17 00:00:00 2001 From: Eugen Wissner Date: Tue, 8 Sep 2026 20:43:39 +0200 Subject: Implement generic pointers --- boot/ast.cc | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) (limited to 'boot/ast.cc') 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&& fields, identifier&& base, + std::vector&& base_arguments) + : node(position), fields(std::move(fields)), + base(std::make_optional(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&& arguments, + std::vector&& 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&& 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); -- cgit v1.2.3