diff options
Diffstat (limited to 'boot/ast.cc')
| -rw-r--r-- | boot/ast.cc | 33 |
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; |
