#ifndef STRUCTURAL_ASTNODE_H #define STRUCTURAL_ASTNODE_H #include #include #include #include "astnode.h" #include "expr_astnode.h" #include "statement_astnode.h" class FuncDef_ASTNode : public ASTNodeBase { friend Visitor; friend class ASTSemanticCheckVisitor; bool is_constructor; IdentifierType func_name; ExprTypeInfo return_type; std::vector> params; std::shared_ptr func_body; public: FuncDef_ASTNode() = default; virtual void accept(class ASTNodeVisitorBase *visitor) override; }; class ClassDef_ASTNode : public ASTNodeBase { friend Visitor; friend class ASTSemanticCheckVisitor; private: std::string class_name; std::vector> member_variables; std::vector> member_functions; std::shared_ptr constructor; std::vector> sorted_children; public: ClassDef_ASTNode() = default; virtual void accept(class ASTNodeVisitorBase *visitor) override; }; class Program_ASTNode : public ASTNodeBase { friend Visitor; friend class ASTSemanticCheckVisitor; std::vector> global_variables; std::vector> classes; std::vector> functions; std::vector> sorted_children; public: Program_ASTNode() = default; virtual void accept(class ASTNodeVisitorBase *visitor) override; }; #endif