From 8ceb48a4e60b8ff89f28372da4f66cd152e2e0fe Mon Sep 17 00:00:00 2001 From: Eugen Wissner Date: Mon, 13 Jul 2026 23:59:36 +0200 Subject: Change record constructor syntax --- boot/ast.cc | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) (limited to 'boot/ast.cc') diff --git a/boot/ast.cc b/boot/ast.cc index 118d92c..36215c1 100644 --- a/boot/ast.cc +++ b/boot/ast.cc @@ -114,6 +114,11 @@ namespace elna::boot __builtin_unreachable(); } + void empty_visitor::visit(record_constructor_expression *) + { + __builtin_unreachable(); + } + void empty_visitor::visit(traits_expression *) { __builtin_unreachable(); @@ -403,6 +408,14 @@ namespace elna::boot expression->target().accept(this); } + void walking_visitor::visit(record_constructor_expression *expression) + { + for (const field_initializer& initializer : expression->field_initializers) + { + initializer.value->accept(this); + } + } + void walking_visitor::visit(traits_expression *trait) { if (!trait->parameters.empty()) @@ -623,6 +636,26 @@ namespace elna::boot return this; } + record_constructor_expression::record_constructor_expression(const struct position position, + std::string&& type_name, + std::vector&& field_initializers) + : node(position), type_name(std::move(type_name)), field_initializers(std::move(field_initializers)) + { + } + + void record_constructor_expression::accept(parser_visitor *visitor) + { + visitor->visit(this); + } + + record_constructor_expression::~record_constructor_expression() + { + for (const field_initializer& initializer : field_initializers) + { + delete initializer.value; + } + } + variable_declaration::variable_declaration(const struct position position, std::vector&& identifier, std::shared_ptr variable_type, expression *initializer) -- cgit v1.2.3