diff options
Diffstat (limited to 'boot/ast.cc')
| -rw-r--r-- | boot/ast.cc | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/boot/ast.cc b/boot/ast.cc index 36215c1..4af906f 100644 --- a/boot/ast.cc +++ b/boot/ast.cc @@ -119,6 +119,11 @@ namespace elna::boot __builtin_unreachable(); } + void empty_visitor::visit(array_constructor_expression *) + { + __builtin_unreachable(); + } + void empty_visitor::visit(traits_expression *) { __builtin_unreachable(); @@ -416,6 +421,15 @@ namespace elna::boot } } + void walking_visitor::visit(array_constructor_expression *expression) + { + expression->m_element_type->accept(this); + for (auto element : expression->elements) + { + element->accept(this); + } + } + void walking_visitor::visit(traits_expression *trait) { if (!trait->parameters.empty()) @@ -656,6 +670,27 @@ namespace elna::boot } } + array_constructor_expression::array_constructor_expression(const struct 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)) + { + } + + void array_constructor_expression::accept(parser_visitor *visitor) + { + visitor->visit(this); + } + + array_constructor_expression::~array_constructor_expression() + { + delete m_element_type; + for (expression *const element : elements) + { + delete element; + } + } + variable_declaration::variable_declaration(const struct position position, std::vector<identifier_definition>&& identifier, std::shared_ptr<type_expression> variable_type, expression *initializer) |
