aboutsummaryrefslogtreecommitdiff
path: root/boot/ast.cc
diff options
context:
space:
mode:
Diffstat (limited to 'boot/ast.cc')
-rw-r--r--boot/ast.cc28
1 files changed, 11 insertions, 17 deletions
diff --git a/boot/ast.cc b/boot/ast.cc
index dc643fe..d698cd4 100644
--- a/boot/ast.cc
+++ b/boot/ast.cc
@@ -423,6 +423,7 @@ namespace elna::boot
void walking_visitor::visit(record_constructor_expression *expression)
{
+ expression->record_type().accept(this);
for (const field_initializer& initializer : expression->field_initializers)
{
initializer.value().accept(this);
@@ -844,36 +845,29 @@ namespace elna::boot
}
record_constructor_expression::record_constructor_expression(const source_position position,
- identifier&& type_name,
- std::vector<field_initializer>&& field_initializers)
- : node(position), type_name(std::move(type_name)), field_initializers(std::move(field_initializers))
+ type_expression *record_type, std::vector<field_initializer>&& field_initializers)
+ : node(position), m_record_type(record_type), field_initializers(std::move(field_initializers))
{
}
- 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))
+ void record_constructor_expression::accept(parser_visitor *visitor)
{
+ visitor->visit(this);
}
- record_constructor_expression::~record_constructor_expression()
+ record_constructor_expression *record_constructor_expression::is_record_constructor()
{
- for (const type_expression *argument : this->arguments)
- {
- delete argument;
- }
+ return this;
}
- void record_constructor_expression::accept(parser_visitor *visitor)
+ type_expression& record_constructor_expression::record_type()
{
- visitor->visit(this);
+ return *this->m_record_type;
}
- record_constructor_expression *record_constructor_expression::is_record_constructor()
+ record_constructor_expression::~record_constructor_expression()
{
- return this;
+ delete this->m_record_type;
}
array_constructor_expression::array_constructor_expression(const source_position position,