clang API Documentation

Classes | Namespaces | Defines | Functions
DataRecursiveASTVisitor.h File Reference
#include "clang/AST/Attr.h"
#include "clang/AST/Decl.h"
#include "clang/AST/DeclCXX.h"
#include "clang/AST/DeclFriend.h"
#include "clang/AST/DeclObjC.h"
#include "clang/AST/DeclOpenMP.h"
#include "clang/AST/DeclTemplate.h"
#include "clang/AST/Expr.h"
#include "clang/AST/ExprCXX.h"
#include "clang/AST/ExprObjC.h"
#include "clang/AST/NestedNameSpecifier.h"
#include "clang/AST/Stmt.h"
#include "clang/AST/StmtCXX.h"
#include "clang/AST/StmtObjC.h"
#include "clang/AST/StmtOpenMP.h"
#include "clang/AST/TemplateBase.h"
#include "clang/AST/TemplateName.h"
#include "clang/AST/Type.h"
#include "clang/AST/TypeLoc.h"
#include "clang/AST/AttrVisitor.inc"
#include "clang/AST/StmtNodes.inc"
#include "clang/AST/TypeNodes.def"
#include "clang/AST/TypeLocNodes.def"
#include "clang/AST/DeclNodes.inc"
#include "clang/Basic/OpenMPKinds.def"
Include dependency graph for DataRecursiveASTVisitor.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

class  clang::RecursiveASTVisitor< Derived >
 A class that does preorder depth-first traversal on the entire Clang AST and visits each node. More...
class  clang::RecursiveASTVisitor< Derived >::NewQueueRAII
class  clang::RecursiveASTVisitor< Derived >::StmtQueueAction

Namespaces

namespace  clang

Defines

#define UNARYOP_LIST()
#define BINOP_LIST()
#define CAO_LIST()
#define RecursiveASTVisitor   DataRecursiveASTVisitor
#define TRY_TO(CALL_EXPR)
#define ATTR_VISITOR_DECLS_ONLY
#define ABSTRACT_STMT(STMT)
#define STMT(CLASS, PARENT)   bool Traverse##CLASS(CLASS *S);
#define STMT(CLASS, PARENT)
#define OPERATOR(NAME)
#define GENERAL_BINOP_FALLBACK(NAME, BINOP_TYPE)
#define OPERATOR(NAME)   GENERAL_BINOP_FALLBACK(NAME, BinaryOperator)
#define OPERATOR(NAME)   GENERAL_BINOP_FALLBACK(NAME##Assign, CompoundAssignOperator)
#define ABSTRACT_TYPE(CLASS, BASE)
#define TYPE(CLASS, BASE)   bool Traverse##CLASS##Type(CLASS##Type *T);
#define TYPE(CLASS, BASE)
#define ABSTRACT_TYPELOC(CLASS, BASE)
#define TYPELOC(CLASS, BASE)   bool Traverse##CLASS##TypeLoc(CLASS##TypeLoc TL);
#define TYPE(CLASS, BASE)
#define ABSTRACT_DECL(DECL)
#define DECL(CLASS, BASE)   bool Traverse##CLASS##Decl(CLASS##Decl *D);
#define DECL(CLASS, BASE)
#define OPENMP_CLAUSE(Name, Class)   bool Visit##Class(Class *C);
#define DISPATCH(NAME, CLASS, VAR)   return getDerived().Traverse##NAME(static_cast<CLASS *>(VAR))
#define DISPATCH_STMT(NAME, CLASS, VAR)
#define OPERATOR(NAME)
#define OPERATOR(NAME)
#define OPERATOR(NAME)
#define ABSTRACT_STMT(STMT)
#define STMT(CLASS, PARENT)
#define ABSTRACT_TYPE(CLASS, BASE)
#define TYPE(CLASS, BASE)
#define ABSTRACT_TYPELOC(CLASS, BASE)
#define TYPELOC(CLASS, BASE)
#define VISITORCLASS   RecursiveASTVisitor
#define ABSTRACT_DECL(DECL)
#define DECL(CLASS, BASE)
#define DEF_TRAVERSE_TYPE(TYPE, CODE)
#define DEF_TRAVERSE_TYPELOC(TYPE, CODE)
#define DEF_TRAVERSE_DECL(DECL, CODE)
#define DEF_TRAVERSE_STMT(STMT, CODE)
#define OPENMP_CLAUSE(Name, Class)

Functions

 clang::DEF_TRAVERSE_TYPE (ComplexType,{TRY_TO(TraverseType(T->getElementType()));}) DEF_TRAVERSE_TYPE(PointerType

Define Documentation

#define ABSTRACT_DECL (   DECL)

Definition at line 394 of file DataRecursiveASTVisitor.h.

#define ABSTRACT_DECL (   DECL)

Definition at line 394 of file DataRecursiveASTVisitor.h.

#define ABSTRACT_STMT (   STMT)

Definition at line 266 of file DataRecursiveASTVisitor.h.

#define ABSTRACT_STMT (   STMT)

Definition at line 266 of file DataRecursiveASTVisitor.h.

#define ABSTRACT_TYPE (   CLASS,
  BASE 
)

Definition at line 340 of file DataRecursiveASTVisitor.h.

#define ABSTRACT_TYPE (   CLASS,
  BASE 
)

Definition at line 340 of file DataRecursiveASTVisitor.h.

#define ABSTRACT_TYPELOC (   CLASS,
  BASE 
)

Definition at line 361 of file DataRecursiveASTVisitor.h.

#define ABSTRACT_TYPELOC (   CLASS,
  BASE 
)

Definition at line 361 of file DataRecursiveASTVisitor.h.

Definition at line 259 of file DataRecursiveASTVisitor.h.

#define BINOP_LIST ( )
Value:
OPERATOR(PtrMemD) OPERATOR(PtrMemI) OPERATOR(Mul) OPERATOR(Div)              \
      OPERATOR(Rem) OPERATOR(Add) OPERATOR(Sub) OPERATOR(Shl) OPERATOR(Shr)    \
      OPERATOR(LT) OPERATOR(GT) OPERATOR(LE) OPERATOR(GE) OPERATOR(EQ)         \
      OPERATOR(NE) OPERATOR(And) OPERATOR(Xor) OPERATOR(Or) OPERATOR(LAnd)     \
      OPERATOR(LOr) OPERATOR(Assign) OPERATOR(Comma)

Definition at line 48 of file DataRecursiveASTVisitor.h.

Referenced by clang::RecursiveASTVisitor< Derived >::TraverseStmt().

#define CAO_LIST ( )
Value:
OPERATOR(Mul) OPERATOR(Div) OPERATOR(Rem) OPERATOR(Add) OPERATOR(Sub)        \
      OPERATOR(Shl) OPERATOR(Shr) OPERATOR(And) OPERATOR(Or) OPERATOR(Xor)

Definition at line 56 of file DataRecursiveASTVisitor.h.

Referenced by clang::RecursiveASTVisitor< Derived >::TraverseStmt().

#define DECL (   CLASS,
  BASE 
)    bool Traverse##CLASS##Decl(CLASS##Decl *D);

Definition at line 402 of file DataRecursiveASTVisitor.h.

#define DECL (   CLASS,
  BASE 
)
Value:
bool WalkUpFrom##CLASS##Decl(CLASS##Decl *D) {                               \
    TRY_TO(WalkUpFrom##BASE(D));                                               \
    TRY_TO(Visit##CLASS##Decl(D));                                             \
    return true;                                                               \
  }                                                                            \
  bool Visit##CLASS##Decl(CLASS##Decl *D) { return true; }

Definition at line 402 of file DataRecursiveASTVisitor.h.

#define DECL (   CLASS,
  BASE 
)
Value:
case Decl::CLASS:                                                            \
    if (!getDerived().Traverse##CLASS##Decl(static_cast<CLASS##Decl *>(D)))    \
      return false;                                                            \
    break;

Definition at line 402 of file DataRecursiveASTVisitor.h.

#define DEF_TRAVERSE_DECL (   DECL,
  CODE 
)
Value:
template <typename Derived>                                                  \
  bool RecursiveASTVisitor<Derived>::Traverse##DECL(DECL *D) {                 \
    TRY_TO(WalkUpFrom##DECL(D));                                               \
    { CODE; }                                                                  \
    TRY_TO(TraverseDeclContextHelper(dyn_cast<DeclContext>(D)));               \
    return true;                                                               \
  }
#define DEF_TRAVERSE_STMT (   STMT,
  CODE 
)
Value:
template <typename Derived>                                                  \
  bool RecursiveASTVisitor<Derived>::Traverse##STMT(STMT *S) {                 \
    TRY_TO(WalkUpFrom##STMT(S));                                               \
    StmtQueueAction StmtQueue(*this);                                          \
    { CODE; }                                                                  \
    for (Stmt::child_range range = S->children(); range; ++range) {            \
      StmtQueue.queue(*range);                                                 \
    }                                                                          \
    return true;                                                               \
  }
#define DEF_TRAVERSE_TYPE (   TYPE,
  CODE 
)
Value:
template <typename Derived>                                                  \
  bool RecursiveASTVisitor<Derived>::Traverse##TYPE(TYPE *T) {                 \
    TRY_TO(WalkUpFrom##TYPE(T));                                               \
    { CODE; }                                                                  \
    return true;                                                               \
  }

Definition at line 809 of file DataRecursiveASTVisitor.h.

#define DEF_TRAVERSE_TYPELOC (   TYPE,
  CODE 
)
Value:
template <typename Derived>                                                  \
  bool RecursiveASTVisitor<Derived>::Traverse##TYPE##Loc(TYPE##Loc TL) {       \
    if (getDerived().shouldWalkTypesOfTypeLocs())                              \
      TRY_TO(WalkUpFrom##TYPE(const_cast<TYPE *>(TL.getTypePtr())));           \
    TRY_TO(WalkUpFrom##TYPE##Loc(TL));                                         \
    { CODE; }                                                                  \
    return true;                                                               \
  }
#define DISPATCH (   NAME,
  CLASS,
  VAR 
)    return getDerived().Traverse##NAME(static_cast<CLASS *>(VAR))

Definition at line 466 of file DataRecursiveASTVisitor.h.

#define DISPATCH_STMT (   NAME,
  CLASS,
  VAR 
)
Value:
TRY_TO(Traverse##NAME(static_cast<CLASS *>(VAR)));                           \
  break
#define GENERAL_BINOP_FALLBACK (   NAME,
  BINOP_TYPE 
)
Value:
bool TraverseBin##NAME(BINOP_TYPE *S) {                                      \
    TRY_TO(WalkUpFromBin##NAME(S));                                            \
    StmtQueueAction StmtQueue(*this);                                          \
    StmtQueue.queue(S->getLHS());                                              \
    StmtQueue.queue(S->getRHS());                                              \
    return true;                                                               \
  }                                                                            \
  bool WalkUpFromBin##NAME(BINOP_TYPE *S) {                                    \
    TRY_TO(WalkUpFrom##BINOP_TYPE(S));                                         \
    TRY_TO(VisitBin##NAME(S));                                                 \
    return true;                                                               \
  }                                                                            \
  bool VisitBin##NAME(BINOP_TYPE *S) { return true; }

Definition at line 306 of file DataRecursiveASTVisitor.h.

#define OPENMP_CLAUSE (   Name,
  Class 
)    bool Visit##Class(Class *C);

Definition at line 429 of file DataRecursiveASTVisitor.h.

#define OPENMP_CLAUSE (   Name,
  Class 
)
Value:
case OMPC_##Name:                                                            \
    TRY_TO(Visit##Class(static_cast<Class *>(C)));                             \
    break;

Definition at line 429 of file DataRecursiveASTVisitor.h.

#define OPERATOR (   NAME)
Value:
bool TraverseUnary##NAME(UnaryOperator *S) {                                 \
    TRY_TO(WalkUpFromUnary##NAME(S));                                          \
    StmtQueueAction StmtQueue(*this);                                          \
    StmtQueue.queue(S->getSubExpr());                                          \
    return true;                                                               \
  }                                                                            \
  bool WalkUpFromUnary##NAME(UnaryOperator *S) {                               \
    TRY_TO(WalkUpFromUnaryOperator(S));                                        \
    TRY_TO(VisitUnary##NAME(S));                                               \
    return true;                                                               \
  }                                                                            \
  bool VisitUnary##NAME(UnaryOperator *S) { return true; }

Definition at line 329 of file DataRecursiveASTVisitor.h.

#define OPERATOR (   NAME)    GENERAL_BINOP_FALLBACK(NAME, BinaryOperator)

Definition at line 329 of file DataRecursiveASTVisitor.h.

#define OPERATOR (   NAME)    GENERAL_BINOP_FALLBACK(NAME##Assign, CompoundAssignOperator)

Definition at line 329 of file DataRecursiveASTVisitor.h.

#define OPERATOR (   NAME)
Value:
case BO_##NAME:                                                              \
    DISPATCH_STMT(Bin##NAME, BinaryOperator, S);

Definition at line 329 of file DataRecursiveASTVisitor.h.

#define OPERATOR (   NAME)
Value:
case BO_##NAME##Assign:                                                      \
    DISPATCH_STMT(Bin##NAME##Assign, CompoundAssignOperator, S);

Definition at line 329 of file DataRecursiveASTVisitor.h.

#define OPERATOR (   NAME)
Value:
case UO_##NAME:                                                              \
    DISPATCH_STMT(Unary##NAME, UnaryOperator, S);

Definition at line 329 of file DataRecursiveASTVisitor.h.

#define RecursiveASTVisitor   DataRecursiveASTVisitor

Definition at line 64 of file DataRecursiveASTVisitor.h.

#define STMT (   CLASS,
  PARENT 
)    bool Traverse##CLASS(CLASS *S);

Definition at line 274 of file DataRecursiveASTVisitor.h.

#define STMT (   CLASS,
  PARENT 
)
Value:
bool WalkUpFrom##CLASS(CLASS *S) {                                           \
    TRY_TO(WalkUpFrom##PARENT(S));                                             \
    TRY_TO(Visit##CLASS(S));                                                   \
    return true;                                                               \
  }                                                                            \
  bool Visit##CLASS(CLASS *S) { return true; }

Definition at line 274 of file DataRecursiveASTVisitor.h.

#define STMT (   CLASS,
  PARENT 
)
Value:
case Stmt::CLASS##Class:                                                     \
    DISPATCH_STMT(CLASS, CLASS, S);

Definition at line 274 of file DataRecursiveASTVisitor.h.

#define TRY_TO (   CALL_EXPR)
#define TYPE (   CLASS,
  BASE 
)    bool Traverse##CLASS##Type(CLASS##Type *T);

Definition at line 382 of file DataRecursiveASTVisitor.h.

#define TYPE (   CLASS,
  BASE 
)
Value:
bool WalkUpFrom##CLASS##Type(CLASS##Type *T) {                               \
    TRY_TO(WalkUpFrom##BASE(T));                                               \
    TRY_TO(Visit##CLASS##Type(T));                                             \
    return true;                                                               \
  }                                                                            \
  bool Visit##CLASS##Type(CLASS##Type *T) { return true; }

Definition at line 382 of file DataRecursiveASTVisitor.h.

#define TYPE (   CLASS,
  BASE 
)
Value:
bool WalkUpFrom##CLASS##TypeLoc(CLASS##TypeLoc TL) {                         \
    TRY_TO(WalkUpFrom##BASE##Loc(TL));                                         \
    TRY_TO(Visit##CLASS##TypeLoc(TL));                                         \
    return true;                                                               \
  }                                                                            \
  bool Visit##CLASS##TypeLoc(CLASS##TypeLoc TL) { return true; }

Definition at line 382 of file DataRecursiveASTVisitor.h.

#define TYPE (   CLASS,
  BASE 
)
Value:
case Type::CLASS:                                                            \
    DISPATCH(CLASS##Type, CLASS##Type, const_cast<Type *>(T.getTypePtr()));

Definition at line 382 of file DataRecursiveASTVisitor.h.

#define TYPELOC (   CLASS,
  BASE 
)    bool Traverse##CLASS##TypeLoc(CLASS##TypeLoc TL);

Definition at line 362 of file DataRecursiveASTVisitor.h.

#define TYPELOC (   CLASS,
  BASE 
)
Value:
case TypeLoc::CLASS:                                                         \
    return getDerived().Traverse##CLASS##TypeLoc(TL.castAs<CLASS##TypeLoc>());

Definition at line 362 of file DataRecursiveASTVisitor.h.

#define UNARYOP_LIST ( )
Value:
OPERATOR(PostInc) OPERATOR(PostDec) OPERATOR(PreInc) OPERATOR(PreDec)        \
      OPERATOR(AddrOf) OPERATOR(Deref) OPERATOR(Plus) OPERATOR(Minus)          \
      OPERATOR(Not) OPERATOR(LNot) OPERATOR(Real) OPERATOR(Imag)               \
      OPERATOR(Extension)

Definition at line 41 of file DataRecursiveASTVisitor.h.

Referenced by clang::RecursiveASTVisitor< Derived >::TraverseStmt().

Definition at line 578 of file DataRecursiveASTVisitor.h.