diff options
| author | Eugen Wissner <belka@caraus.de> | 2026-07-09 17:24:42 +0200 |
|---|---|---|
| committer | Eugen Wissner <belka@caraus.de> | 2026-07-09 17:24:42 +0200 |
| commit | 36440faa345bf842c348711325312c2b02e4cc23 (patch) | |
| tree | a7ec54ad2f948efc556f3a74b59064321ae581c9 /include | |
| parent | 8d8e771af944796eba10cfa9568d284daaab93a1 (diff) | |
| download | elna-36440faa345bf842c348711325312c2b02e4cc23.tar.gz | |
Merge program and unit AST types
Diffstat (limited to 'include')
| -rw-r--r-- | include/elna/boot/ast.h | 24 | ||||
| -rw-r--r-- | include/elna/boot/semantic.h | 18 | ||||
| -rw-r--r-- | include/elna/gcc/elna-generic.h | 1 |
3 files changed, 15 insertions, 28 deletions
diff --git a/include/elna/boot/ast.h b/include/elna/boot/ast.h index 6942ca5..fe502a4 100644 --- a/include/elna/boot/ast.h +++ b/include/elna/boot/ast.h @@ -68,7 +68,6 @@ namespace elna::boot class case_statement; class traits_expression; class unit; - class program; class binary_expression; class unary_expression; class type_expression; @@ -110,7 +109,6 @@ namespace elna::boot virtual void visit(case_statement *) = 0; virtual void visit(empty_statement *) = 0; virtual void visit(unit *) = 0; - virtual void visit(program *) = 0; virtual void visit(binary_expression *) = 0; virtual void visit(unary_expression *) = 0; virtual void visit(type_expression *) = 0; @@ -144,7 +142,6 @@ namespace elna::boot [[noreturn]] virtual void visit(type_expression *) override; [[noreturn]] virtual void visit(array_type_expression *) override; [[noreturn]] virtual void visit(pointer_type_expression *) override; - [[noreturn]] virtual void visit(program *) override; [[noreturn]] virtual void visit(type_declaration *) override; [[noreturn]] virtual void visit(record_type_expression *) override; [[noreturn]] virtual void visit(union_type_expression *) override; @@ -290,7 +287,9 @@ namespace elna::boot const std::optional<std::string> base; record_type_expression(const struct position position, - std::vector<field_declaration>&& fields, std::optional<std::string> base); + std::vector<field_declaration>&& fields); + record_type_expression(const struct position position, + std::vector<field_declaration>&& fields, std::string&& base); void accept(parser_visitor *visitor) override; record_type_expression *is_record() override; @@ -315,7 +314,8 @@ namespace elna::boot public: const std::vector<std::string> members; - enumeration_type_expression(const struct position, std::vector<std::string>&& members); + enumeration_type_expression(const struct position, + std::vector<std::string>&& members); void accept(parser_visitor *visitor) override; enumeration_type_expression *is_enumeration() override; @@ -710,6 +710,8 @@ namespace elna::boot class unit : public node { public: + std::optional<std::vector<statement *>> body; + std::vector<import_declaration *> imports; std::vector<constant_declaration *> constants; std::vector<type_declaration *> types; @@ -717,22 +719,12 @@ namespace elna::boot std::vector<procedure_declaration *> procedures; unit(const struct position position); + unit(const struct position position, std::vector<statement *>&& body); virtual void accept(parser_visitor *visitor) override; virtual ~unit() override; }; - class program : public unit - { - public: - std::vector<statement *> body; - - program(const struct position position); - void accept(parser_visitor *visitor) override; - - virtual ~program() override; - }; - template<typename T> class literal : public literal_expression { diff --git a/include/elna/boot/semantic.h b/include/elna/boot/semantic.h index 6bc7fe0..c6ad19d 100644 --- a/include/elna/boot/semantic.h +++ b/include/elna/boot/semantic.h @@ -102,8 +102,6 @@ namespace elna::boot public: explicit type_analysis_visitor(symbol_bag bag); - void visit(program *program) override; - void visit(procedure_declaration *definition) override; void visit(assign_statement *) override; void visit(if_statement *) override; @@ -128,7 +126,7 @@ namespace elna::boot symbol_bag bag; std::pair<procedure_type, std::vector<std::string>> build_procedure( - procedure_type_expression& type_expression); + procedure_type_expression& expression); std::vector<type_field> build_composite_type(const std::vector<field_declaration>& fields); std::shared_ptr<variable_info> register_variable(const std::string& name, const bool is_extern, const struct position position); @@ -137,14 +135,13 @@ namespace elna::boot name_analysis_visitor(symbol_bag bag); void visit(type_expression *) override; - void visit(array_type_expression *type_expression) override; - void visit(pointer_type_expression *type_expression) override; - void visit(program *program) override; + void visit(array_type_expression *expression) override; + void visit(pointer_type_expression *expression) override; void visit(type_declaration *definition) override; - void visit(record_type_expression *type_expression) override; - void visit(union_type_expression *type_expression) override; - void visit(procedure_type_expression *type_expression) override; - void visit(enumeration_type_expression *type_expression) override; + void visit(record_type_expression *expression) override; + void visit(union_type_expression *expression) override; + void visit(procedure_type_expression *expression) override; + void visit(enumeration_type_expression *expression) override; void visit(variable_declaration *declaration) override; void visit(constant_declaration *definition) override; @@ -186,7 +183,6 @@ namespace elna::boot explicit declaration_visitor(); - void visit(program *program) override; void visit(import_declaration *) override; void visit(unit *unit) override; void visit(type_declaration *definition) override; diff --git a/include/elna/gcc/elna-generic.h b/include/elna/gcc/elna-generic.h index 77fd792..7ee251b 100644 --- a/include/elna/gcc/elna-generic.h +++ b/include/elna/gcc/elna-generic.h @@ -65,7 +65,6 @@ namespace elna::gcc public: generic_visitor(std::shared_ptr<symbol_table> symbol_table, elna::boot::symbol_bag bag); - void visit(boot::program *program) override; void visit(boot::procedure_declaration *definition) override; void visit(boot::procedure_call *call) override; void visit(boot::cast_expression *expression) override; |
