aboutsummaryrefslogtreecommitdiff
path: root/boot/ast.cc
diff options
context:
space:
mode:
Diffstat (limited to 'boot/ast.cc')
-rw-r--r--boot/ast.cc41
1 files changed, 11 insertions, 30 deletions
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<expression>(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_initializer>&& field_initializers)
@@ -970,7 +951,7 @@ namespace elna::boot
}
enumeration_type_expression::enumeration_type_expression(const source_position position,
- std::vector<identifier>&& members)
+ std::vector<enumeration_type_expression::member_declaration>&& members)
: node(position), members(std::move(members))
{
}