aboutsummaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorEugen Wissner <belka@caraus.de>2026-07-09 17:24:42 +0200
committerEugen Wissner <belka@caraus.de>2026-07-09 17:24:42 +0200
commit36440faa345bf842c348711325312c2b02e4cc23 (patch)
treea7ec54ad2f948efc556f3a74b59064321ae581c9 /include
parent8d8e771af944796eba10cfa9568d284daaab93a1 (diff)
downloadelna-36440faa345bf842c348711325312c2b02e4cc23.tar.gz
Merge program and unit AST types
Diffstat (limited to 'include')
-rw-r--r--include/elna/boot/ast.h24
-rw-r--r--include/elna/boot/semantic.h18
-rw-r--r--include/elna/gcc/elna-generic.h1
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;