Replace build_type with visitor functions

This commit is contained in:
2025-03-02 10:05:47 +01:00
parent b141dc1a5a
commit 75561fd18a
4 changed files with 170 additions and 226 deletions

View File

@ -210,14 +210,6 @@ namespace boot
*/
class top_type : public node, public std::enable_shared_from_this<top_type>
{
public:
virtual std::shared_ptr<basic_type> is_basic();
virtual std::shared_ptr<array_type> is_array();
virtual std::shared_ptr<pointer_type> is_pointer();
virtual std::shared_ptr<record_type> is_record();
virtual std::shared_ptr<union_type> is_union();
virtual std::shared_ptr<procedure_type> is_procedure();
protected:
top_type(const struct position position);
};
@ -238,8 +230,6 @@ namespace boot
virtual void accept(parser_visitor *visitor) override;
const std::string& base_name();
std::shared_ptr<basic_type> is_basic() override;
};
class array_type : public top_type
@ -253,8 +243,6 @@ namespace boot
virtual void accept(parser_visitor *visitor) override;
top_type& base();
std::shared_ptr<array_type> is_array() override;
};
class pointer_type : public top_type
@ -266,8 +254,6 @@ namespace boot
virtual void accept(parser_visitor *visitor) override;
top_type& base();
std::shared_ptr<pointer_type> is_pointer() override;
};
using field_t = std::pair<std::string, std::shared_ptr<top_type>>;
@ -281,7 +267,6 @@ namespace boot
record_type(const struct position position, fields_t&& fields);
virtual void accept(parser_visitor *visitor) override;
std::shared_ptr<record_type> is_record() override;
};
class union_type : public top_type
@ -292,7 +277,6 @@ namespace boot
union_type(const struct position position, fields_t&& fields);
virtual void accept(parser_visitor *visitor) override;
std::shared_ptr<union_type> is_union() override;
};
/**
@ -363,7 +347,6 @@ namespace boot
procedure_type(const struct position position, no_return_t);
virtual void accept(parser_visitor *visitor) override;
std::shared_ptr<procedure_type> is_procedure() override;
virtual ~procedure_type() override;
};

View File

@ -41,7 +41,6 @@ namespace gcc
tree build_label_decl(const char *name, location_t loc);
tree build_procedure_type(boot::procedure_type& type);
tree build_type(boot::top_type& type);
void enter_scope();
tree leave_scope();
@ -66,31 +65,37 @@ namespace gcc
public:
generic_visitor(std::shared_ptr<symbol_table> symbol_table);
void visit(boot::program *program) override;
void visit(boot::procedure_definition *definition) override;
void visit(boot::procedure_call *call) override;
void visit(boot::cast_expression *expression) override;
void visit(boot::traits_expression *trait) override;
void visit(boot::number_literal<std::int32_t> *literal) override;
void visit(boot::number_literal<std::uint32_t> *literal) override;
void visit(boot::number_literal<double> *literal) override;
void visit(boot::number_literal<bool> *boolean) override;
void visit(boot::number_literal<unsigned char> *character) override;
void visit(boot::number_literal<std::nullptr_t> *) override;
void visit(boot::number_literal<std::string> *string) override;
void visit(boot::binary_expression *expression) override;
void visit(boot::unary_expression *expression) override;
void visit(boot::constant_definition *definition) override;
void visit(boot::type_definition *definition) override;
void visit(boot::variable_declaration *declaration) override;
void visit(boot::variable_expression *expression) override;
void visit(boot::array_access_expression *expression) override;
void visit(boot::field_access_expression *expression) override;
void visit(boot::dereference_expression *expression) override;
void visit(boot::block *block) override;
void visit(boot::assign_statement *statement) override;
void visit(boot::if_statement *statement) override;
void visit(boot::while_statement *statement) override;
virtual void visit(boot::program *program) override;
virtual void visit(boot::procedure_definition *definition) override;
virtual void visit(boot::procedure_call *call) override;
virtual void visit(boot::cast_expression *expression) override;
virtual void visit(boot::traits_expression *trait) override;
virtual void visit(boot::number_literal<std::int32_t> *literal) override;
virtual void visit(boot::number_literal<std::uint32_t> *literal) override;
virtual void visit(boot::number_literal<double> *literal) override;
virtual void visit(boot::number_literal<bool> *boolean) override;
virtual void visit(boot::number_literal<unsigned char> *character) override;
virtual void visit(boot::number_literal<std::nullptr_t> *) override;
virtual void visit(boot::number_literal<std::string> *string) override;
virtual void visit(boot::binary_expression *expression) override;
virtual void visit(boot::unary_expression *expression) override;
virtual void visit(boot::constant_definition *definition) override;
virtual void visit(boot::type_definition *definition) override;
virtual void visit(boot::variable_declaration *declaration) override;
virtual void visit(boot::variable_expression *expression) override;
virtual void visit(boot::array_access_expression *expression) override;
virtual void visit(boot::field_access_expression *expression) override;
virtual void visit(boot::dereference_expression *expression) override;
virtual void visit(boot::block *block) override;
virtual void visit(boot::assign_statement *statement) override;
virtual void visit(boot::if_statement *statement) override;
virtual void visit(boot::while_statement *statement) override;
virtual void visit(boot::basic_type *type) override;
virtual void visit(boot::array_type *type) override;
virtual void visit(boot::pointer_type *type) override;
virtual void visit(boot::record_type *type) override;
virtual void visit(boot::union_type *type) override;
virtual void visit(boot::procedure_type *type) override;
};
}
}