From 36440faa345bf842c348711325312c2b02e4cc23 Mon Sep 17 00:00:00 2001 From: Eugen Wissner Date: Thu, 9 Jul 2026 17:24:42 +0200 Subject: Merge program and unit AST types --- include/elna/boot/ast.h | 24 ++++++++---------------- include/elna/boot/semantic.h | 18 +++++++----------- include/elna/gcc/elna-generic.h | 1 - 3 files changed, 15 insertions(+), 28 deletions(-) (limited to 'include') 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 base; record_type_expression(const struct position position, - std::vector&& fields, std::optional base); + std::vector&& fields); + record_type_expression(const struct position position, + std::vector&& 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 members; - enumeration_type_expression(const struct position, std::vector&& members); + enumeration_type_expression(const struct position, + std::vector&& 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> body; + std::vector imports; std::vector constants; std::vector types; @@ -717,22 +719,12 @@ namespace elna::boot std::vector procedures; unit(const struct position position); + unit(const struct position position, std::vector&& body); virtual void accept(parser_visitor *visitor) override; virtual ~unit() override; }; - class program : public unit - { - public: - std::vector body; - - program(const struct position position); - void accept(parser_visitor *visitor) override; - - virtual ~program() override; - }; - template 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> build_procedure( - procedure_type_expression& type_expression); + procedure_type_expression& expression); std::vector build_composite_type(const std::vector& fields); std::shared_ptr 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, 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; -- cgit v1.2.3