#ifndef ASTDATA_H #define ASTDATA_H #include #include #include "Symbol.h" //Circular dependency class Type; #include "Type.h" #ifndef NULL #define NULL ((void*)0) #endif enum ASTType {undef, translation_unit, interpreter_directive, import, identifier, type_def, function, code_block, typed_parameter, expression, boolean_expression, statement, if_statement, while_loop, for_loop, return_statement, assignment_statement, declaration_statement, if_comp, simple_passthrough, function_call, value}; class ASTData { public: ASTData(); ASTData(ASTType type, Type *valueType = NULL); ASTData(ASTType type, Symbol symbol, Type *valueType = NULL); ~ASTData(); std::string toString(); static std::string ASTTypeToString(ASTType type); void addTemplateTypeDefToReplace(NodeTree* typeDefToReplace); std::vector*> getTemplateTypeDefsToReplace(); ASTType type; Type* valueType; Symbol symbol; std::map*>> scope; std::vector*> templateTypeDefsToReplace; //Used only by template classes/functions to keep track of pointers to the typedefs that need to be changed private: }; #endif