From b2dee14873402ee3d13d59ae5579593796ea862f Mon Sep 17 00:00:00 2001 From: Eugen Wissner Date: Wed, 5 Aug 2026 01:03:55 +0200 Subject: Check that constants are initialized --- boot/ast.cc | 33 ++++++++++++++++++++++----------- 1 file changed, 22 insertions(+), 11 deletions(-) (limited to 'boot/ast.cc') 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&& elements) - : node(position), size(size), m_element_type(element_type), elements(std::move(elements)) + array_type_expression *element_type, std::vector&& 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; -- cgit v1.2.3