137 lines
5.1 KiB
C++
137 lines
5.1 KiB
C++
#ifndef CXX_AST_VISITOR_COMPONENT_H
|
|
#define CXX_AST_VISITOR_COMPONENT_H
|
|
|
|
#include "data/parser/cxx/CxxAstVisitor.h"
|
|
|
|
// CxxAstVisitorComponent: This is the base class for all ast visitor components.
|
|
// Each component can override it's begin-/endTraverse and visit methods in order to provide some functionality. The CxxAstVisitor
|
|
// executes all of these methods of registered components while traversing the AST.
|
|
class CxxAstVisitorComponent
|
|
{
|
|
public:
|
|
CxxAstVisitorComponent(CxxAstVisitor* astVisitor);
|
|
virtual ~CxxAstVisitorComponent();
|
|
|
|
#define DEF_TRAVERSE_CUSTOM_TYPE_PTR(__NAME_TYPE__, __PARAM_TYPE__) \
|
|
virtual void beginTraverse##__NAME_TYPE__(clang::__PARAM_TYPE__ *v) {} \
|
|
virtual void endTraverse##__NAME_TYPE__(clang::__PARAM_TYPE__ *v) {}
|
|
|
|
#define DEF_TRAVERSE_CUSTOM_TYPE(__NAME_TYPE__, __PARAM_TYPE__) \
|
|
virtual void beginTraverse##__NAME_TYPE__(const clang::__PARAM_TYPE__ &v) {}\
|
|
virtual void endTraverse##__NAME_TYPE__(const clang::__PARAM_TYPE__ &v) {}
|
|
|
|
#define DEF_TRAVERSE_TYPE_PTR(__TYPE__) \
|
|
DEF_TRAVERSE_CUSTOM_TYPE_PTR(__TYPE__, __TYPE__)
|
|
|
|
#define DEF_TRAVERSE_TYPE(__TYPE__) \
|
|
DEF_TRAVERSE_CUSTOM_TYPE(__TYPE__, __TYPE__)
|
|
|
|
DEF_TRAVERSE_TYPE_PTR(Decl)
|
|
|
|
DEF_TRAVERSE_TYPE_PTR(Stmt)
|
|
|
|
DEF_TRAVERSE_CUSTOM_TYPE(Type, QualType)
|
|
|
|
DEF_TRAVERSE_TYPE(TypeLoc)
|
|
|
|
DEF_TRAVERSE_TYPE_PTR(FunctionDecl)
|
|
|
|
DEF_TRAVERSE_TYPE_PTR(ClassTemplateSpecializationDecl)
|
|
|
|
DEF_TRAVERSE_TYPE_PTR(ClassTemplatePartialSpecializationDecl)
|
|
|
|
DEF_TRAVERSE_TYPE(TemplateSpecializationTypeLoc)
|
|
|
|
DEF_TRAVERSE_TYPE_PTR(LambdaExpr)
|
|
|
|
DEF_TRAVERSE_TYPE_PTR(DeclRefExpr)
|
|
|
|
DEF_TRAVERSE_TYPE_PTR(CXXForRangeStmt)
|
|
|
|
DEF_TRAVERSE_TYPE_PTR(UnresolvedLookupExpr)
|
|
|
|
virtual void beginTraverseCallCommonCallee() {}
|
|
virtual void endTraverseCallCommonCallee() {}
|
|
|
|
virtual void beginTraverseCallCommonArgument() {}
|
|
virtual void endTraverseCallCommonArgument() {}
|
|
|
|
virtual void beginTraverseBinCommaLhs() {}
|
|
virtual void endTraverseBinCommaLhs() {}
|
|
|
|
virtual void beginTraverseBinCommaRhs() {}
|
|
virtual void endTraverseBinCommaRhs() {}
|
|
|
|
virtual void beginTraverseAssignCommonLhs() {}
|
|
virtual void endTraverseAssignCommonLhs() {}
|
|
|
|
virtual void beginTraverseAssignCommonRhs() {}
|
|
virtual void endTraverseAssignCommonRhs() {}
|
|
|
|
virtual void beginTraverseCXXBaseSpecifier() {}
|
|
virtual void endTraverseCXXBaseSpecifier() {}
|
|
|
|
virtual void beginTraverseTemplateDefaultArgumentLoc() {}
|
|
virtual void endTraverseTemplateDefaultArgumentLoc() {}
|
|
|
|
DEF_TRAVERSE_TYPE(NestedNameSpecifierLoc)
|
|
|
|
DEF_TRAVERSE_CUSTOM_TYPE_PTR(ConstructorInitializer, CXXCtorInitializer)
|
|
|
|
DEF_TRAVERSE_TYPE_PTR(CXXTemporaryObjectExpr)
|
|
|
|
virtual void beginTraverseTemplateArgumentLoc(const clang::TemplateArgumentLoc& loc) {}
|
|
virtual void endTraverseTemplateArgumentLoc(const clang::TemplateArgumentLoc& loc) {}
|
|
|
|
virtual void beginTraverseLambdaCapture(clang::LambdaExpr *lambdaExpr, const clang::LambdaCapture *capture) {}
|
|
virtual void endTraverseLambdaCapture(clang::LambdaExpr *lambdaExpr, const clang::LambdaCapture *capture) {}
|
|
|
|
virtual void visitTagDecl(clang::TagDecl* d) {}
|
|
virtual void visitClassTemplateSpecializationDecl(clang::ClassTemplateSpecializationDecl* d) {}
|
|
virtual void visitVarDecl(clang::VarDecl* d) {}
|
|
virtual void visitVarTemplateSpecializationDecl(clang::VarTemplateSpecializationDecl* d) {}
|
|
virtual void visitFieldDecl(clang::FieldDecl* d) {}
|
|
virtual void visitFunctionDecl(clang::FunctionDecl* d) {}
|
|
virtual void visitCXXMethodDecl(clang::CXXMethodDecl* d) {}
|
|
virtual void visitEnumConstantDecl(clang::EnumConstantDecl* d) {}
|
|
virtual void visitNamespaceDecl(clang::NamespaceDecl* d) {}
|
|
virtual void visitNamespaceAliasDecl(clang::NamespaceAliasDecl* d) {}
|
|
virtual void visitTypedefDecl(clang::TypedefDecl* d) {}
|
|
virtual void visitTypeAliasDecl(clang::TypeAliasDecl* d) {}
|
|
virtual void visitUsingDirectiveDecl(clang::UsingDirectiveDecl* d) {}
|
|
virtual void visitUsingDecl(clang::UsingDecl* d) {}
|
|
virtual void visitNonTypeTemplateParmDecl(clang::NonTypeTemplateParmDecl* d) {}
|
|
virtual void visitTemplateTypeParmDecl(clang::TemplateTypeParmDecl* d) {}
|
|
virtual void visitTemplateTemplateParmDecl(clang::TemplateTemplateParmDecl* d) {}
|
|
|
|
virtual void visitTypeLoc(clang::TypeLoc tl) {}
|
|
|
|
virtual void visitCastExpr(clang::CastExpr* s) {}
|
|
virtual void visitUnaryAddrOf(clang::UnaryOperator* s) {}
|
|
virtual void visitUnaryDeref(clang::UnaryOperator* s) {}
|
|
virtual void visitDeclStmt(clang::DeclStmt* s) {}
|
|
virtual void visitReturnStmt(clang::ReturnStmt* s) {}
|
|
virtual void visitInitListExpr(clang::InitListExpr* s) {}
|
|
virtual void visitDeclRefExpr(clang::DeclRefExpr* s) {}
|
|
virtual void visitMemberExpr(clang::MemberExpr* s) {}
|
|
virtual void visitCXXDependentScopeMemberExpr(clang::CXXDependentScopeMemberExpr* s) {}
|
|
virtual void visitCXXConstructExpr(clang::CXXConstructExpr* s) {}
|
|
virtual void visitLambdaExpr(clang::LambdaExpr* s) {}
|
|
|
|
virtual void visitConstructorInitializer(clang::CXXCtorInitializer* init) {}
|
|
|
|
#undef DEF_TRAVERSE_CUSTOM_TYPE_PTR
|
|
#undef DEF_TRAVERSE_CUSTOM_TYPE
|
|
#undef DEF_TRAVERSE_TYPE_PTR
|
|
#undef DEF_TRAVERSE_TYPE
|
|
|
|
protected:
|
|
CxxAstVisitor* getAstVisitor();
|
|
const CxxAstVisitor* getAstVisitor() const;
|
|
|
|
private:
|
|
CxxAstVisitor* m_astVisitor;
|
|
};
|
|
|
|
#endif // CXX_AST_VISITOR_COMPONENT_H
|