From 12e304fd56f054ba7296ab538eecd4280a67832a Mon Sep 17 00:00:00 2001 From: Eugen Wissner Date: Wed, 7 Oct 2026 17:33:40 +0200 Subject: Allow assigning contants to enumeration members --- boot/ast.cc | 41 +++++++++++------------------------------ 1 file changed, 11 insertions(+), 30 deletions(-) (limited to 'boot/ast.cc') diff --git a/boot/ast.cc b/boot/ast.cc index bdc9089..dc643fe 100644 --- a/boot/ast.cc +++ b/boot/ast.cc @@ -400,8 +400,15 @@ namespace elna::boot } } - void walking_visitor::visit(enumeration_type_expression *) + void walking_visitor::visit(enumeration_type_expression *expression) { + for (const enumeration_type_expression::member_declaration& member : expression->members) + { + if (member.second != nullptr) + { + member.second->accept(this); + } + } } void walking_visitor::visit(extern_type_expression *) @@ -816,26 +823,9 @@ namespace elna::boot return this; } - field_initializer::field_initializer(identifier name, expression *value) - : m_name(std::move(name)), m_value(value) - { - } - - field_initializer::~field_initializer() - { - delete this->m_value; - } - - field_initializer::field_initializer(field_initializer&& other) noexcept - : m_name(std::move(other.m_name)), m_value(std::exchange(other.m_value, nullptr)) - { - } - - field_initializer& field_initializer::operator=(field_initializer&& other) noexcept + field_initializer::field_initializer(identifier&& name, expression *value) + : m_name(std::move(name)), m_value(std::unique_ptr(value)) { - std::swap(this->m_value, other.m_value); - this->m_name = std::move(other.m_name); - return *this; } const std::string& field_initializer::name() const @@ -853,15 +843,6 @@ namespace elna::boot return *this->m_value; } - void field_initializer::value(expression& value) - { - if (this->m_value != &value) - { - delete this->m_value; - this->m_value = &value; - } - } - record_constructor_expression::record_constructor_expression(const source_position position, identifier&& type_name, std::vector&& field_initializers) @@ -970,7 +951,7 @@ namespace elna::boot } enumeration_type_expression::enumeration_type_expression(const source_position position, - std::vector&& members) + std::vector&& members) : node(position), members(std::move(members)) { } -- cgit v1.2.3