diff options
| author | Eugen Wissner <belka@caraus.de> | 2026-07-03 08:53:03 +0200 |
|---|---|---|
| committer | Eugen Wissner <belka@caraus.de> | 2026-07-03 08:53:03 +0200 |
| commit | 4ad6052aa2816f8296e62569272e99fc0d2fd3c1 (patch) | |
| tree | e1002f3fc1d51929b6f7b77f4769eb84be4e9e82 /frontend/ast.cc | |
| parent | 453332311ac2d569093f9ef62d41d13b0ce024c8 (diff) | |
| download | elna-4ad6052aa2816f8296e62569272e99fc0d2fd3c1.tar.gz | |
Merge variable_expression and named_type_expression
Diffstat (limited to 'frontend/ast.cc')
| -rw-r--r-- | frontend/ast.cc | 86 |
1 files changed, 50 insertions, 36 deletions
diff --git a/frontend/ast.cc b/frontend/ast.cc index e067937..9a1f96b 100644 --- a/frontend/ast.cc +++ b/frontend/ast.cc @@ -24,7 +24,7 @@ namespace elna::frontend __builtin_unreachable(); } - void empty_visitor::visit(named_type_expression *) + void empty_visitor::visit(type_expression *) { not_implemented(); } @@ -149,7 +149,7 @@ namespace elna::frontend not_implemented(); } - void empty_visitor::visit(variable_expression *) + void empty_visitor::visit(named_expression *) { not_implemented(); } @@ -253,12 +253,7 @@ namespace elna::frontend return nullptr; } - type_expression::type_expression(const struct position position) - : node(position) - { - } - - named_type_expression *type_expression::is_named() + named_expression *type_expression::is_named() { return nullptr; } @@ -293,24 +288,46 @@ namespace elna::frontend return nullptr; } - named_type_expression::named_type_expression(const struct position position, const std::string& name) - : type_expression(position), name(name) + void type_expression::accept(parser_visitor *visitor) { + if (named_expression *node = is_named()) + { + return visitor->visit(node); + } + else if (array_type_expression *node = is_array()) + { + return visitor->visit(node); + } + else if (pointer_type_expression *node = is_pointer()) + { + return visitor->visit(node); + } + else if (record_type_expression *node = is_record()) + { + return visitor->visit(node); + } + else if (union_type_expression *node = is_union()) + { + return visitor->visit(node); + } + else if (procedure_type_expression *node = is_procedure()) + { + return visitor->visit(node); + } + else if (enumeration_type_expression *node = is_enumeration()) + { + return visitor->visit(node); + } + __builtin_unreachable(); } - void named_type_expression::accept(parser_visitor *visitor) - { - visitor->visit(this); - } - - named_type_expression *named_type_expression::is_named() + type_expression::~type_expression() { - return this; } array_type_expression::array_type_expression(const struct position position, type_expression *base, const std::uint32_t size) - : type_expression(position), m_base(base), size(size) + : node(position), m_base(base), size(size) { } @@ -336,7 +353,7 @@ namespace elna::frontend pointer_type_expression::pointer_type_expression(const struct position position, type_expression *base) - : type_expression(position), m_base(base) + : node(position), m_base(base) { } @@ -362,7 +379,7 @@ namespace elna::frontend record_type_expression::record_type_expression(const struct position position, std::vector<field_declaration>&& fields) - : type_expression(position), fields(std::move(fields)) + : node(position), fields(std::move(fields)) { } @@ -386,7 +403,7 @@ namespace elna::frontend union_type_expression::union_type_expression(const struct position position, std::vector<field_declaration>&& fields) - : type_expression(position), fields(std::move(fields)) + : node(position), fields(std::move(fields)) { } @@ -464,7 +481,7 @@ namespace elna::frontend } procedure_type_expression::procedure_type_expression(const struct position position, return_t return_type) - : type_expression(position), return_type(return_type) + : node(position), return_type(return_type) { } @@ -491,7 +508,7 @@ namespace elna::frontend } enumeration_type_expression::enumeration_type_expression(const struct position position, std::vector<std::string>&& members) - : type_expression(position), members(members) + : node(position), members(members) { } @@ -559,6 +576,11 @@ namespace elna::frontend { } + block::block(std::vector<constant_declaration*>&& constants, std::vector<variable_declaration *>&& variables) + : m_variables(std::move(variables)), m_constants(std::move(constants)) + { + } + block::block(block&& that) : m_variables(std::move(that.m_variables)), m_constants(std::move(that.m_constants)), m_body(std::move(that.m_body)) @@ -657,10 +679,6 @@ namespace elna::frontend } } - literal_expression::literal_expression() - { - } - literal_expression *literal_expression::is_literal() { return this; @@ -684,10 +702,6 @@ namespace elna::frontend } } - designator_expression::designator_expression() - { - } - designator_expression::~designator_expression() { } @@ -699,7 +713,7 @@ namespace elna::frontend void designator_expression::accept(parser_visitor *visitor) { - if (variable_expression *node = is_variable()) + if (named_expression *node = is_named()) { return visitor->visit(node); } @@ -718,17 +732,17 @@ namespace elna::frontend __builtin_unreachable(); } - variable_expression::variable_expression(const struct position position, const std::string& name) + named_expression::named_expression(const struct position position, const std::string& name) : node(position), name(name) { } - void variable_expression::accept(parser_visitor *visitor) + void named_expression::accept(parser_visitor *visitor) { visitor->visit(this); } - variable_expression *variable_expression::is_variable() + named_expression *named_expression::is_named() { return this; } @@ -1039,7 +1053,7 @@ namespace elna::frontend visitor->visit(this); } - variable_expression *designator_expression::is_variable() + named_expression *designator_expression::is_named() { return nullptr; } |
