<div dir="ltr"><br><div class="gmail_extra"><br><br><div class="gmail_quote">On Tue, May 20, 2014 at 1:17 PM, Daniel Jasper <span dir="ltr"><<a href="mailto:djasper@google.com" target="_blank">djasper@google.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">I personally don't care either way. Just wanted to shed some light on how clang-format does things and how it fails to understand the two columns of weird macro invocations with no structuring semicolons.</div>
</blockquote><div><br></div><div>Do we have any documentation for these sorts of tricks?</div><div><br></div><div>-- Sean Silva</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div class="gmail_extra"><br><br><div class="gmail_quote"><div><div class="h5">On Tue, May 20, 2014 at 8:57 PM, Alp Toker <span dir="ltr"><<a href="mailto:alp@nuanti.com" target="_blank">alp@nuanti.com</a>></span> wrote:<br>
</div></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div class="h5">
<br>
On 19/05/2014 10:15, Daniel Jasper wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
<br>
<br>
On Sun, May 18, 2014 at 8:38 PM, Alp Toker <<a href="mailto:alp@nuanti.com" target="_blank">alp@nuanti.com</a> <mailto:<a href="mailto:alp@nuanti.com" target="_blank">alp@nuanti.com</a>>> wrote:<br>
<br>
Author: alp<br>
Date: Sun May 18 13:38:19 2014<br>
New Revision: 209092<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=209092&view=rev" target="_blank">http://llvm.org/viewvc/llvm-<u></u>project?rev=209092&view=rev</a><br>
Log:<br>
Format the two RecursiveASTVisitors<br>
<br>
Apply current ToT clang-format on the two RAVs to reduce delta and<br>
help<br>
identify differences between the two.<br>
<br>
We lose a little pretty formatting in the headers but that's the<br>
price to pay<br>
so we can diff these two files effectively and look to a future<br>
where we don't<br>
have to maintain two copies of this code.<br>
<br>
Formatting and whitespace only.<br>
<br>
Modified:<br>
cfe/trunk/include/clang/AST/<u></u>DataRecursiveASTVisitor.h<br>
cfe/trunk/include/clang/AST/<u></u>RecursiveASTVisitor.h<br>
<br>
Modified: cfe/trunk/include/clang/AST/<u></u>DataRecursiveASTVisitor.h<br>
URL:<br>
<a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/DataRecursiveASTVisitor.h?rev=209092&r1=209091&r2=209092&view=diff" target="_blank">http://llvm.org/viewvc/llvm-<u></u>project/cfe/trunk/include/<u></u>clang/AST/<u></u>DataRecursiveASTVisitor.h?rev=<u></u>209092&r1=209091&r2=209092&<u></u>view=diff</a><br>
==============================<u></u>==============================<u></u>==================<br>
--- cfe/trunk/include/clang/AST/<u></u>DataRecursiveASTVisitor.h (original)<br>
+++ cfe/trunk/include/clang/AST/<u></u>DataRecursiveASTVisitor.h Sun May<br>
18 13:38:19 2014<br>
@@ -38,34 +38,24 @@<br>
// using them is responsible for defining macro OPERATOR().<br>
<br>
// All unary operators.<br>
-#define UNARYOP_LIST() \<br>
- OPERATOR(PostInc) OPERATOR(PostDec) \<br>
- OPERATOR(PreInc) OPERATOR(PreDec) \<br>
- OPERATOR(AddrOf) OPERATOR(Deref) \<br>
- OPERATOR(Plus) OPERATOR(Minus) \<br>
- OPERATOR(Not) OPERATOR(LNot) \<br>
- OPERATOR(Real) OPERATOR(Imag) \<br>
- OPERATOR(Extension)<br>
+#define UNARYOP_LIST() \<br>
+ OPERATOR(PostInc) OPERATOR(PostDec) OPERATOR(PreInc)<br>
OPERATOR(PreDec) \<br>
+ OPERATOR(AddrOf) OPERATOR(Deref) OPERATOR(Plus)<br>
OPERATOR(Minus) \<br>
+ OPERATOR(Not) OPERATOR(LNot) OPERATOR(Real) OPERATOR(Imag)<br>
\<br>
+ OPERATOR(Extension)<br>
<br>
<br>
If you put them one per line, clang-format understands that these are macro invocations and leaves them one per line. Might be more readable.<br>
</blockquote>
<br>
I've attached the patch putting them one per line but the jury's out on whether it's a worthwhile improvement.<br>
<br>
What do you think? Give a nod and I'm fine to commit.<br>
<br>
(We can always tweak this or go back to hand-formatting if there's demand once the files are unified.)<br>
<br>
Alp.<br>
<br>
</div></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div class="h5">
// All binary operators (excluding compound assign operators).<br>
-#define BINOP_LIST() \<br>
- OPERATOR(PtrMemD) OPERATOR(PtrMemI) \<br>
- OPERATOR(Mul) OPERATOR(Div) OPERATOR(Rem) \<br>
- OPERATOR(Add) OPERATOR(Sub) OPERATOR(Shl) \<br>
- OPERATOR(Shr) \<br>
- \<br>
- OPERATOR(LT) OPERATOR(GT) OPERATOR(LE) \<br>
- OPERATOR(GE) OPERATOR(EQ) OPERATOR(NE) \<br>
- OPERATOR(And) OPERATOR(Xor) OPERATOR(Or) \<br>
- OPERATOR(LAnd) OPERATOR(LOr) \<br>
- \<br>
- OPERATOR(Assign) \<br>
- OPERATOR(Comma)<br>
+#define BINOP_LIST() \<br>
+ OPERATOR(PtrMemD) OPERATOR(PtrMemI) OPERATOR(Mul) OPERATOR(Div)<br>
\<br>
+ OPERATOR(Rem) OPERATOR(Add) OPERATOR(Sub) OPERATOR(Shl)<br>
OPERATOR(Shr) \<br>
+ OPERATOR(LT) OPERATOR(GT) OPERATOR(LE) OPERATOR(GE)<br>
OPERATOR(EQ) \<br>
+ OPERATOR(NE) OPERATOR(And) OPERATOR(Xor) OPERATOR(Or)<br>
OPERATOR(LAnd) \<br>
+ OPERATOR(LOr) OPERATOR(Assign) OPERATOR(Comma)<br>
<br>
// All compound assign operators.<br>
-#define CAO_LIST() \<br>
- OPERATOR(Mul) OPERATOR(Div) OPERATOR(Rem) OPERATOR(Add)<br>
OPERATOR(Sub) \<br>
- OPERATOR(Shl) OPERATOR(Shr) OPERATOR(And) OPERATOR(Or)<br>
OPERATOR(Xor)<br>
+#define CAO_LIST() \<br>
+ OPERATOR(Mul) OPERATOR(Div) OPERATOR(Rem) OPERATOR(Add)<br>
OPERATOR(Sub) \<br>
+ OPERATOR(Shl) OPERATOR(Shr) OPERATOR(And) OPERATOR(Or)<br>
OPERATOR(Xor)<br>
<br>
namespace clang {<br>
<br>
@@ -77,8 +67,11 @@ namespace clang {<br>
// invokes CALL_EXPR, which must be a method call, on the derived<br>
// object (s.t. a user of RecursiveASTVisitor can override the method<br>
// in CALL_EXPR).<br>
-#define TRY_TO(CALL_EXPR) \<br>
- do { if (!getDerived().CALL_EXPR) return false; } while (0)<br>
+#define TRY_TO(CALL_EXPR) \<br>
+ do { \<br>
+ if (!getDerived().CALL_EXPR) \<br>
+ return false; \<br>
+ } while (0)<br>
<br>
/// \brief A class that does preorder depth-first traversal on the<br>
/// entire Clang AST and visits each node.<br>
@@ -144,11 +137,10 @@ namespace clang {<br>
/// to return true, in which case all known implicit and explicit<br>
/// instantiations will be visited at the same time as the pattern<br>
/// from which they were produced.<br>
-template<typename Derived><br>
-class RecursiveASTVisitor {<br>
+template <typename Derived> class RecursiveASTVisitor {<br>
public:<br>
/// \brief Return a reference to the derived class.<br>
- Derived &getDerived() { return *static_cast<Derived*>(this); }<br>
+ Derived &getDerived() { return *static_cast<Derived *>(this); }<br>
<br>
/// \brief Return whether this visitor should recurse into<br>
/// template instantiations.<br>
@@ -255,114 +247,111 @@ public:<br>
// \brief Visit an attribute.<br>
bool VisitAttr(Attr *A) { return true; }<br>
<br>
- // Declare Traverse* and empty Visit* for all Attr classes.<br>
+// Declare Traverse* and empty Visit* for all Attr classes.<br>
#define ATTR_VISITOR_DECLS_ONLY<br>
#include "clang/AST/AttrVisitor.inc"<br>
#undef ATTR_VISITOR_DECLS_ONLY<br>
<br>
- // ---- Methods on Stmts ----<br>
+// ---- Methods on Stmts ----<br>
<br>
- // Declare Traverse*() for all concrete Stmt classes.<br>
+// Declare Traverse*() for all concrete Stmt classes.<br>
#define ABSTRACT_STMT(STMT)<br>
-#define STMT(CLASS, PARENT) \<br>
- bool Traverse##CLASS(CLASS *S);<br>
+#define STMT(CLASS, PARENT) bool Traverse##CLASS(CLASS *S);<br>
#include "clang/AST/StmtNodes.inc"<br>
// The above header #undefs ABSTRACT_STMT and STMT upon exit.<br>
<br>
// Define WalkUpFrom*() and empty Visit*() for all Stmt classes.<br>
bool WalkUpFromStmt(Stmt *S) { return getDerived().VisitStmt(S); }<br>
bool VisitStmt(Stmt *S) { return true; }<br>
-#define STMT(CLASS, PARENT) \<br>
- bool WalkUpFrom##CLASS(CLASS *S) { \<br>
- TRY_TO(WalkUpFrom##PARENT(S)); \<br>
- TRY_TO(Visit##CLASS(S)); \<br>
- return true; \<br>
- } \<br>
+#define STMT(CLASS, PARENT) \<br>
+ bool WalkUpFrom##CLASS(CLASS *S) { \<br>
+ TRY_TO(WalkUpFrom##PARENT(S)); \<br>
+ TRY_TO(Visit##CLASS(S)); \<br>
+ return true; \<br>
+ } \<br>
bool Visit##CLASS(CLASS *S) { return true; }<br>
#include "clang/AST/StmtNodes.inc"<br>
<br>
- // Define Traverse*(), WalkUpFrom*(), and Visit*() for unary<br>
- // operator methods. Unary operators are not classes in themselves<br>
- // (they're all opcodes in UnaryOperator) but do have visitors.<br>
-#define OPERATOR(NAME) \<br>
- bool TraverseUnary##NAME(<u></u>UnaryOperator *S) { \<br>
- TRY_TO(WalkUpFromUnary##NAME(<u></u>S)); \<br>
- StmtQueueAction StmtQueue(*this); \<br>
- StmtQueue.queue(S->getSubExpr(<u></u>)); \<br>
- return true; \<br>
- } \<br>
- bool WalkUpFromUnary##NAME(<u></u>UnaryOperator *S) { \<br>
- TRY_TO(<u></u>WalkUpFromUnaryOperator(S)); \<br>
- TRY_TO(VisitUnary##NAME(S)); \<br>
- return true; \<br>
- } \<br>
+// Define Traverse*(), WalkUpFrom*(), and Visit*() for unary<br>
+// operator methods. Unary operators are not classes in themselves<br>
+// (they're all opcodes in UnaryOperator) but do have visitors.<br>
+#define OPERATOR(NAME) \<br>
+ bool TraverseUnary##NAME(<u></u>UnaryOperator *S) { \<br>
+ TRY_TO(WalkUpFromUnary##NAME(<u></u>S)); \<br>
+ StmtQueueAction StmtQueue(*this); \<br>
+ StmtQueue.queue(S->getSubExpr(<u></u>)); \<br>
+ return true; \<br>
+ } \<br>
+ bool WalkUpFromUnary##NAME(<u></u>UnaryOperator *S) { \<br>
+ TRY_TO(<u></u>WalkUpFromUnaryOperator(S)); \<br>
+ TRY_TO(VisitUnary##NAME(S)); \<br>
+ return true; \<br>
+ } \<br>
bool VisitUnary##NAME(UnaryOperator *S) { return true; }<br>
<br>
UNARYOP_LIST()<br>
#undef OPERATOR<br>
<br>
- // Define Traverse*(), WalkUpFrom*(), and Visit*() for binary<br>
- // operator methods. Binary operators are not classes in<br>
themselves<br>
- // (they're all opcodes in BinaryOperator) but do have visitors.<br>
-#define GENERAL_BINOP_FALLBACK(NAME, BINOP_TYPE) \<br>
- bool TraverseBin##NAME(BINOP_TYPE *S) { \<br>
- TRY_TO(WalkUpFromBin##NAME(S))<u></u>; \<br>
- StmtQueueAction StmtQueue(*this); \<br>
- StmtQueue.queue(S->getLHS()); \<br>
- StmtQueue.queue(S->getRHS()); \<br>
- return true; \<br>
- } \<br>
- bool WalkUpFromBin##NAME(BINOP_TYPE *S) { \<br>
- TRY_TO(WalkUpFrom##BINOP_TYPE(<u></u>S)); \<br>
- TRY_TO(VisitBin##NAME(S)); \<br>
- return true; \<br>
- } \<br>
+// Define Traverse*(), WalkUpFrom*(), and Visit*() for binary<br>
+// operator methods. Binary operators are not classes in themselves<br>
+// (they're all opcodes in BinaryOperator) but do have visitors.<br>
+#define GENERAL_BINOP_FALLBACK(NAME, BINOP_TYPE) \<br>
+ bool TraverseBin##NAME(BINOP_TYPE *S) { \<br>
+ TRY_TO(WalkUpFromBin##NAME(S))<u></u>; \<br>
+ StmtQueueAction StmtQueue(*this); \<br>
+ StmtQueue.queue(S->getLHS()); \<br>
+ StmtQueue.queue(S->getRHS()); \<br>
+ return true; \<br>
+ } \<br>
+ bool WalkUpFromBin##NAME(BINOP_TYPE *S) { \<br>
+ TRY_TO(WalkUpFrom##BINOP_TYPE(<u></u>S)); \<br>
+ TRY_TO(VisitBin##NAME(S)); \<br>
+ return true; \<br>
+ } \<br>
bool VisitBin##NAME(BINOP_TYPE *S) { return true; }<br>
<br>
#define OPERATOR(NAME) GENERAL_BINOP_FALLBACK(NAME, BinaryOperator)<br>
BINOP_LIST()<br>
#undef OPERATOR<br>
<br>
- // Define Traverse*(), WalkUpFrom*(), and Visit*() for compound<br>
- // assignment methods. Compound assignment operators are not<br>
- // classes in themselves (they're all opcodes in<br>
- // CompoundAssignOperator) but do have visitors.<br>
-#define OPERATOR(NAME) \<br>
+// Define Traverse*(), WalkUpFrom*(), and Visit*() for compound<br>
+// assignment methods. Compound assignment operators are not<br>
+// classes in themselves (they're all opcodes in<br>
+// CompoundAssignOperator) but do have visitors.<br>
+#define OPERATOR(NAME) \<br>
GENERAL_BINOP_FALLBACK(NAME##<u></u>Assign, CompoundAssignOperator)<br>
<br>
CAO_LIST()<br>
#undef OPERATOR<br>
#undef GENERAL_BINOP_FALLBACK<br>
<br>
- // ---- Methods on Types ----<br>
- // FIXME: revamp to take TypeLoc's rather than Types.<br>
+// ---- Methods on Types ----<br>
+// FIXME: revamp to take TypeLoc's rather than Types.<br>
<br>
- // Declare Traverse*() for all concrete Type classes.<br>
+// Declare Traverse*() for all concrete Type classes.<br>
#define ABSTRACT_TYPE(CLASS, BASE)<br>
-#define TYPE(CLASS, BASE) \<br>
- bool Traverse##CLASS##Type(CLASS##<u></u>Type *T);<br>
+#define TYPE(CLASS, BASE) bool Traverse##CLASS##Type(CLASS##<u></u>Type *T);<br>
#include "clang/AST/TypeNodes.def"<br>
// The above header #undefs ABSTRACT_TYPE and TYPE upon exit.<br>
<br>
// Define WalkUpFrom*() and empty Visit*() for all Type classes.<br>
bool WalkUpFromType(Type *T) { return getDerived().VisitType(T); }<br>
bool VisitType(Type *T) { return true; }<br>
-#define TYPE(CLASS, BASE) \<br>
- bool WalkUpFrom##CLASS##Type(CLASS#<u></u>#Type *T) { \<br>
- TRY_TO(WalkUpFrom##BASE(T)); \<br>
- TRY_TO(Visit##CLASS##Type(T)); \<br>
- return true; \<br>
- } \<br>
+#define TYPE(CLASS, BASE) \<br>
+ bool WalkUpFrom##CLASS##Type(CLASS#<u></u>#Type *T) { \<br>
+ TRY_TO(WalkUpFrom##BASE(T)); \<br>
+ TRY_TO(Visit##CLASS##Type(T)); \<br>
+ return true; \<br>
+ } \<br>
bool Visit##CLASS##Type(CLASS##Type *T) { return true; }<br>
#include "clang/AST/TypeNodes.def"<br>
<br>
- // ---- Methods on TypeLocs ----<br>
- // FIXME: this currently just calls the matching Type methods<br>
+// ---- Methods on TypeLocs ----<br>
+// FIXME: this currently just calls the matching Type methods<br>
<br>
- // Declare Traverse*() for all concrete Type classes.<br>
+// Declare Traverse*() for all concrete Type classes.<br>
#define ABSTRACT_TYPELOC(CLASS, BASE)<br>
-#define TYPELOC(CLASS, BASE) \<br>
- bool Traverse##CLASS##TypeLoc(<u></u>CLASS##TypeLoc TL);<br>
+#define TYPELOC(CLASS, BASE) bool<br>
Traverse##CLASS##TypeLoc(<u></u>CLASS##TypeLoc TL);<br>
#include "clang/AST/TypeLocNodes.def"<br>
// The above header #undefs ABSTRACT_TYPELOC and TYPELOC upon exit.<br>
<br>
@@ -381,34 +370,33 @@ public:<br>
}<br>
bool VisitUnqualTypeLoc(<u></u>UnqualTypeLoc TL) { return true; }<br>
<br>
- // Note that BASE includes trailing 'Type' which CLASS doesn't.<br>
-#define TYPE(CLASS, BASE) \<br>
- bool WalkUpFrom##CLASS##TypeLoc(<u></u>CLASS##TypeLoc TL) { \<br>
- TRY_TO(WalkUpFrom##BASE##Loc(<u></u>TL)); \<br>
- TRY_TO(Visit##CLASS##TypeLoc(<u></u>TL)); \<br>
- return true; \<br>
- } \<br>
+// Note that BASE includes trailing 'Type' which CLASS doesn't.<br>
+#define TYPE(CLASS, BASE) \<br>
+ bool WalkUpFrom##CLASS##TypeLoc(<u></u>CLASS##TypeLoc TL) { \<br>
+ TRY_TO(WalkUpFrom##BASE##Loc(<u></u>TL)); \<br>
+ TRY_TO(Visit##CLASS##TypeLoc(<u></u>TL)); \<br>
+ return true; \<br>
+ } \<br>
bool Visit##CLASS##TypeLoc(CLASS##<u></u>TypeLoc TL) { return true; }<br>
#include "clang/AST/TypeNodes.def"<br>
<br>
- // ---- Methods on Decls ----<br>
+// ---- Methods on Decls ----<br>
<br>
- // Declare Traverse*() for all concrete Decl classes.<br>
+// Declare Traverse*() for all concrete Decl classes.<br>
#define ABSTRACT_DECL(DECL)<br>
-#define DECL(CLASS, BASE) \<br>
- bool Traverse##CLASS##Decl(CLASS##<u></u>Decl *D);<br>
+#define DECL(CLASS, BASE) bool Traverse##CLASS##Decl(CLASS##<u></u>Decl *D);<br>
#include "clang/AST/DeclNodes.inc"<br>
// The above header #undefs ABSTRACT_DECL and DECL upon exit.<br>
<br>
// Define WalkUpFrom*() and empty Visit*() for all Decl classes.<br>
bool WalkUpFromDecl(Decl *D) { return getDerived().VisitDecl(D); }<br>
bool VisitDecl(Decl *D) { return true; }<br>
-#define DECL(CLASS, BASE) \<br>
- bool WalkUpFrom##CLASS##Decl(CLASS#<u></u>#Decl *D) { \<br>
- TRY_TO(WalkUpFrom##BASE(D)); \<br>
- TRY_TO(Visit##CLASS##Decl(D)); \<br>
- return true; \<br>
- } \<br>
+#define DECL(CLASS, BASE) \<br>
+ bool WalkUpFrom##CLASS##Decl(CLASS#<u></u>#Decl *D) { \<br>
+ TRY_TO(WalkUpFrom##BASE(D)); \<br>
+ TRY_TO(Visit##CLASS##Decl(D)); \<br>
+ return true; \<br>
+ } \<br>
bool Visit##CLASS##Decl(CLASS##Decl *D) { return true; }<br>
#include "clang/AST/DeclNodes.inc"<br>
<br>
@@ -417,7 +405,7 @@ private:<br>
bool TraverseTemplateParameterListH<u></u>elper(TemplateParameterList<br>
*TPL);<br>
bool TraverseClassInstantiations(<u></u>ClassTemplateDecl *D);<br>
bool TraverseVariableInstantiations<u></u>(VarTemplateDecl *D);<br>
- bool TraverseFunctionInstantiations<u></u>(FunctionTemplateDecl *D) ;<br>
+ bool TraverseFunctionInstantiations<u></u>(FunctionTemplateDecl *D);<br>
bool TraverseTemplateArgumentLocsHe<u></u>lper(const<br>
TemplateArgumentLoc *TAL,<br>
unsigned Count);<br>
bool TraverseArrayTypeLocHelper(<u></u>ArrayTypeLoc TL);<br>
@@ -429,27 +417,24 @@ private:<br>
bool TraverseVarHelper(VarDecl *D);<br>
bool TraverseOMPClause(OMPClause *C);<br>
bool TraverseOMPExecutableDirective<u></u>(OMPExecutableDirective *S);<br>
-#define OPENMP_CLAUSE(Name, Class) \<br>
- bool Visit##Class(Class *C);<br>
+#define OPENMP_CLAUSE(Name, Class) bool Visit##Class(Class *C);<br>
#include "clang/Basic/OpenMPKinds.def"<br>
/// \brief Process clauses with list of variables.<br>
- template <typename T><br>
- void VisitOMPClauseList(T *Node);<br>
+ template <typename T> void VisitOMPClauseList(T *Node);<br>
<br>
typedef SmallVector<Stmt *, 16> StmtsTy;<br>
typedef SmallVector<StmtsTy *, 4> QueuesTy;<br>
-<br>
+<br>
QueuesTy Queues;<br>
<br>
class NewQueueRAII {<br>
RecursiveASTVisitor &RAV;<br>
+<br>
public:<br>
NewQueueRAII(StmtsTy &queue, RecursiveASTVisitor &RAV) :<br>
RAV(RAV) {<br>
RAV.Queues.push_back(&queue);<br>
}<br>
- ~NewQueueRAII() {<br>
- RAV.Queues.pop_back();<br>
- }<br>
+ ~NewQueueRAII() { RAV.Queues.pop_back(); }<br>
};<br>
<br>
StmtsTy &getCurrentQueue() {<br>
@@ -460,20 +445,19 @@ private:<br>
public:<br>
class StmtQueueAction {<br>
StmtsTy &CurrQueue;<br>
+<br>
public:<br>
explicit StmtQueueAction(<u></u>RecursiveASTVisitor &RAV)<br>
- : CurrQueue(RAV.getCurrentQueue(<u></u>)) { }<br>
+ : CurrQueue(RAV.getCurrentQueue(<u></u>)) {}<br>
<br>
- void queue(Stmt *S) {<br>
- CurrQueue.push_back(S);<br>
- }<br>
+ void queue(Stmt *S) { CurrQueue.push_back(S); }<br>
};<br>
};<br>
<br>
-#define DISPATCH(NAME, CLASS, VAR) \<br>
- return getDerived().Traverse##NAME(<u></u>static_cast<CLASS*>(VAR))<br>
+#define DISPATCH(NAME, CLASS, VAR) \<br>
+ return getDerived().Traverse##NAME(<u></u>static_cast<CLASS *>(VAR))<br>
<br>
-template<typename Derived><br>
+template <typename Derived><br>
bool RecursiveASTVisitor<Derived>::<u></u>TraverseStmt(Stmt *S) {<br>
if (!S)<br>
return true;<br>
@@ -489,84 +473,89 @@ bool RecursiveASTVisitor<Derived>::<u></u>Trave<br>
<br>
StmtsToEnqueu.clear();<br>
<br>
-#define DISPATCH_STMT(NAME, CLASS, VAR) \<br>
- TRY_TO(Traverse##NAME(static_<u></u>cast<CLASS*>(VAR))); break<br>
+#define DISPATCH_STMT(NAME, CLASS, VAR) \<br>
+ TRY_TO(Traverse##NAME(static_<u></u>cast<CLASS *>(VAR))); \<br>
+ break<br>
<br>
// If we have a binary expr, dispatch to the subcode of the<br>
binop. A smart<br>
// optimizer (e.g. LLVM) will fold this comparison into the<br>
switch stmt<br>
// below.<br>
if (BinaryOperator *BinOp = dyn_cast<BinaryOperator>(S)) {<br>
switch (BinOp->getOpcode()) {<br>
-#define OPERATOR(NAME) \<br>
- case BO_##NAME: DISPATCH_STMT(Bin##NAME, BinaryOperator, S);<br>
-<br>
- BINOP_LIST()<br>
+#define OPERATOR(NAME) \<br>
+ case BO_##NAME: \<br>
+ DISPATCH_STMT(Bin##NAME, BinaryOperator, S);<br>
+<br>
+ BINOP_LIST()<br>
#undef OPERATOR<br>
#undef BINOP_LIST<br>
-<br>
-#define OPERATOR(NAME) \<br>
- case BO_##NAME##Assign: \<br>
- DISPATCH_STMT(Bin##NAME##<u></u>Assign, CompoundAssignOperator, S);<br>
-<br>
- CAO_LIST()<br>
+<br>
+#define OPERATOR(NAME) \<br>
+ case BO_##NAME##Assign: \<br>
+ DISPATCH_STMT(Bin##NAME##<u></u>Assign, CompoundAssignOperator, S);<br>
+<br>
+ CAO_LIST()<br>
#undef OPERATOR<br>
#undef CAO_LIST<br>
}<br>
} else if (UnaryOperator *UnOp = dyn_cast<UnaryOperator>(S)) {<br>
switch (UnOp->getOpcode()) {<br>
-#define OPERATOR(NAME) \<br>
- case UO_##NAME: DISPATCH_STMT(Unary##NAME, UnaryOperator, S);<br>
-<br>
- UNARYOP_LIST()<br>
+#define OPERATOR(NAME) \<br>
+ case UO_##NAME: \<br>
+ DISPATCH_STMT(Unary##NAME, UnaryOperator, S);<br>
+<br>
+ UNARYOP_LIST()<br>
#undef OPERATOR<br>
#undef UNARYOP_LIST<br>
}<br>
} else {<br>
-<br>
+<br>
// Top switch stmt: dispatch to TraverseFooStmt for each<br>
concrete FooStmt.<br>
switch (S->getStmtClass()) {<br>
- case Stmt::NoStmtClass: break;<br>
+ case Stmt::NoStmtClass:<br>
+ break;<br>
#define ABSTRACT_STMT(STMT)<br>
-#define STMT(CLASS, PARENT) \<br>
- case Stmt::CLASS##Class: DISPATCH_STMT(CLASS, CLASS, S);<br>
+#define STMT(CLASS, PARENT) \<br>
+ case Stmt::CLASS##Class: \<br>
+ DISPATCH_STMT(CLASS, CLASS, S);<br>
#include "clang/AST/StmtNodes.inc"<br>
}<br>
}<br>
<br>
- for (SmallVectorImpl<Stmt *>::reverse_iterator<br>
- RI = StmtsToEnqueu.rbegin(),<br>
- RE = StmtsToEnqueu.rend(); RI != RE; ++RI)<br>
+ for (SmallVectorImpl<Stmt *>::reverse_iterator RI =<br>
StmtsToEnqueu.rbegin(),<br>
+ RE =<br>
StmtsToEnqueu.rend();<br>
+ RI != RE; ++RI)<br>
Queue.push_back(*RI);<br>
}<br>
<br>
return true;<br>
}<br>
<br>
-template<typename Derived><br>
+template <typename Derived><br>
bool RecursiveASTVisitor<Derived>::<u></u>TraverseType(QualType T) {<br>
if (T.isNull())<br>
return true;<br>
<br>
switch (T->getTypeClass()) {<br>
#define ABSTRACT_TYPE(CLASS, BASE)<br>
-#define TYPE(CLASS, BASE) \<br>
- case Type::CLASS: DISPATCH(CLASS##Type, CLASS##Type, \<br>
- const_cast<Type*>(T.<u></u>getTypePtr()));<br>
+#define TYPE(CLASS, BASE) \<br>
+ case Type::CLASS: \<br>
+ DISPATCH(CLASS##Type, CLASS##Type, const_cast<Type<br>
*>(T.getTypePtr()));<br>
#include "clang/AST/TypeNodes.def"<br>
}<br>
<br>
return true;<br>
}<br>
<br>
-template<typename Derived><br>
+template <typename Derived><br>
bool RecursiveASTVisitor<Derived>::<u></u>TraverseTypeLoc(TypeLoc TL) {<br>
if (TL.isNull())<br>
return true;<br>
<br>
switch (TL.getTypeLocClass()) {<br>
#define ABSTRACT_TYPELOC(CLASS, BASE)<br>
-#define TYPELOC(CLASS, BASE) \<br>
- case TypeLoc::CLASS: \<br>
+#define TYPELOC(CLASS, BASE) \<br>
+ case TypeLoc::CLASS: \<br>
return<br>
getDerived().Traverse##CLASS##<u></u>TypeLoc(TL.castAs<CLASS##<u></u>TypeLoc>());<br>
#include "clang/AST/TypeLocNodes.def"<br>
}<br>
@@ -574,13 +563,12 @@ bool RecursiveASTVisitor<Derived>::<u></u>Trave<br>
return true;<br>
}<br>
<br>
-<br>
// Define the Traverse*Attr(Attr* A) methods<br>
#define VISITORCLASS RecursiveASTVisitor<br>
#include "clang/AST/AttrVisitor.inc"<br>
#undef VISITORCLASS<br>
<br>
-template<typename Derived><br>
+template <typename Derived><br>
bool RecursiveASTVisitor<Derived>::<u></u>TraverseDecl(Decl *D) {<br>
if (!D)<br>
return true;<br>
@@ -593,10 +581,10 @@ bool RecursiveASTVisitor<Derived>::<u></u>Trave<br>
<br>
switch (D->getKind()) {<br>
#define ABSTRACT_DECL(DECL)<br>
-#define DECL(CLASS, BASE) \<br>
- case Decl::CLASS: \<br>
- if<br>
(!getDerived().Traverse##<u></u>CLASS##Decl(static_cast<CLASS#<u></u>#Decl*>(D))) \<br>
- return false; \<br>
+#define DECL(CLASS, BASE) \<br>
+ case Decl::CLASS: \<br>
+ if<br>
(!getDerived().Traverse##<u></u>CLASS##Decl(static_cast<CLASS#<u></u>#Decl<br>
*>(D))) \<br>
+ return false; \<br>
break;<br>
#include "clang/AST/DeclNodes.inc"<br>
}<br>
@@ -611,9 +599,9 @@ bool RecursiveASTVisitor<Derived>::<u></u>Trave<br>
<br>
#undef DISPATCH<br>
<br>
-template<typename Derived><br>
+template <typename Derived><br>
bool RecursiveASTVisitor<Derived>::<u></u>TraverseNestedNameSpecifier(<br>
- NestedNameSpecifier *NNS) {<br>
+ NestedNameSpecifier *NNS) {<br>
if (!NNS)<br>
return true;<br>
<br>
@@ -635,14 +623,14 @@ bool RecursiveASTVisitor<Derived>::<u></u>Trave<br>
return true;<br>
}<br>
<br>
-template<typename Derived><br>
+template <typename Derived><br>
bool RecursiveASTVisitor<Derived>::<u></u>TraverseNestedNameSpecifierLoc<u></u>(<br>
- NestedNameSpecifierLoc NNS) {<br>
+ NestedNameSpecifierLoc NNS) {<br>
if (!NNS)<br>
return true;<br>
<br>
- if (NestedNameSpecifierLoc Prefix = NNS.getPrefix())<br>
- TRY_TO(<u></u>TraverseNestedNameSpecifierLoc<u></u>(Prefix));<br>
+ if (NestedNameSpecifierLoc Prefix = NNS.getPrefix())<br>
+ TRY_TO(<u></u>TraverseNestedNameSpecifierLoc<u></u>(Prefix));<br>
<br>
switch (NNS.getNestedNameSpecifier()-<u></u>>getKind()) {<br>
case NestedNameSpecifier::<u></u>Identifier:<br>
@@ -660,9 +648,9 @@ bool RecursiveASTVisitor<Derived>::<u></u>Trave<br>
return true;<br>
}<br>
<br>
-template<typename Derived><br>
+template <typename Derived><br>
bool RecursiveASTVisitor<Derived>::<u></u>TraverseDeclarationNameInfo(<br>
- DeclarationNameInfo NameInfo) {<br>
+ DeclarationNameInfo NameInfo) {<br>
switch (NameInfo.getName().<u></u>getNameKind()) {<br>
case DeclarationName::<u></u>CXXConstructorName:<br>
case DeclarationName::<u></u>CXXDestructorName:<br>
@@ -685,7 +673,7 @@ bool RecursiveASTVisitor<Derived>::<u></u>Trave<br>
return true;<br>
}<br>
<br>
-template<typename Derived><br>
+template <typename Derived><br>
bool<br>
RecursiveASTVisitor<Derived>::<u></u>TraverseTemplateName(<u></u>TemplateName<br>
Template) {<br>
if (DependentTemplateName *DTN =<br>
Template.<u></u>getAsDependentTemplateName())<br>
TRY_TO(<u></u>TraverseNestedNameSpecifier(<u></u>DTN->getQualifier()));<br>
@@ -695,9 +683,9 @@ bool RecursiveASTVisitor<Derived>::<u></u>Trave<br>
return true;<br>
}<br>
<br>
-template<typename Derived><br>
+template <typename Derived><br>
bool RecursiveASTVisitor<Derived>::<u></u>TraverseTemplateArgument(<br>
- const<br>
TemplateArgument &Arg) {<br>
+ const TemplateArgument &Arg) {<br>
switch (Arg.getKind()) {<br>
case TemplateArgument::Null:<br>
case TemplateArgument::Declaration:<br>
@@ -711,7 +699,7 @@ bool RecursiveASTVisitor<Derived>::<u></u>Trave<br>
case TemplateArgument::Template:<br>
case TemplateArgument::<u></u>TemplateExpansion:<br>
return getDerived().<u></u>TraverseTemplateName(<br>
- Arg.<u></u>getAsTemplateOrTemplatePattern<u></u>());<br>
+ Arg.<u></u>getAsTemplateOrTemplatePattern<u></u>());<br>
<br>
case TemplateArgument::Expression:<br>
return getDerived().TraverseStmt(Arg.<u></u>getAsExpr());<br>
@@ -726,9 +714,9 @@ bool RecursiveASTVisitor<Derived>::<u></u>Trave<br>
<br>
// FIXME: no template name location?<br>
// FIXME: no source locations for a template argument pack?<br>
-template<typename Derived><br>
+template <typename Derived><br>
bool RecursiveASTVisitor<Derived>::<u></u>TraverseTemplateArgumentLoc(<br>
- const<br>
TemplateArgumentLoc &ArgLoc) {<br>
+ const TemplateArgumentLoc &ArgLoc) {<br>
const TemplateArgument &Arg = ArgLoc.getArgument();<br>
<br>
switch (Arg.getKind()) {<br>
@@ -750,9 +738,9 @@ bool RecursiveASTVisitor<Derived>::<u></u>Trave<br>
case TemplateArgument::<u></u>TemplateExpansion:<br>
if (ArgLoc.<u></u>getTemplateQualifierLoc())<br>
TRY_TO(getDerived().<u></u>TraverseNestedNameSpecifierLoc<u></u>(<br>
- ArgLoc.<u></u>getTemplateQualifierLoc()));<br>
+ ArgLoc.<u></u>getTemplateQualifierLoc()));<br>
return getDerived().<u></u>TraverseTemplateName(<br>
- Arg.<u></u>getAsTemplateOrTemplatePattern<u></u>());<br>
+ Arg.<u></u>getAsTemplateOrTemplatePattern<u></u>());<br>
<br>
case TemplateArgument::Expression:<br>
return getDerived().TraverseStmt(<u></u>ArgLoc.getSourceExpression());<br>
@@ -765,10 +753,9 @@ bool RecursiveASTVisitor<Derived>::<u></u>Trave<br>
return true;<br>
}<br>
<br>
-template<typename Derived><br>
+template <typename Derived><br>
bool RecursiveASTVisitor<Derived>::<u></u>TraverseTemplateArguments(<br>
- const<br>
TemplateArgument *Args,<br>
- unsigned NumArgs) {<br>
+ const TemplateArgument *Args, unsigned NumArgs) {<br>
for (unsigned I = 0; I != NumArgs; ++I) {<br>
TRY_TO(<u></u>TraverseTemplateArgument(Args[<u></u>I]));<br>
}<br>
@@ -776,9 +763,9 @@ bool RecursiveASTVisitor<Derived>::<u></u>Trave<br>
return true;<br>
}<br>
<br>
-template<typename Derived><br>
+template <typename Derived><br>
bool RecursiveASTVisitor<Derived>::<u></u>TraverseConstructorInitializer<u></u>(<br>
- CXXCtorInitializer *Init) {<br>
+ CXXCtorInitializer *Init) {<br>
if (TypeSourceInfo *TInfo = Init->getTypeSourceInfo())<br>
TRY_TO(TraverseTypeLoc(TInfo-><u></u>getTypeLoc()));<br>
<br>
@@ -795,81 +782,64 @@ bool RecursiveASTVisitor<Derived>::<u></u>Trave<br>
// ----------------- Type traversal -----------------<br>
<br>
// This macro makes available a variable T, the passed-in type.<br>
-#define DEF_TRAVERSE_TYPE(TYPE, CODE) \<br>
- template<typename Derived> \<br>
- bool RecursiveASTVisitor<Derived>::<u></u>Traverse##TYPE (TYPE *T) { \<br>
- TRY_TO(WalkUpFrom##TYPE (T)); \<br>
- { CODE; } \<br>
- return true; \<br>
- }<br>
-<br>
-DEF_TRAVERSE_TYPE(<u></u>BuiltinType, { })<br>
-<br>
-DEF_TRAVERSE_TYPE(<u></u>ComplexType, {<br>
- TRY_TO(TraverseType(T-><u></u>getElementType()));<br>
- })<br>
-<br>
-DEF_TRAVERSE_TYPE(<u></u>PointerType, {<br>
- TRY_TO(TraverseType(T-><u></u>getPointeeType()));<br>
- })<br>
-<br>
-DEF_TRAVERSE_TYPE(<u></u>BlockPointerType, {<br>
- TRY_TO(TraverseType(T-><u></u>getPointeeType()));<br>
- })<br>
-<br>
-DEF_TRAVERSE_TYPE(<u></u>LValueReferenceType, {<br>
- TRY_TO(TraverseType(T-><u></u>getPointeeType()));<br>
- })<br>
-<br>
-DEF_TRAVERSE_TYPE(<u></u>RValueReferenceType, {<br>
- TRY_TO(TraverseType(T-><u></u>getPointeeType()));<br>
- })<br>
+#define DEF_TRAVERSE_TYPE(TYPE, CODE) \<br>
+ template <typename Derived> \<br>
+ bool RecursiveASTVisitor<Derived>::<u></u>Traverse##TYPE(TYPE *T) { \<br>
+ TRY_TO(WalkUpFrom##TYPE(T)); \<br>
+ { CODE; } \<br>
+ return true; \<br>
+ }<br>
+<br>
+DEF_TRAVERSE_TYPE(<u></u>BuiltinType, {})<br>
+<br>
+DEF_TRAVERSE_TYPE(<u></u>ComplexType, {<br>
TRY_TO(TraverseType(T-><u></u>getElementType())); })<br>
+<br>
+DEF_TRAVERSE_TYPE(<u></u>PointerType, {<br>
TRY_TO(TraverseType(T-><u></u>getPointeeType())); })<br>
+<br>
+DEF_TRAVERSE_TYPE(<u></u>BlockPointerType,<br>
+ { TRY_TO(TraverseType(T-><u></u>getPointeeType())); })<br>
+<br>
+DEF_TRAVERSE_TYPE(<u></u>LValueReferenceType,<br>
+ { TRY_TO(TraverseType(T-><u></u>getPointeeType())); })<br>
+<br>
+DEF_TRAVERSE_TYPE(<u></u>RValueReferenceType,<br>
+ { TRY_TO(TraverseType(T-><u></u>getPointeeType())); })<br>
<br>
DEF_TRAVERSE_TYPE(<u></u>MemberPointerType, {<br>
- TRY_TO(TraverseType(QualType(<u></u>T->getClass(), 0)));<br>
- TRY_TO(TraverseType(T-><u></u>getPointeeType()));<br>
- })<br>
-<br>
-DEF_TRAVERSE_TYPE(<u></u>DecayedType, {<br>
- TRY_TO(TraverseType(T-><u></u>getOriginalType()));<br>
- })<br>
-<br>
-DEF_TRAVERSE_TYPE(<u></u>AdjustedType, {<br>
- TRY_TO(TraverseType(T-><u></u>getOriginalType()));<br>
- })<br>
-<br>
-DEF_TRAVERSE_TYPE(<u></u>ConstantArrayType, {<br>
- TRY_TO(TraverseType(T-><u></u>getElementType()));<br>
- })<br>
-<br>
-DEF_TRAVERSE_TYPE(<u></u>IncompleteArrayType, {<br>
- TRY_TO(TraverseType(T-><u></u>getElementType()));<br>
- })<br>
+ TRY_TO(TraverseType(QualType(<u></u>T->getClass(), 0)));<br>
+ TRY_TO(TraverseType(T-><u></u>getPointeeType()));<br>
+})<br>
+<br>
+DEF_TRAVERSE_TYPE(<u></u>DecayedType, {<br>
TRY_TO(TraverseType(T-><u></u>getOriginalType())); })<br>
+<br>
+DEF_TRAVERSE_TYPE(<u></u>AdjustedType, {<br>
TRY_TO(TraverseType(T-><u></u>getOriginalType())); })<br>
+<br>
+DEF_TRAVERSE_TYPE(<u></u>ConstantArrayType,<br>
+ { TRY_TO(TraverseType(T-><u></u>getElementType())); })<br>
+<br>
+DEF_TRAVERSE_TYPE(<u></u>IncompleteArrayType,<br>
+ { TRY_TO(TraverseType(T-><u></u>getElementType())); })<br>
<br>
DEF_TRAVERSE_TYPE(<u></u>VariableArrayType, {<br>
- TRY_TO(TraverseType(T-><u></u>getElementType()));<br>
- TRY_TO(TraverseStmt(T-><u></u>getSizeExpr()));<br>
- })<br>
+ TRY_TO(TraverseType(T-><u></u>getElementType()));<br>
+ TRY_TO(TraverseStmt(T-><u></u>getSizeExpr()));<br>
+})<br>
<br>
DEF_TRAVERSE_TYPE(<u></u>DependentSizedArrayType, {<br>
- TRY_TO(TraverseType(T-><u></u>getElementType()));<br>
- if (T->getSizeExpr())<br>
- TRY_TO(TraverseStmt(T-><u></u>getSizeExpr()));<br>
- })<br>
+ TRY_TO(TraverseType(T-><u></u>getElementType()));<br>
+ if (T->getSizeExpr())<br>
+ TRY_TO(TraverseStmt(T-><u></u>getSizeExpr()));<br>
+})<br>
<br>
DEF_TRAVERSE_TYPE(<u></u>DependentSizedExtVectorType, {<br>
- if (T->getSizeExpr())<br>
- TRY_TO(TraverseStmt(T-><u></u>getSizeExpr()));<br>
- TRY_TO(TraverseType(T-><u></u>getElementType()));<br>
- })<br>
-<br>
-DEF_TRAVERSE_TYPE(VectorType, {<br>
- TRY_TO(TraverseType(T-><u></u>getElementType()));<br>
- })<br>
-<br>
-DEF_TRAVERSE_TYPE(<u></u>ExtVectorType, {<br>
- TRY_TO(TraverseType(T-><u></u>getElementType()));<br>
- })<br>
+ if (T->getSizeExpr())<br>
+ TRY_TO(TraverseStmt(T-><u></u>getSizeExpr()));<br>
+ TRY_TO(TraverseType(T-><u></u>getElementType()));<br>
+})<br>
+<br>
+DEF_TRAVERSE_TYPE(VectorType, {<br>
TRY_TO(TraverseType(T-><u></u>getElementType())); })<br>
+<br>
+DEF_TRAVERSE_TYPE(<u></u>ExtVectorType, {<br>
TRY_TO(TraverseType(T-><u></u>getElementType())); })<br>
<br>
DEF_TRAVERSE_TYPE(<u></u>FunctionNoProtoType,<br>
{ TRY_TO(TraverseType(T-><u></u>getReturnType())); })<br>
@@ -886,87 +856,72 @@ DEF_TRAVERSE_TYPE(<u></u>FunctionProtoType, {<br>
}<br>
})<br>
<br>
-DEF_TRAVERSE_TYPE(<u></u>UnresolvedUsingType, { })<br>
-DEF_TRAVERSE_TYPE(<u></u>TypedefType, { })<br>
+DEF_TRAVERSE_TYPE(<u></u>UnresolvedUsingType, {})<br>
+DEF_TRAVERSE_TYPE(<u></u>TypedefType, {})<br>
+<br>
+DEF_TRAVERSE_TYPE(<u></u>TypeOfExprType,<br>
+ { TRY_TO(TraverseStmt(T-><u></u>getUnderlyingExpr())); })<br>
<br>
-DEF_TRAVERSE_TYPE(<u></u>TypeOfExprType, {<br>
- TRY_TO(TraverseStmt(T-><u></u>getUnderlyingExpr()));<br>
- })<br>
-<br>
-DEF_TRAVERSE_TYPE(TypeOfType, {<br>
- TRY_TO(TraverseType(T-><u></u>getUnderlyingType()));<br>
- })<br>
-<br>
-DEF_TRAVERSE_TYPE(<u></u>DecltypeType, {<br>
- TRY_TO(TraverseStmt(T-><u></u>getUnderlyingExpr()));<br>
- })<br>
+DEF_TRAVERSE_TYPE(TypeOfType, {<br>
TRY_TO(TraverseType(T-><u></u>getUnderlyingType())); })<br>
+<br>
+DEF_TRAVERSE_TYPE(<u></u>DecltypeType,<br>
+ { TRY_TO(TraverseStmt(T-><u></u>getUnderlyingExpr())); })<br>
<br>
DEF_TRAVERSE_TYPE(<u></u>UnaryTransformType, {<br>
- TRY_TO(TraverseType(T-><u></u>getBaseType()));<br>
- TRY_TO(TraverseType(T-><u></u>getUnderlyingType()));<br>
- })<br>
+ TRY_TO(TraverseType(T-><u></u>getBaseType()));<br>
+ TRY_TO(TraverseType(T-><u></u>getUnderlyingType()));<br>
+})<br>
+<br>
+DEF_TRAVERSE_TYPE(AutoType, {<br>
TRY_TO(TraverseType(T-><u></u>getDeducedType())); })<br>
<br>
-DEF_TRAVERSE_TYPE(AutoType, {<br>
- TRY_TO(TraverseType(T-><u></u>getDeducedType()));<br>
- })<br>
-<br>
-DEF_TRAVERSE_TYPE(RecordType, { })<br>
-DEF_TRAVERSE_TYPE(EnumType, { })<br>
-DEF_TRAVERSE_TYPE(<u></u>TemplateTypeParmType, { })<br>
-DEF_TRAVERSE_TYPE(<u></u>SubstTemplateTypeParmType, { })<br>
-DEF_TRAVERSE_TYPE(<u></u>SubstTemplateTypeParmPackType, { })<br>
+DEF_TRAVERSE_TYPE(RecordType, {})<br>
+DEF_TRAVERSE_TYPE(EnumType, {})<br>
+DEF_TRAVERSE_TYPE(<u></u>TemplateTypeParmType, {})<br>
+DEF_TRAVERSE_TYPE(<u></u>SubstTemplateTypeParmType, {})<br>
+DEF_TRAVERSE_TYPE(<u></u>SubstTemplateTypeParmPackType, {})<br>
<br>
DEF_TRAVERSE_TYPE(<u></u>TemplateSpecializationType, {<br>
- TRY_TO(TraverseTemplateName(T-<u></u>>getTemplateName()));<br>
- TRY_TO(<u></u>TraverseTemplateArguments(T-><u></u>getArgs(), T->getNumArgs()));<br>
- })<br>
-<br>
-DEF_TRAVERSE_TYPE(<u></u>InjectedClassNameType, { })<br>
-<br>
-DEF_TRAVERSE_TYPE(<u></u>AttributedType, {<br>
- TRY_TO(TraverseType(T-><u></u>getModifiedType()));<br>
- })<br>
-<br>
-DEF_TRAVERSE_TYPE(ParenType, {<br>
- TRY_TO(TraverseType(T-><u></u>getInnerType()));<br>
- })<br>
+ TRY_TO(TraverseTemplateName(T-<u></u>>getTemplateName()));<br>
+ TRY_TO(<u></u>TraverseTemplateArguments(T-><u></u>getArgs(), T->getNumArgs()));<br>
+})<br>
<br>
-DEF_TRAVERSE_TYPE(<u></u>ElaboratedType, {<br>
- if (T->getQualifier()) {<br>
- TRY_TO(<u></u>TraverseNestedNameSpecifier(T-<u></u>>getQualifier()));<br>
- }<br>
- TRY_TO(TraverseType(T-><u></u>getNamedType()));<br>
- })<br>
+DEF_TRAVERSE_TYPE(<u></u>InjectedClassNameType, {})<br>
<br>
-DEF_TRAVERSE_TYPE(<u></u>DependentNameType, {<br>
+DEF_TRAVERSE_TYPE(<u></u>AttributedType,<br>
+ { TRY_TO(TraverseType(T-><u></u>getModifiedType())); })<br>
+<br>
+DEF_TRAVERSE_TYPE(ParenType, {<br>
TRY_TO(TraverseType(T-><u></u>getInnerType())); })<br>
+<br>
+DEF_TRAVERSE_TYPE(<u></u>ElaboratedType, {<br>
+ if (T->getQualifier()) {<br>
TRY_TO(<u></u>TraverseNestedNameSpecifier(T-<u></u>>getQualifier()));<br>
- })<br>
+ }<br>
+ TRY_TO(TraverseType(T-><u></u>getNamedType()));<br>
+})<br>
+<br>
+DEF_TRAVERSE_TYPE(<u></u>DependentNameType,<br>
+ {<br>
TRY_TO(<u></u>TraverseNestedNameSpecifier(T-<u></u>>getQualifier())); })<br>
<br>
DEF_TRAVERSE_TYPE(<u></u>DependentTemplateSpecializatio<u></u>nType, {<br>
- TRY_TO(<u></u>TraverseNestedNameSpecifier(T-<u></u>>getQualifier()));<br>
- TRY_TO(<u></u>TraverseTemplateArguments(T-><u></u>getArgs(), T->getNumArgs()));<br>
- })<br>
+ TRY_TO(<u></u>TraverseNestedNameSpecifier(T-<u></u>>getQualifier()));<br>
+ TRY_TO(<u></u>TraverseTemplateArguments(T-><u></u>getArgs(), T->getNumArgs()));<br>
+})<br>
<br>
-DEF_TRAVERSE_TYPE(<u></u>PackExpansionType, {<br>
- TRY_TO(TraverseType(T-><u></u>getPattern()));<br>
- })<br>
+DEF_TRAVERSE_TYPE(<u></u>PackExpansionType, {<br>
TRY_TO(TraverseType(T-><u></u>getPattern())); })<br>
<br>
-DEF_TRAVERSE_TYPE(<u></u>ObjCInterfaceType, { })<br>
+DEF_TRAVERSE_TYPE(<u></u>ObjCInterfaceType, {})<br>
<br>
DEF_TRAVERSE_TYPE(<u></u>ObjCObjectType, {<br>
- // We have to watch out here because an ObjCInterfaceType's base<br>
- // type is itself.<br>
- if (T->getBaseType().getTypePtr() != T)<br>
- TRY_TO(TraverseType(T-><u></u>getBaseType()));<br>
- })<br>
-<br>
-DEF_TRAVERSE_TYPE(<u></u>ObjCObjectPointerType, {<br>
- TRY_TO(TraverseType(T-><u></u>getPointeeType()));<br>
- })<br>
-<br>
-DEF_TRAVERSE_TYPE(AtomicType, {<br>
- TRY_TO(TraverseType(T-><u></u>getValueType()));<br>
- })<br>
+ // We have to watch out here because an ObjCInterfaceType's base<br>
+ // type is itself.<br>
+ if (T->getBaseType().getTypePtr() != T)<br>
+ TRY_TO(TraverseType(T-><u></u>getBaseType()));<br>
+})<br>
+<br>
+DEF_TRAVERSE_TYPE(<u></u>ObjCObjectPointerType,<br>
+ { TRY_TO(TraverseType(T-><u></u>getPointeeType())); })<br>
+<br>
+DEF_TRAVERSE_TYPE(AtomicType, {<br>
TRY_TO(TraverseType(T-><u></u>getValueType())); })<br>
<br>
#undef DEF_TRAVERSE_TYPE<br>
<br>
@@ -977,19 +932,19 @@ DEF_TRAVERSE_TYPE(AtomicType, {<br>
// in addition to WalkUpFrom* for the TypeLoc itself, such that<br>
existing<br>
// clients that override the WalkUpFrom*Type() and/or<br>
Visit*Type() methods<br>
// continue to work.<br>
-#define DEF_TRAVERSE_TYPELOC(TYPE, CODE) \<br>
- template<typename Derived> \<br>
- bool<br>
RecursiveASTVisitor<Derived>::<u></u>Traverse##TYPE##Loc(TYPE##Loc TL) { \<br>
- if (getDerived().<u></u>shouldWalkTypesOfTypeLocs()) \<br>
- TRY_TO(WalkUpFrom##TYPE(const_<u></u>cast<TYPE*>(TL.getTypePtr())))<u></u>; \<br>
- TRY_TO(WalkUpFrom##TYPE##Loc(<u></u>TL)); \<br>
- { CODE; } \<br>
- return true; \<br>
+#define DEF_TRAVERSE_TYPELOC(TYPE, CODE) \<br>
+ template <typename Derived> \<br>
+ bool<br>
RecursiveASTVisitor<Derived>::<u></u>Traverse##TYPE##Loc(TYPE##Loc TL) {<br>
\<br>
+ if (getDerived().<u></u>shouldWalkTypesOfTypeLocs()) \<br>
+ TRY_TO(WalkUpFrom##TYPE(const_<u></u>cast<TYPE<br>
*>(TL.getTypePtr()))); \<br>
+ TRY_TO(WalkUpFrom##TYPE##Loc(<u></u>TL)); \<br>
+ { CODE; } \<br>
+ return true; \<br>
}<br>
<br>
-template<typename Derived><br>
-bool RecursiveASTVisitor<Derived>::<u></u>TraverseQualifiedTypeLoc(<br>
- QualifiedTypeLoc TL) {<br>
+template <typename Derived><br>
+bool<br>
+RecursiveASTVisitor<Derived>:<u></u>:TraverseQualifiedTypeLoc(<u></u>QualifiedTypeLoc<br>
TL) {<br>
// Move this over to the 'main' typeloc tree. Note that this is a<br>
// move -- we pretend that we were really looking at the<br>
unqualified<br>
// typeloc all along -- rather than a recursion, so we don't follow<br>
@@ -1008,46 +963,40 @@ bool RecursiveASTVisitor<Derived>::<u></u>Trave<br>
return TraverseTypeLoc(TL.<u></u>getUnqualifiedLoc());<br>
}<br>
<br>
-DEF_TRAVERSE_TYPELOC(<u></u>BuiltinType, { })<br>
+DEF_TRAVERSE_TYPELOC(<u></u>BuiltinType, {})<br>
<br>
// FIXME: ComplexTypeLoc is unfinished<br>
DEF_TRAVERSE_TYPELOC(<u></u>ComplexType, {<br>
- TRY_TO(TraverseType(TL.<u></u>getTypePtr()->getElementType()<u></u>));<br>
- })<br>
+ TRY_TO(TraverseType(TL.<u></u>getTypePtr()->getElementType()<u></u>));<br>
+})<br>
<br>
-DEF_TRAVERSE_TYPELOC(<u></u>PointerType, {<br>
- TRY_TO(TraverseTypeLoc(TL.<u></u>getPointeeLoc()));<br>
- })<br>
-<br>
-DEF_TRAVERSE_TYPELOC(<u></u>BlockPointerType, {<br>
- TRY_TO(TraverseTypeLoc(TL.<u></u>getPointeeLoc()));<br>
- })<br>
-<br>
-DEF_TRAVERSE_TYPELOC(<u></u>LValueReferenceType, {<br>
- TRY_TO(TraverseTypeLoc(TL.<u></u>getPointeeLoc()));<br>
- })<br>
-<br>
-DEF_TRAVERSE_TYPELOC(<u></u>RValueReferenceType, {<br>
- TRY_TO(TraverseTypeLoc(TL.<u></u>getPointeeLoc()));<br>
- })<br>
+DEF_TRAVERSE_TYPELOC(<u></u>PointerType,<br>
+ {<br>
TRY_TO(TraverseTypeLoc(TL.<u></u>getPointeeLoc())); })<br>
+<br>
+DEF_TRAVERSE_TYPELOC(<u></u>BlockPointerType,<br>
+ {<br>
TRY_TO(TraverseTypeLoc(TL.<u></u>getPointeeLoc())); })<br>
+<br>
+DEF_TRAVERSE_TYPELOC(<u></u>LValueReferenceType,<br>
+ {<br>
TRY_TO(TraverseTypeLoc(TL.<u></u>getPointeeLoc())); })<br>
+<br>
+DEF_TRAVERSE_TYPELOC(<u></u>RValueReferenceType,<br>
+ {<br>
TRY_TO(TraverseTypeLoc(TL.<u></u>getPointeeLoc())); })<br>
<br>
// FIXME: location of base class?<br>
// We traverse this in the type case as well, but how is it not<br>
reached through<br>
// the pointee type?<br>
DEF_TRAVERSE_TYPELOC(<u></u>MemberPointerType, {<br>
- TRY_TO(TraverseType(QualType(<u></u>TL.getTypePtr()->getClass(), 0)));<br>
- TRY_TO(TraverseTypeLoc(TL.<u></u>getPointeeLoc()));<br>
- })<br>
-<br>
-DEF_TRAVERSE_TYPELOC(<u></u>DecayedType, {<br>
- TRY_TO(TraverseTypeLoc(TL.<u></u>getOriginalLoc()));<br>
- })<br>
-<br>
-DEF_TRAVERSE_TYPELOC(<u></u>AdjustedType, {<br>
- TRY_TO(TraverseTypeLoc(TL.<u></u>getOriginalLoc()));<br>
- })<br>
+ TRY_TO(TraverseType(QualType(<u></u>TL.getTypePtr()->getClass(), 0)));<br>
+ TRY_TO(TraverseTypeLoc(TL.<u></u>getPointeeLoc()));<br>
+})<br>
+<br>
+DEF_TRAVERSE_TYPELOC(<u></u>DecayedType,<br>
+ {<br>
TRY_TO(TraverseTypeLoc(TL.<u></u>getOriginalLoc())); })<br>
<br>
-template<typename Derived><br>
+DEF_TRAVERSE_TYPELOC(<u></u>AdjustedType,<br>
+ {<br>
TRY_TO(TraverseTypeLoc(TL.<u></u>getOriginalLoc())); })<br>
+<br>
+template <typename Derived><br>
bool<br>
RecursiveASTVisitor<Derived>::<u></u>TraverseArrayTypeLocHelper(<u></u>ArrayTypeLoc<br>
TL) {<br>
// This isn't available for ArrayType, but is for the ArrayTypeLoc.<br>
TRY_TO(TraverseStmt(TL.<u></u>getSizeExpr()));<br>
@@ -1055,156 +1004,147 @@ bool RecursiveASTVisitor<Derived>::<u></u>Trave<br>
}<br>
<br>
DEF_TRAVERSE_TYPELOC(<u></u>ConstantArrayType, {<br>
- TRY_TO(TraverseTypeLoc(TL.<u></u>getElementLoc()));<br>
- return TraverseArrayTypeLocHelper(TL)<u></u>;<br>
- })<br>
+ TRY_TO(TraverseTypeLoc(TL.<u></u>getElementLoc()));<br>
+ return TraverseArrayTypeLocHelper(TL)<u></u>;<br>
+})<br>
<br>
DEF_TRAVERSE_TYPELOC(<u></u>IncompleteArrayType, {<br>
- TRY_TO(TraverseTypeLoc(TL.<u></u>getElementLoc()));<br>
- return TraverseArrayTypeLocHelper(TL)<u></u>;<br>
- })<br>
+ TRY_TO(TraverseTypeLoc(TL.<u></u>getElementLoc()));<br>
+ return TraverseArrayTypeLocHelper(TL)<u></u>;<br>
+})<br>
<br>
DEF_TRAVERSE_TYPELOC(<u></u>VariableArrayType, {<br>
- TRY_TO(TraverseTypeLoc(TL.<u></u>getElementLoc()));<br>
- return TraverseArrayTypeLocHelper(TL)<u></u>;<br>
- })<br>
+ TRY_TO(TraverseTypeLoc(TL.<u></u>getElementLoc()));<br>
+ return TraverseArrayTypeLocHelper(TL)<u></u>;<br>
+})<br>
<br>
DEF_TRAVERSE_TYPELOC(<u></u>DependentSizedArrayType, {<br>
- TRY_TO(TraverseTypeLoc(TL.<u></u>getElementLoc()));<br>
- return TraverseArrayTypeLocHelper(TL)<u></u>;<br>
- })<br>
+ TRY_TO(TraverseTypeLoc(TL.<u></u>getElementLoc()));<br>
+ return TraverseArrayTypeLocHelper(TL)<u></u>;<br>
+})<br>
<br>
// FIXME: order? why not size expr first?<br>
// FIXME: base VectorTypeLoc is unfinished<br>
DEF_TRAVERSE_TYPELOC(<u></u>DependentSizedExtVectorType, {<br>
- if (TL.getTypePtr()->getSizeExpr(<u></u>))<br>
- TRY_TO(TraverseStmt(TL.<u></u>getTypePtr()->getSizeExpr()));<br>
- TRY_TO(TraverseType(TL.<u></u>getTypePtr()->getElementType()<u></u>));<br>
- })<br>
+ if (TL.getTypePtr()->getSizeExpr(<u></u>))<br>
+ TRY_TO(TraverseStmt(TL.<u></u>getTypePtr()->getSizeExpr()));<br>
+ TRY_TO(TraverseType(TL.<u></u>getTypePtr()->getElementType()<u></u>));<br>
+})<br>
<br>
// FIXME: VectorTypeLoc is unfinished<br>
DEF_TRAVERSE_TYPELOC(<u></u>VectorType, {<br>
- TRY_TO(TraverseType(TL.<u></u>getTypePtr()->getElementType()<u></u>));<br>
- })<br>
+ TRY_TO(TraverseType(TL.<u></u>getTypePtr()->getElementType()<u></u>));<br>
+})<br>
<br>
// FIXME: size and attributes<br>
// FIXME: base VectorTypeLoc is unfinished<br>
DEF_TRAVERSE_TYPELOC(<u></u>ExtVectorType, {<br>
- TRY_TO(TraverseType(TL.<u></u>getTypePtr()->getElementType()<u></u>));<br>
- })<br>
+ TRY_TO(TraverseType(TL.<u></u>getTypePtr()->getElementType()<u></u>));<br>
+})<br>
<br>
-DEF_TRAVERSE_TYPELOC(<u></u>FunctionNoProtoType, {<br>
- TRY_TO(TraverseTypeLoc(TL.<u></u>getReturnLoc()));<br>
- })<br>
+DEF_TRAVERSE_TYPELOC(<u></u>FunctionNoProtoType,<br>
+ { TRY_TO(TraverseTypeLoc(TL.<u></u>getReturnLoc())); })<br>
<br>
// FIXME: location of exception specifications (attributes?)<br>
DEF_TRAVERSE_TYPELOC(<u></u>FunctionProtoType, {<br>
- TRY_TO(TraverseTypeLoc(TL.<u></u>getReturnLoc()));<br>
+ TRY_TO(TraverseTypeLoc(TL.<u></u>getReturnLoc()));<br>
<br>
- const FunctionProtoType *T = TL.getTypePtr();<br>
+ const FunctionProtoType *T = TL.getTypePtr();<br>
<br>
- for (unsigned I = 0, E = TL.getNumParams(); I != E; ++I) {<br>
- if (TL.getParam(I)) {<br>
- TRY_TO(TraverseDecl(TL.<u></u>getParam(I)));<br>
- } else if (I < T->getNumParams()) {<br>
- TRY_TO(TraverseType(T-><u></u>getParamType(I)));<br>
- }<br>
+ for (unsigned I = 0, E = TL.getNumParams(); I != E; ++I) {<br>
+ if (TL.getParam(I)) {<br>
+ TRY_TO(TraverseDecl(TL.<u></u>getParam(I)));<br>
+ } else if (I < T->getNumParams()) {<br>
+ TRY_TO(TraverseType(T-><u></u>getParamType(I)));<br>
}<br>
+ }<br>
<br>
- for (const auto &E : T->exceptions()) {<br>
- TRY_TO(TraverseType(E));<br>
- }<br>
- })<br>
+ for (const auto &E : T->exceptions()) {<br>
+ TRY_TO(TraverseType(E));<br>
+ }<br>
+})<br>
<br>
-DEF_TRAVERSE_TYPELOC(<u></u>UnresolvedUsingType, { })<br>
-DEF_TRAVERSE_TYPELOC(<u></u>TypedefType, { })<br>
+DEF_TRAVERSE_TYPELOC(<u></u>UnresolvedUsingType, {})<br>
+DEF_TRAVERSE_TYPELOC(<u></u>TypedefType, {})<br>
<br>
-DEF_TRAVERSE_TYPELOC(<u></u>TypeOfExprType, {<br>
- TRY_TO(TraverseStmt(TL.<u></u>getUnderlyingExpr()));<br>
- })<br>
+DEF_TRAVERSE_TYPELOC(<u></u>TypeOfExprType,<br>
+ {<br>
TRY_TO(TraverseStmt(TL.<u></u>getUnderlyingExpr())); })<br>
<br>
DEF_TRAVERSE_TYPELOC(<u></u>TypeOfType, {<br>
- TRY_TO(TraverseTypeLoc(TL.<u></u>getUnderlyingTInfo()-><u></u>getTypeLoc()));<br>
- })<br>
+ TRY_TO(TraverseTypeLoc(TL.<u></u>getUnderlyingTInfo()-><u></u>getTypeLoc()));<br>
+})<br>
<br>
// FIXME: location of underlying expr<br>
DEF_TRAVERSE_TYPELOC(<u></u>DecltypeType, {<br>
- TRY_TO(TraverseStmt(TL.<u></u>getTypePtr()-><u></u>getUnderlyingExpr()));<br>
- })<br>
+ TRY_TO(TraverseStmt(TL.<u></u>getTypePtr()-><u></u>getUnderlyingExpr()));<br>
+})<br>
<br>
DEF_TRAVERSE_TYPELOC(<u></u>UnaryTransformType, {<br>
- TRY_TO(TraverseTypeLoc(TL.<u></u>getUnderlyingTInfo()-><u></u>getTypeLoc()));<br>
- })<br>
+ TRY_TO(TraverseTypeLoc(TL.<u></u>getUnderlyingTInfo()-><u></u>getTypeLoc()));<br>
+})<br>
<br>
DEF_TRAVERSE_TYPELOC(AutoType, {<br>
- TRY_TO(TraverseType(TL.<u></u>getTypePtr()->getDeducedType()<u></u>));<br>
- })<br>
+ TRY_TO(TraverseType(TL.<u></u>getTypePtr()->getDeducedType()<u></u>));<br>
+})<br>
<br>
-DEF_TRAVERSE_TYPELOC(<u></u>RecordType, { })<br>
-DEF_TRAVERSE_TYPELOC(<u></u>EnumType, { })<br>
-DEF_TRAVERSE_TYPELOC(<u></u>TemplateTypeParmType, { })<br>
-DEF_TRAVERSE_TYPELOC(<u></u>SubstTemplateTypeParmType, { })<br>
-DEF_TRAVERSE_TYPELOC(<u></u>SubstTemplateTypeParmPackType, { })<br>
+DEF_TRAVERSE_TYPELOC(<u></u>RecordType, {})<br>
+DEF_TRAVERSE_TYPELOC(<u></u>EnumType, {})<br>
+DEF_TRAVERSE_TYPELOC(<u></u>TemplateTypeParmType, {})<br>
+DEF_TRAVERSE_TYPELOC(<u></u>SubstTemplateTypeParmType, {})<br>
+DEF_TRAVERSE_TYPELOC(<u></u>SubstTemplateTypeParmPackType, {})<br>
<br>
// FIXME: use the loc for the template name?<br>
DEF_TRAVERSE_TYPELOC(<u></u>TemplateSpecializationType, {<br>
- TRY_TO(TraverseTemplateName(<u></u>TL.getTypePtr()-><u></u>getTemplateName()));<br>
- for (unsigned I = 0, E = TL.getNumArgs(); I != E; ++I) {<br>
- TRY_TO(<u></u>TraverseTemplateArgumentLoc(<u></u>TL.getArgLoc(I)));<br>
- }<br>
- })<br>
+ TRY_TO(TraverseTemplateName(<u></u>TL.getTypePtr()-><u></u>getTemplateName()));<br>
+ for (unsigned I = 0, E = TL.getNumArgs(); I != E; ++I) {<br>
+ TRY_TO(<u></u>TraverseTemplateArgumentLoc(<u></u>TL.getArgLoc(I)));<br>
+ }<br>
+})<br>
<br>
-DEF_TRAVERSE_TYPELOC(<u></u>InjectedClassNameType, { })<br>
+DEF_TRAVERSE_TYPELOC(<u></u>InjectedClassNameType, {})<br>
<br>
-DEF_TRAVERSE_TYPELOC(<u></u>ParenType, {<br>
- TRY_TO(TraverseTypeLoc(TL.<u></u>getInnerLoc()));<br>
- })<br>
+DEF_TRAVERSE_TYPELOC(<u></u>ParenType, {<br>
TRY_TO(TraverseTypeLoc(TL.<u></u>getInnerLoc())); })<br>
<br>
-DEF_TRAVERSE_TYPELOC(<u></u>AttributedType, {<br>
- TRY_TO(TraverseTypeLoc(TL.<u></u>getModifiedLoc()));<br>
- })<br>
+DEF_TRAVERSE_TYPELOC(<u></u>AttributedType,<br>
+ {<br>
TRY_TO(TraverseTypeLoc(TL.<u></u>getModifiedLoc())); })<br>
<br>
DEF_TRAVERSE_TYPELOC(<u></u>ElaboratedType, {<br>
- if (TL.getQualifierLoc()) {<br>
- TRY_TO(<u></u>TraverseNestedNameSpecifierLoc<u></u>(TL.getQualifierLoc()));<br>
- }<br>
- TRY_TO(TraverseTypeLoc(TL.<u></u>getNamedTypeLoc()));<br>
- })<br>
+ if (TL.getQualifierLoc()) {<br>
+ TRY_TO(<u></u>TraverseNestedNameSpecifierLoc<u></u>(TL.getQualifierLoc()));<br>
+ }<br>
+ TRY_TO(TraverseTypeLoc(TL.<u></u>getNamedTypeLoc()));<br>
+})<br>
<br>
DEF_TRAVERSE_TYPELOC(<u></u>DependentNameType, {<br>
- TRY_TO(<u></u>TraverseNestedNameSpecifierLoc<u></u>(TL.getQualifierLoc()));<br>
- })<br>
+ TRY_TO(<u></u>TraverseNestedNameSpecifierLoc<u></u>(TL.getQualifierLoc()));<br>
+})<br>
<br>
DEF_TRAVERSE_TYPELOC(<u></u>DependentTemplateSpecializatio<u></u>nType, {<br>
- if (TL.getQualifierLoc()) {<br>
- TRY_TO(<u></u>TraverseNestedNameSpecifierLoc<u></u>(TL.getQualifierLoc()));<br>
- }<br>
+ if (TL.getQualifierLoc()) {<br>
+ TRY_TO(<u></u>TraverseNestedNameSpecifierLoc<u></u>(TL.getQualifierLoc()));<br>
+ }<br>
<br>
- for (unsigned I = 0, E = TL.getNumArgs(); I != E; ++I) {<br>
- TRY_TO(<u></u>TraverseTemplateArgumentLoc(<u></u>TL.getArgLoc(I)));<br>
- }<br>
- })<br>
+ for (unsigned I = 0, E = TL.getNumArgs(); I != E; ++I) {<br>
+ TRY_TO(<u></u>TraverseTemplateArgumentLoc(<u></u>TL.getArgLoc(I)));<br>
+ }<br>
+})<br>
<br>
-DEF_TRAVERSE_TYPELOC(<u></u>PackExpansionType, {<br>
- TRY_TO(TraverseTypeLoc(TL.<u></u>getPatternLoc()));<br>
- })<br>
+DEF_TRAVERSE_TYPELOC(<u></u>PackExpansionType,<br>
+ {<br>
TRY_TO(TraverseTypeLoc(TL.<u></u>getPatternLoc())); })<br>
<br>
-DEF_TRAVERSE_TYPELOC(<u></u>ObjCInterfaceType, { })<br>
+DEF_TRAVERSE_TYPELOC(<u></u>ObjCInterfaceType, {})<br>
<br>
DEF_TRAVERSE_TYPELOC(<u></u>ObjCObjectType, {<br>
- // We have to watch out here because an ObjCInterfaceType's base<br>
- // type is itself.<br>
- if (TL.getTypePtr()->getBaseType(<u></u>).getTypePtr() !=<br>
TL.getTypePtr())<br>
- TRY_TO(TraverseTypeLoc(TL.<u></u>getBaseLoc()));<br>
- })<br>
-<br>
-DEF_TRAVERSE_TYPELOC(<u></u>ObjCObjectPointerType, {<br>
- TRY_TO(TraverseTypeLoc(TL.<u></u>getPointeeLoc()));<br>
- })<br>
-<br>
-DEF_TRAVERSE_TYPELOC(<u></u>AtomicType, {<br>
- TRY_TO(TraverseTypeLoc(TL.<u></u>getValueLoc()));<br>
- })<br>
+ // We have to watch out here because an ObjCInterfaceType's base<br>
+ // type is itself.<br>
+ if (TL.getTypePtr()->getBaseType(<u></u>).getTypePtr() != TL.getTypePtr())<br>
+ TRY_TO(TraverseTypeLoc(TL.<u></u>getBaseLoc()));<br>
+})<br>
+<br>
+DEF_TRAVERSE_TYPELOC(<u></u>ObjCObjectPointerType,<br>
+ {<br>
TRY_TO(TraverseTypeLoc(TL.<u></u>getPointeeLoc())); })<br>
+<br>
+DEF_TRAVERSE_TYPELOC(<u></u>AtomicType, {<br>
TRY_TO(TraverseTypeLoc(TL.<u></u>getValueLoc())); })<br>
<br>
#undef DEF_TRAVERSE_TYPELOC<br>
<br>
@@ -1215,7 +1155,7 @@ DEF_TRAVERSE_TYPELOC(<u></u>AtomicType, {<br>
// Therefore each Traverse* only needs to worry about children other<br>
// than those.<br>
<br>
-template<typename Derived><br>
+template <typename Derived><br>
bool<br>
RecursiveASTVisitor<Derived>::<u></u>TraverseDeclContextHelper(<u></u>DeclContext *DC)<br>
{<br>
if (!DC)<br>
return true;<br>
@@ -1231,131 +1171,121 @@ bool RecursiveASTVisitor<Derived>::<u></u>Trave<br>
}<br>
<br>
// This macro makes available a variable D, the passed-in decl.<br>
-#define DEF_TRAVERSE_DECL(DECL, CODE) \<br>
-template<typename Derived> \<br>
-bool RecursiveASTVisitor<Derived>::<u></u>Traverse##DECL (DECL *D) { \<br>
- TRY_TO(WalkUpFrom##DECL (D)); \<br>
- { CODE; } \<br>
- TRY_TO(<u></u>TraverseDeclContextHelper(dyn_<u></u>cast<DeclContext>(D))); \<br>
- return true; \<br>
-}<br>
+#define DEF_TRAVERSE_DECL(DECL, CODE) \<br>
+ template <typename Derived> \<br>
+ bool RecursiveASTVisitor<Derived>::<u></u>Traverse##DECL(DECL *D) { \<br>
+ TRY_TO(WalkUpFrom##DECL(D)); \<br>
+ { CODE; } \<br>
+ TRY_TO(<u></u>TraverseDeclContextHelper(dyn_<u></u>cast<DeclContext>(D))); \<br>
+ return true; \<br>
+ }<br>
<br>
-DEF_TRAVERSE_DECL(<u></u>AccessSpecDecl, { })<br>
+DEF_TRAVERSE_DECL(<u></u>AccessSpecDecl, {})<br>
<br>
DEF_TRAVERSE_DECL(BlockDecl, {<br>
- if (TypeSourceInfo *TInfo = D->getSignatureAsWritten())<br>
- TRY_TO(TraverseTypeLoc(TInfo-><u></u>getTypeLoc()));<br>
- TRY_TO(TraverseStmt(D-><u></u>getBody()));<br>
- // This return statement makes sure the traversal of nodes in<br>
- // decls_begin()/decls_end() (done in the DEF_TRAVERSE_DECL<br>
macro)<br>
- // is skipped - don't remove it.<br>
- return true;<br>
- })<br>
+ if (TypeSourceInfo *TInfo = D->getSignatureAsWritten())<br>
+ TRY_TO(TraverseTypeLoc(TInfo-><u></u>getTypeLoc()));<br>
+ TRY_TO(TraverseStmt(D-><u></u>getBody()));<br>
+ // This return statement makes sure the traversal of nodes in<br>
+ // decls_begin()/decls_end() (done in the DEF_TRAVERSE_DECL macro)<br>
+ // is skipped - don't remove it.<br>
+ return true;<br>
+})<br>
<br>
DEF_TRAVERSE_DECL(<u></u>CapturedDecl, {<br>
- TRY_TO(TraverseStmt(D-><u></u>getBody()));<br>
- // This return statement makes sure the traversal of nodes in<br>
- // decls_begin()/decls_end() (done in the DEF_TRAVERSE_DECL<br>
macro)<br>
- // is skipped - don't remove it.<br>
- return true;<br>
- })<br>
+ TRY_TO(TraverseStmt(D-><u></u>getBody()));<br>
+ // This return statement makes sure the traversal of nodes in<br>
+ // decls_begin()/decls_end() (done in the DEF_TRAVERSE_DECL macro)<br>
+ // is skipped - don't remove it.<br>
+ return true;<br>
+})<br>
<br>
-DEF_TRAVERSE_DECL(EmptyDecl, { })<br>
+DEF_TRAVERSE_DECL(EmptyDecl, {})<br>
<br>
-DEF_TRAVERSE_DECL(<u></u>FileScopeAsmDecl, {<br>
- TRY_TO(TraverseStmt(D-><u></u>getAsmString()));<br>
- })<br>
+DEF_TRAVERSE_DECL(<u></u>FileScopeAsmDecl,<br>
+ { TRY_TO(TraverseStmt(D-><u></u>getAsmString())); })<br>
<br>
-DEF_TRAVERSE_DECL(ImportDecl, { })<br>
+DEF_TRAVERSE_DECL(ImportDecl, {})<br>
<br>
DEF_TRAVERSE_DECL(FriendDecl, {<br>
- // Friend is either decl or a type.<br>
- if (D->getFriendType())<br>
- TRY_TO(TraverseTypeLoc(D-><u></u>getFriendType()->getTypeLoc())<u></u>);<br>
- else<br>
- TRY_TO(TraverseDecl(D-><u></u>getFriendDecl()));<br>
- })<br>
+ // Friend is either decl or a type.<br>
+ if (D->getFriendType())<br>
+ TRY_TO(TraverseTypeLoc(D-><u></u>getFriendType()->getTypeLoc())<u></u>);<br>
+ else<br>
+ TRY_TO(TraverseDecl(D-><u></u>getFriendDecl()));<br>
+})<br>
<br>
DEF_TRAVERSE_DECL(<u></u>FriendTemplateDecl, {<br>
- if (D->getFriendType())<br>
- TRY_TO(TraverseTypeLoc(D-><u></u>getFriendType()->getTypeLoc())<u></u>);<br>
- else<br>
- TRY_TO(TraverseDecl(D-><u></u>getFriendDecl()));<br>
- for (unsigned I = 0, E = D->getNumTemplateParameters(); I <<br>
E; ++I) {<br>
- TemplateParameterList *TPL = D->getTemplateParameterList(I)<u></u>;<br>
- for (TemplateParameterList::<u></u>iterator ITPL = TPL->begin(),<br>
- ETPL = TPL->end();<br>
- ITPL != ETPL; ++ITPL) {<br>
- TRY_TO(TraverseDecl(*ITPL));<br>
- }<br>
+ if (D->getFriendType())<br>
+ TRY_TO(TraverseTypeLoc(D-><u></u>getFriendType()->getTypeLoc())<u></u>);<br>
+ else<br>
+ TRY_TO(TraverseDecl(D-><u></u>getFriendDecl()));<br>
+ for (unsigned I = 0, E = D->getNumTemplateParameters(); I < E;<br>
++I) {<br>
+ TemplateParameterList *TPL = D->getTemplateParameterList(I)<u></u>;<br>
+ for (TemplateParameterList::<u></u>iterator ITPL = TPL->begin(),<br>
ETPL = TPL->end();<br>
+ ITPL != ETPL; ++ITPL) {<br>
+ TRY_TO(TraverseDecl(*ITPL));<br>
}<br>
- })<br>
+ }<br>
+})<br>
<br>
-DEF_TRAVERSE_DECL(<u></u>ClassScopeFunctionSpecializati<u></u>onDecl, {<br>
- TRY_TO(TraverseDecl(D-><u></u>getSpecialization()));<br>
- })<br>
+DEF_TRAVERSE_DECL(<u></u>ClassScopeFunctionSpecializati<u></u>onDecl,<br>
+ { TRY_TO(TraverseDecl(D-><u></u>getSpecialization())); })<br>
<br>
-DEF_TRAVERSE_DECL(<u></u>LinkageSpecDecl, { })<br>
+DEF_TRAVERSE_DECL(<u></u>LinkageSpecDecl, {})<br>
<br>
-DEF_TRAVERSE_DECL(<u></u>ObjCPropertyImplDecl, {<br>
- // FIXME: implement this<br>
- })<br>
+DEF_TRAVERSE_DECL(<u></u>ObjCPropertyImplDecl, {// FIXME: implement this<br>
+ })<br>
<br>
DEF_TRAVERSE_DECL(<u></u>StaticAssertDecl, {<br>
- TRY_TO(TraverseStmt(D-><u></u>getAssertExpr()));<br>
- TRY_TO(TraverseStmt(D-><u></u>getMessage()));<br>
- })<br>
-<br>
-DEF_TRAVERSE_DECL(<u></u>TranslationUnitDecl, {<br>
- // Code in an unnamed namespace shows up automatically in<br>
- // decls_begin()/decls_end(). Thus we don't need to recurse on<br>
- // D->getAnonymousNamespace().<br>
- })<br>
+ TRY_TO(TraverseStmt(D-><u></u>getAssertExpr()));<br>
+ TRY_TO(TraverseStmt(D-><u></u>getMessage()));<br>
+})<br>
<br>
-DEF_TRAVERSE_DECL(<u></u>NamespaceAliasDecl, {<br>
- // We shouldn't traverse an aliased namespace, since it will be<br>
- // defined (and, therefore, traversed) somewhere else.<br>
- //<br>
- // This return statement makes sure the traversal of nodes in<br>
- // decls_begin()/decls_end() (done in the DEF_TRAVERSE_DECL<br>
macro)<br>
- // is skipped - don't remove it.<br>
- return true;<br>
- })<br></div></div>
+DEF_TRAVERSE_DECL(<br>
+ TranslationUnitDecl,<br>
+ {// Code in an unnamed namespace shows up automatically in<div class=""><br>
+ // decls_begin()/decls_end(). Thus we don't need to recurse on<br></div><div class="">
+ // D->getAnonymousNamespace().<br>
+ })<br>
<br>
-DEF_TRAVERSE_DECL(LabelDecl, {<br>
- // There is no code in a LabelDecl.<br>
+DEF_TRAVERSE_DECL(<u></u>NamespaceAliasDecl, {<br></div><div class="">
+ // We shouldn't traverse an aliased namespace, since it will be<br>
+ // defined (and, therefore, traversed) somewhere else.<br></div>
+ //<div class=""><br>
+ // This return statement makes sure the traversal of nodes in</div></blockquote>
</blockquote></div><br></div>
<br>_______________________________________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@cs.uiuc.edu">cfe-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits</a><br>
<br></blockquote></div><br></div></div>