aboutsummaryrefslogtreecommitdiff
path: root/boot/ast.cc
diff options
context:
space:
mode:
Diffstat (limited to 'boot/ast.cc')
-rw-r--r--boot/ast.cc33
1 files changed, 22 insertions, 11 deletions
diff --git a/boot/ast.cc b/boot/ast.cc
index 7157315..fb1e276 100644
--- a/boot/ast.cc
+++ b/boot/ast.cc
@@ -394,6 +394,7 @@ namespace elna::boot
void walking_visitor::visit(array_type_expression *expression)
{
expression->base().accept(this);
+ expression->dimensions().accept(this);
}
void walking_visitor::visit(slice_type_expression *expression)
@@ -451,7 +452,7 @@ namespace elna::boot
void walking_visitor::visit(array_constructor_expression *expression)
{
- expression->m_element_type->accept(this);
+ expression->array_type().accept(this);
for (auto *element : expression->elements)
{
element->accept(this);
@@ -626,14 +627,15 @@ namespace elna::boot
}
array_type_expression::array_type_expression(const source_position position,
- type_expression *base, const std::uint32_t size)
- : node(position), m_base(base), size(size)
+ type_expression *base, expression *dimensions)
+ : node(position), m_base(base), m_dimensions(dimensions)
{
}
array_type_expression::~array_type_expression()
{
- delete m_base;
+ delete this->m_base;
+ delete this->m_dimensions;
}
void array_type_expression::accept(parser_visitor *visitor)
@@ -646,9 +648,14 @@ namespace elna::boot
return this;
}
- type_expression& array_type_expression::base()
+ type_expression& array_type_expression::base() const
{
- return *m_base;
+ return *this->m_base;
+ }
+
+ expression& array_type_expression::dimensions() const
+ {
+ return *this->m_dimensions;
}
slice_type_expression::slice_type_expression(const source_position position,
@@ -659,7 +666,7 @@ namespace elna::boot
slice_type_expression::~slice_type_expression()
{
- delete m_base;
+ delete this->m_base;
}
void slice_type_expression::accept(parser_visitor *visitor)
@@ -818,9 +825,8 @@ namespace elna::boot
}
array_constructor_expression::array_constructor_expression(const source_position position,
- std::uint32_t size, type_expression *element_type,
- std::vector<expression *>&& elements)
- : node(position), size(size), m_element_type(element_type), elements(std::move(elements))
+ array_type_expression *element_type, std::vector<expression *>&& elements)
+ : node(position), m_element_type(element_type), elements(std::move(elements))
{
}
@@ -834,9 +840,14 @@ namespace elna::boot
return this;
}
+ array_type_expression& array_constructor_expression::array_type() const
+ {
+ return *this->m_element_type;
+ }
+
array_constructor_expression::~array_constructor_expression()
{
- delete m_element_type;
+ delete this->m_element_type;
for (const expression *element : elements)
{
delete element;