clang: include/clang/AST/LexicallyOrderedRecursiveASTVisitor.h Source File (original) (raw)

1

2

3

4

5

6

7

8

9

10

11

12

13

14#ifndef LLVM_CLANG_AST_LEXICALLYORDEREDRECURSIVEASTVISITOR_H

15#define LLVM_CLANG_AST_LEXICALLYORDEREDRECURSIVEASTVISITOR_H

16

20#include "llvm/Support/SaveAndRestore.h"

21

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58template

62

63public:

65

67

68

69

70 bool Result = BaseType::TraverseObjCImplementationDecl(D);

71 return TraverseAdditionalLexicallyNestedDeclarations() ? Result : false;

72 }

73

75 bool Result = BaseType::TraverseObjCCategoryImplDecl(D);

76 return TraverseAdditionalLexicallyNestedDeclarations() ? Result : false;

77 }

78

80 if (!DC)

81 return true;

82

84 Decl *Child = *I;

86 ++I;

87 continue;

88 }

92 return false;

93 ++I;

94 continue;

95 }

96

97

98 LexicallyNestedDeclarations.clear();

99 for (++I; I != E; ++I) {

100 Decl *Sibling = *I;

101 if (!SM.isBeforeInTranslationUnit(Sibling->getBeginLoc(),

102 Child->getEndLoc()))

103 break;

105 LexicallyNestedDeclarations.push_back(Sibling);

106 }

108 return false;

109 }

110 return true;

111 }

112

114

117 bool Swap;

118

119

121 case OO_Arrow:

122 case OO_Call:

123 case OO_Subscript:

124 Swap = true;

125 break;

126 case OO_PlusPlus:

127 case OO_MinusMinus:

128

130 break;

131 default:

133 break;

134 }

135 if (Swap && Children.size() > 1)

138 }

139

140private:

141 bool TraverseAdditionalLexicallyNestedDeclarations() {

142

143

144

145

146

148 "post-order traversal is not supported for lexically ordered "

149 "recursive ast visitor");

150 for (Decl *D : LexicallyNestedDeclarations) {

152 return false;

153 }

154 return true;

155 }

156

157 const SourceManager &SM;

158 llvm::SmallVector<Decl *, 8> LexicallyNestedDeclarations;

159};

160

161}

162

163#endif

SmallVector< AnnotatedLine *, 1 > Children

If this token starts a block, this contains all the unwrapped lines in it.

Forward-declares and imports various common LLVM datatypes that clang wants to use unqualified.

Defines the SourceManager interface.

A call to an overloaded operator written using operator syntax.

bool isInfixBinaryOp() const

Is this written as an infix binary operator?

OverloadedOperatorKind getOperator() const

Returns the kind of overloaded operator that this expression refers to.

DeclContext - This is used only as base class of specific decl types that can act as declaration cont...

decl_iterator decls_end() const

decl_iterator decls_begin() const

Decl - This represents one declaration (or definition), e.g.

SourceLocation getBeginLoc() const LLVM_READONLY

bool TraverseObjCImplementationDecl(ObjCImplementationDecl *D)

Definition LexicallyOrderedRecursiveASTVisitor.h:66

LexicallyOrderedRecursiveASTVisitor(const SourceManager &SM)

Definition LexicallyOrderedRecursiveASTVisitor.h:64

SmallVector< Stmt *, 8 > getStmtChildren(CXXOperatorCallExpr *CE)

Definition LexicallyOrderedRecursiveASTVisitor.h:115

bool TraverseDeclContextHelper(DeclContext *DC)

Definition LexicallyOrderedRecursiveASTVisitor.h:79

bool TraverseObjCCategoryImplDecl(ObjCCategoryImplDecl *D)

Definition LexicallyOrderedRecursiveASTVisitor.h:74

Stmt::child_range getStmtChildren(Stmt *S)

Definition LexicallyOrderedRecursiveASTVisitor.h:113

ObjCCategoryImplDecl - An object of this class encapsulates a category @implementation declaration.

ObjCImplementationDecl - Represents a class definition - this is where method definitions are specifi...

A class that does preorder or postorder depth-first traversal on the entire Clang AST and visits each...

bool canIgnoreChildDeclWhileTraversingDeclContext(const Decl *Child)

bool TraverseDecl(Decl *D)

Recursively visit a declaration, by dispatching to Traverse*Decl() based on the argument's dynamic ty...

bool shouldTraversePostOrder() const

Return whether this visitor should traverse post-order.

Derived & getDerived()

Return a reference to the derived class.

This class handles loading and caching of source files into memory.

Stmt - This represents one statement.

llvm::iterator_range< child_iterator > child_range

The JSON file list parser is used to communicate input to InstallAPI.

bool isa(CodeGen::Address addr)

@ Result

The result type of a method or function.