r209091 - Begin RAV reunification: s/DataRecursiveASTVisitor/RecursiveASTVisitor/
Alp Toker
alp at nuanti.com
Sun May 18 13:06:56 PDT 2014
On 18/05/2014 22:29, Argyrios Kyrtzidis wrote:
> Hi Alp,
>
> Thanks for doing this!
>
> I'm not sure what your long-term plan is but I recommend making RAV data recursive and changing its interface accordingly (add *Before/*After visitation callbacks and have clients adopt them, etc.).
> Having it code recursive is just a minefield of stack overflows.
Thanks for sharing your thoughts Argyrios
I agree we'd do well to look at updating the way we do visitation in future.
At the same time I'm mindful that adding pre-post visit variants needs
to be done without doubling the amount of boilerplate code and
maintenance work.
So the short-term goal here is just to get the two copies of the file
into check. In the best-case scenario they'll fold into one header
without requiring any change to the consumers.
Looking to the future I hope we can start to generate
visitation/serialization/matcher routines, either using a central
tablegen description of the AST or by introspecting annotated Decl/Stmt
headers, which will reduce the cost of experimenting with new techniques.
Alp.
>
> On May 18, 2014, at 11:38 AM, Alp Toker <alp at nuanti.com> wrote:
>
>> Author: alp
>> Date: Sun May 18 13:38:08 2014
>> New Revision: 209091
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=209091&view=rev
>> Log:
>> Begin RAV reunification: s/DataRecursiveASTVisitor/RecursiveASTVisitor/
>>
>> Define a macro to reduce the delta between RecursiveASTVisitor and
>> DataRecursiveASTVisitor.
>>
>> Some years ago, someone thought it was a good idea to copy the entire RAV to
>> support cursor visitation in libclang.
>>
>> Since then the two have diverged needlessly and the rest is history.
>>
>> This series of commits aims to reduce delta between the two so that we can
>> reason about their differences, apply bugfixes that were only made to one but
>> not the other, and ultimately find a way to unify two two chunks of code.
>>
>> Modified:
>> cfe/trunk/include/clang/AST/DataRecursiveASTVisitor.h
>>
>> Modified: cfe/trunk/include/clang/AST/DataRecursiveASTVisitor.h
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/DataRecursiveASTVisitor.h?rev=209091&r1=209090&r2=209091&view=diff
>> ==============================================================================
>> --- cfe/trunk/include/clang/AST/DataRecursiveASTVisitor.h (original)
>> +++ cfe/trunk/include/clang/AST/DataRecursiveASTVisitor.h Sun May 18 13:38:08 2014
>> @@ -69,9 +69,13 @@
>>
>> namespace clang {
>>
>> +// Reduce the diff between RecursiveASTVisitor / DataRecursiveASTVisitor to
>> +// make it easier to track changes and keep the two in sync.
>> +#define RecursiveASTVisitor DataRecursiveASTVisitor
>> +
>> // A helper macro to implement short-circuiting when recursing. It
>> // invokes CALL_EXPR, which must be a method call, on the derived
>> -// object (s.t. a user of DataRecursiveASTVisitor can override the method
>> +// object (s.t. a user of RecursiveASTVisitor can override the method
>> // in CALL_EXPR).
>> #define TRY_TO(CALL_EXPR) \
>> do { if (!getDerived().CALL_EXPR) return false; } while (0)
>> @@ -141,7 +145,7 @@ namespace clang {
>> /// instantiations will be visited at the same time as the pattern
>> /// from which they were produced.
>> template<typename Derived>
>> -class DataRecursiveASTVisitor {
>> +class RecursiveASTVisitor {
>> public:
>> /// \brief Return a reference to the derived class.
>> Derived &getDerived() { return *static_cast<Derived*>(this); }
>> @@ -438,9 +442,9 @@ private:
>> QueuesTy Queues;
>>
>> class NewQueueRAII {
>> - DataRecursiveASTVisitor &RAV;
>> + RecursiveASTVisitor &RAV;
>> public:
>> - NewQueueRAII(StmtsTy &queue, DataRecursiveASTVisitor &RAV) : RAV(RAV) {
>> + NewQueueRAII(StmtsTy &queue, RecursiveASTVisitor &RAV) : RAV(RAV) {
>> RAV.Queues.push_back(&queue);
>> }
>> ~NewQueueRAII() {
>> @@ -457,7 +461,7 @@ public:
>> class StmtQueueAction {
>> StmtsTy &CurrQueue;
>> public:
>> - explicit StmtQueueAction(DataRecursiveASTVisitor &RAV)
>> + explicit StmtQueueAction(RecursiveASTVisitor &RAV)
>> : CurrQueue(RAV.getCurrentQueue()) { }
>>
>> void queue(Stmt *S) {
>> @@ -470,7 +474,7 @@ public:
>> return getDerived().Traverse##NAME(static_cast<CLASS*>(VAR))
>>
>> template<typename Derived>
>> -bool DataRecursiveASTVisitor<Derived>::TraverseStmt(Stmt *S) {
>> +bool RecursiveASTVisitor<Derived>::TraverseStmt(Stmt *S) {
>> if (!S)
>> return true;
>>
>> @@ -539,7 +543,7 @@ bool DataRecursiveASTVisitor<Derived>::T
>> }
>>
>> template<typename Derived>
>> -bool DataRecursiveASTVisitor<Derived>::TraverseType(QualType T) {
>> +bool RecursiveASTVisitor<Derived>::TraverseType(QualType T) {
>> if (T.isNull())
>> return true;
>>
>> @@ -555,7 +559,7 @@ bool DataRecursiveASTVisitor<Derived>::T
>> }
>>
>> template<typename Derived>
>> -bool DataRecursiveASTVisitor<Derived>::TraverseTypeLoc(TypeLoc TL) {
>> +bool RecursiveASTVisitor<Derived>::TraverseTypeLoc(TypeLoc TL) {
>> if (TL.isNull())
>> return true;
>>
>> @@ -572,12 +576,12 @@ bool DataRecursiveASTVisitor<Derived>::T
>>
>>
>> // Define the Traverse*Attr(Attr* A) methods
>> -#define VISITORCLASS DataRecursiveASTVisitor
>> +#define VISITORCLASS RecursiveASTVisitor
>> #include "clang/AST/AttrVisitor.inc"
>> #undef VISITORCLASS
>>
>> template<typename Derived>
>> -bool DataRecursiveASTVisitor<Derived>::TraverseDecl(Decl *D) {
>> +bool RecursiveASTVisitor<Derived>::TraverseDecl(Decl *D) {
>> if (!D)
>> return true;
>>
>> @@ -608,7 +612,7 @@ bool DataRecursiveASTVisitor<Derived>::T
>> #undef DISPATCH
>>
>> template<typename Derived>
>> -bool DataRecursiveASTVisitor<Derived>::TraverseNestedNameSpecifier(
>> +bool RecursiveASTVisitor<Derived>::TraverseNestedNameSpecifier(
>> NestedNameSpecifier *NNS) {
>> if (!NNS)
>> return true;
>> @@ -632,7 +636,7 @@ bool DataRecursiveASTVisitor<Derived>::T
>> }
>>
>> template<typename Derived>
>> -bool DataRecursiveASTVisitor<Derived>::TraverseNestedNameSpecifierLoc(
>> +bool RecursiveASTVisitor<Derived>::TraverseNestedNameSpecifierLoc(
>> NestedNameSpecifierLoc NNS) {
>> if (!NNS)
>> return true;
>> @@ -657,7 +661,7 @@ bool DataRecursiveASTVisitor<Derived>::T
>> }
>>
>> template<typename Derived>
>> -bool DataRecursiveASTVisitor<Derived>::TraverseDeclarationNameInfo(
>> +bool RecursiveASTVisitor<Derived>::TraverseDeclarationNameInfo(
>> DeclarationNameInfo NameInfo) {
>> switch (NameInfo.getName().getNameKind()) {
>> case DeclarationName::CXXConstructorName:
>> @@ -682,7 +686,7 @@ bool DataRecursiveASTVisitor<Derived>::T
>> }
>>
>> template<typename Derived>
>> -bool DataRecursiveASTVisitor<Derived>::TraverseTemplateName(TemplateName Template) {
>> +bool RecursiveASTVisitor<Derived>::TraverseTemplateName(TemplateName Template) {
>> if (DependentTemplateName *DTN = Template.getAsDependentTemplateName())
>> TRY_TO(TraverseNestedNameSpecifier(DTN->getQualifier()));
>> else if (QualifiedTemplateName *QTN = Template.getAsQualifiedTemplateName())
>> @@ -692,7 +696,7 @@ bool DataRecursiveASTVisitor<Derived>::T
>> }
>>
>> template<typename Derived>
>> -bool DataRecursiveASTVisitor<Derived>::TraverseTemplateArgument(
>> +bool RecursiveASTVisitor<Derived>::TraverseTemplateArgument(
>> const TemplateArgument &Arg) {
>> switch (Arg.getKind()) {
>> case TemplateArgument::Null:
>> @@ -723,7 +727,7 @@ bool DataRecursiveASTVisitor<Derived>::T
>> // FIXME: no template name location?
>> // FIXME: no source locations for a template argument pack?
>> template<typename Derived>
>> -bool DataRecursiveASTVisitor<Derived>::TraverseTemplateArgumentLoc(
>> +bool RecursiveASTVisitor<Derived>::TraverseTemplateArgumentLoc(
>> const TemplateArgumentLoc &ArgLoc) {
>> const TemplateArgument &Arg = ArgLoc.getArgument();
>>
>> @@ -762,7 +766,7 @@ bool DataRecursiveASTVisitor<Derived>::T
>> }
>>
>> template<typename Derived>
>> -bool DataRecursiveASTVisitor<Derived>::TraverseTemplateArguments(
>> +bool RecursiveASTVisitor<Derived>::TraverseTemplateArguments(
>> const TemplateArgument *Args,
>> unsigned NumArgs) {
>> for (unsigned I = 0; I != NumArgs; ++I) {
>> @@ -773,7 +777,7 @@ bool DataRecursiveASTVisitor<Derived>::T
>> }
>>
>> template<typename Derived>
>> -bool DataRecursiveASTVisitor<Derived>::TraverseConstructorInitializer(
>> +bool RecursiveASTVisitor<Derived>::TraverseConstructorInitializer(
>> CXXCtorInitializer *Init) {
>> if (TypeSourceInfo *TInfo = Init->getTypeSourceInfo())
>> TRY_TO(TraverseTypeLoc(TInfo->getTypeLoc()));
>> @@ -784,7 +788,7 @@ bool DataRecursiveASTVisitor<Derived>::T
>> }
>>
>> template <typename Derived>
>> -bool DataRecursiveASTVisitor<Derived>::TraverseLambdaCapture(LambdaCapture C) {
>> +bool RecursiveASTVisitor<Derived>::TraverseLambdaCapture(LambdaCapture C) {
>> return true;
>> }
>>
>> @@ -793,7 +797,7 @@ bool DataRecursiveASTVisitor<Derived>::T
>> // This macro makes available a variable T, the passed-in type.
>> #define DEF_TRAVERSE_TYPE(TYPE, CODE) \
>> template<typename Derived> \
>> - bool DataRecursiveASTVisitor<Derived>::Traverse##TYPE (TYPE *T) { \
>> + bool RecursiveASTVisitor<Derived>::Traverse##TYPE (TYPE *T) { \
>> TRY_TO(WalkUpFrom##TYPE (T)); \
>> { CODE; } \
>> return true; \
>> @@ -975,7 +979,7 @@ DEF_TRAVERSE_TYPE(AtomicType, {
>> // continue to work.
>> #define DEF_TRAVERSE_TYPELOC(TYPE, CODE) \
>> template<typename Derived> \
>> - bool DataRecursiveASTVisitor<Derived>::Traverse##TYPE##Loc(TYPE##Loc TL) { \
>> + 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)); \
>> @@ -984,7 +988,7 @@ DEF_TRAVERSE_TYPE(AtomicType, {
>> }
>>
>> template<typename Derived>
>> -bool DataRecursiveASTVisitor<Derived>::TraverseQualifiedTypeLoc(
>> +bool RecursiveASTVisitor<Derived>::TraverseQualifiedTypeLoc(
>> QualifiedTypeLoc TL) {
>> // Move this over to the 'main' typeloc tree. Note that this is a
>> // move -- we pretend that we were really looking at the unqualified
>> @@ -1044,7 +1048,7 @@ DEF_TRAVERSE_TYPELOC(AdjustedType, {
>> })
>>
>> template<typename Derived>
>> -bool DataRecursiveASTVisitor<Derived>::TraverseArrayTypeLocHelper(ArrayTypeLoc TL) {
>> +bool RecursiveASTVisitor<Derived>::TraverseArrayTypeLocHelper(ArrayTypeLoc TL) {
>> // This isn't available for ArrayType, but is for the ArrayTypeLoc.
>> TRY_TO(TraverseStmt(TL.getSizeExpr()));
>> return true;
>> @@ -1212,7 +1216,7 @@ DEF_TRAVERSE_TYPELOC(AtomicType, {
>> // than those.
>>
>> template<typename Derived>
>> -bool DataRecursiveASTVisitor<Derived>::TraverseDeclContextHelper(DeclContext *DC) {
>> +bool RecursiveASTVisitor<Derived>::TraverseDeclContextHelper(DeclContext *DC) {
>> if (!DC)
>> return true;
>>
>> @@ -1229,7 +1233,7 @@ bool DataRecursiveASTVisitor<Derived>::T
>> // This macro makes available a variable D, the passed-in decl.
>> #define DEF_TRAVERSE_DECL(DECL, CODE) \
>> template<typename Derived> \
>> -bool DataRecursiveASTVisitor<Derived>::Traverse##DECL (DECL *D) { \
>> +bool RecursiveASTVisitor<Derived>::Traverse##DECL (DECL *D) { \
>> TRY_TO(WalkUpFrom##DECL (D)); \
>> { CODE; } \
>> TRY_TO(TraverseDeclContextHelper(dyn_cast<DeclContext>(D))); \
>> @@ -1390,7 +1394,7 @@ DEF_TRAVERSE_DECL(OMPThreadPrivateDecl,
>>
>> // A helper method for TemplateDecl's children.
>> template<typename Derived>
>> -bool DataRecursiveASTVisitor<Derived>::TraverseTemplateParameterListHelper(
>> +bool RecursiveASTVisitor<Derived>::TraverseTemplateParameterListHelper(
>> TemplateParameterList *TPL) {
>> if (TPL) {
>> for (TemplateParameterList::iterator I = TPL->begin(), E = TPL->end();
>> @@ -1404,7 +1408,7 @@ bool DataRecursiveASTVisitor<Derived>::T
>> // A helper method for traversing the implicit instantiations of a
>> // class template.
>> template<typename Derived>
>> -bool DataRecursiveASTVisitor<Derived>::TraverseClassInstantiations(
>> +bool RecursiveASTVisitor<Derived>::TraverseClassInstantiations(
>> ClassTemplateDecl *D) {
>> for (auto *SD : D->specializations()) {
>> for (auto *RD : SD->redecls()) {
>> @@ -1457,7 +1461,7 @@ DEF_TRAVERSE_DECL(ClassTemplateDecl, {
>> // A helper method for traversing the implicit instantiations of a
>> // class template.
>> template <typename Derived>
>> -bool DataRecursiveASTVisitor<Derived>::TraverseVariableInstantiations(
>> +bool RecursiveASTVisitor<Derived>::TraverseVariableInstantiations(
>> VarTemplateDecl *D) {
>> for (auto *SD : D->specializations()) {
>> for (auto *RD : SD->redecls()) {
>> @@ -1508,7 +1512,7 @@ DEF_TRAVERSE_DECL(
>> // A helper method for traversing the instantiations of a
>> // function while skipping its specializations.
>> template<typename Derived>
>> -bool DataRecursiveASTVisitor<Derived>::TraverseFunctionInstantiations(
>> +bool RecursiveASTVisitor<Derived>::TraverseFunctionInstantiations(
>> FunctionTemplateDecl *D) {
>> for (auto *FD : D->specializations()) {
>> for (auto *RD : FD->redecls()) {
>> @@ -1609,7 +1613,7 @@ DEF_TRAVERSE_DECL(EnumDecl, {
>>
>> // Helper methods for RecordDecl and its children.
>> template<typename Derived>
>> -bool DataRecursiveASTVisitor<Derived>::TraverseRecordHelper(
>> +bool RecursiveASTVisitor<Derived>::TraverseRecordHelper(
>> RecordDecl *D) {
>> // We shouldn't traverse D->getTypeForDecl(); it's a result of
>> // declaring the type, not something that was written in the source.
>> @@ -1619,7 +1623,7 @@ bool DataRecursiveASTVisitor<Derived>::T
>> }
>>
>> template<typename Derived>
>> -bool DataRecursiveASTVisitor<Derived>::TraverseCXXRecordHelper(
>> +bool RecursiveASTVisitor<Derived>::TraverseCXXRecordHelper(
>> CXXRecordDecl *D) {
>> if (!TraverseRecordHelper(D))
>> return false;
>> @@ -1663,7 +1667,7 @@ DEF_TRAVERSE_DECL(ClassTemplateSpecializ
>> })
>>
>> template <typename Derived>
>> -bool DataRecursiveASTVisitor<Derived>::TraverseTemplateArgumentLocsHelper(
>> +bool RecursiveASTVisitor<Derived>::TraverseTemplateArgumentLocsHelper(
>> const TemplateArgumentLoc *TAL, unsigned Count) {
>> for (unsigned I = 0; I < Count; ++I) {
>> TRY_TO(TraverseTemplateArgumentLoc(TAL[I]));
>> @@ -1706,7 +1710,7 @@ DEF_TRAVERSE_DECL(UnresolvedUsingValueDe
>> DEF_TRAVERSE_DECL(IndirectFieldDecl, {})
>>
>> template<typename Derived>
>> -bool DataRecursiveASTVisitor<Derived>::TraverseDeclaratorHelper(DeclaratorDecl *D) {
>> +bool RecursiveASTVisitor<Derived>::TraverseDeclaratorHelper(DeclaratorDecl *D) {
>> TRY_TO(TraverseNestedNameSpecifierLoc(D->getQualifierLoc()));
>> if (D->getTypeSourceInfo())
>> TRY_TO(TraverseTypeLoc(D->getTypeSourceInfo()->getTypeLoc()));
>> @@ -1742,7 +1746,7 @@ DEF_TRAVERSE_DECL(ObjCIvarDecl, {
>> })
>>
>> template<typename Derived>
>> -bool DataRecursiveASTVisitor<Derived>::TraverseFunctionHelper(FunctionDecl *D) {
>> +bool RecursiveASTVisitor<Derived>::TraverseFunctionHelper(FunctionDecl *D) {
>> TRY_TO(TraverseNestedNameSpecifierLoc(D->getQualifierLoc()));
>> TRY_TO(TraverseDeclarationNameInfo(D->getNameInfo()));
>>
>> @@ -1817,7 +1821,7 @@ DEF_TRAVERSE_DECL(CXXDestructorDecl, {
>> })
>>
>> template<typename Derived>
>> -bool DataRecursiveASTVisitor<Derived>::TraverseVarHelper(VarDecl *D) {
>> +bool RecursiveASTVisitor<Derived>::TraverseVarHelper(VarDecl *D) {
>> TRY_TO(TraverseDeclaratorHelper(D));
>> // Default params are taken care of when we traverse the ParmVarDecl.
>> if (!isa<ParmVarDecl>(D))
>> @@ -1905,7 +1909,7 @@ DEF_TRAVERSE_DECL(ParmVarDecl, {
>> // This macro makes available a variable S, the passed-in stmt.
>> #define DEF_TRAVERSE_STMT(STMT, CODE) \
>> template<typename Derived> \
>> -bool DataRecursiveASTVisitor<Derived>::Traverse##STMT (STMT *S) { \
>> +bool RecursiveASTVisitor<Derived>::Traverse##STMT (STMT *S) { \
>> TRY_TO(WalkUpFrom##STMT(S)); \
>> StmtQueueAction StmtQueue(*this); \
>> { CODE; } \
>> @@ -2052,7 +2056,7 @@ DEF_TRAVERSE_STMT(CXXStaticCastExpr, {
>> // calls WalkUp*() on the semantic form, before our code can convert
>> // to the syntactic form.
>> template<typename Derived>
>> -bool DataRecursiveASTVisitor<Derived>::TraverseInitListExpr(InitListExpr *S) {
>> +bool RecursiveASTVisitor<Derived>::TraverseInitListExpr(InitListExpr *S) {
>> if (InitListExpr *Syn = S->getSyntacticForm())
>> S = Syn;
>> TRY_TO(WalkUpFromInitListExpr(S));
>> @@ -2068,7 +2072,7 @@ bool DataRecursiveASTVisitor<Derived>::T
>> // are interleaved. We also need to watch out for null types (default
>> // generic associations).
>> template<typename Derived>
>> -bool DataRecursiveASTVisitor<Derived>::
>> +bool RecursiveASTVisitor<Derived>::
>> TraverseGenericSelectionExpr(GenericSelectionExpr *S) {
>> TRY_TO(WalkUpFromGenericSelectionExpr(S));
>> StmtQueueAction StmtQueue(*this);
>> @@ -2084,7 +2088,7 @@ TraverseGenericSelectionExpr(GenericSele
>> // PseudoObjectExpr is a special case because of the wierdness with
>> // syntactic expressions and opaque values.
>> template<typename Derived>
>> -bool DataRecursiveASTVisitor<Derived>::
>> +bool RecursiveASTVisitor<Derived>::
>> TraversePseudoObjectExpr(PseudoObjectExpr *S) {
>> TRY_TO(WalkUpFromPseudoObjectExpr(S));
>> StmtQueueAction StmtQueue(*this);
>> @@ -2164,7 +2168,7 @@ DEF_TRAVERSE_STMT(CXXTemporaryObjectExpr
>>
>> // Walk only the visible parts of lambda expressions.
>> template<typename Derived>
>> -bool DataRecursiveASTVisitor<Derived>::TraverseLambdaExpr(LambdaExpr *S) {
>> +bool RecursiveASTVisitor<Derived>::TraverseLambdaExpr(LambdaExpr *S) {
>> TRY_TO(WalkUpFromLambdaExpr(S));
>>
>> for (LambdaExpr::capture_iterator C = S->explicit_capture_begin(),
>> @@ -2323,7 +2327,7 @@ DEF_TRAVERSE_STMT(AsTypeExpr, { })
>>
>> // OpenMP directives.
>> template<typename Derived>
>> -bool DataRecursiveASTVisitor<Derived>::TraverseOMPExecutableDirective(
>> +bool RecursiveASTVisitor<Derived>::TraverseOMPExecutableDirective(
>> OMPExecutableDirective *S) {
>> ArrayRef<OMPClause *> Clauses = S->clauses();
>> for (ArrayRef<OMPClause *>::iterator I = Clauses.begin(), E = Clauses.end();
>> @@ -2342,7 +2346,7 @@ DEF_TRAVERSE_STMT(OMPSimdDirective, {
>>
>> // OpenMP clauses.
>> template<typename Derived>
>> -bool DataRecursiveASTVisitor<Derived>::TraverseOMPClause(OMPClause *C) {
>> +bool RecursiveASTVisitor<Derived>::TraverseOMPClause(OMPClause *C) {
>> if (!C) return true;
>> switch (C->getClauseKind()) {
>> #define OPENMP_CLAUSE(Name, Class) \
>> @@ -2355,72 +2359,72 @@ bool DataRecursiveASTVisitor<Derived>::T
>> }
>>
>> template<typename Derived>
>> -bool DataRecursiveASTVisitor<Derived>::VisitOMPIfClause(OMPIfClause *C) {
>> +bool RecursiveASTVisitor<Derived>::VisitOMPIfClause(OMPIfClause *C) {
>> TraverseStmt(C->getCondition());
>> return true;
>> }
>>
>> template<typename Derived>
>> -bool DataRecursiveASTVisitor<Derived>::VisitOMPNumThreadsClause(
>> +bool RecursiveASTVisitor<Derived>::VisitOMPNumThreadsClause(
>> OMPNumThreadsClause *C) {
>> TraverseStmt(C->getNumThreads());
>> return true;
>> }
>>
>> template<typename Derived>
>> -bool DataRecursiveASTVisitor<Derived>::VisitOMPSafelenClause(
>> +bool RecursiveASTVisitor<Derived>::VisitOMPSafelenClause(
>> OMPSafelenClause *C) {
>> TraverseStmt(C->getSafelen());
>> return true;
>> }
>>
>> template<typename Derived>
>> -bool DataRecursiveASTVisitor<Derived>::VisitOMPDefaultClause(OMPDefaultClause *C) {
>> +bool RecursiveASTVisitor<Derived>::VisitOMPDefaultClause(OMPDefaultClause *C) {
>> return true;
>> }
>>
>> template<typename Derived>
>> bool
>> -DataRecursiveASTVisitor<Derived>::VisitOMPProcBindClause(OMPProcBindClause *C) {
>> +RecursiveASTVisitor<Derived>::VisitOMPProcBindClause(OMPProcBindClause *C) {
>> return true;
>> }
>>
>> template<typename Derived>
>> template<typename T>
>> -void DataRecursiveASTVisitor<Derived>::VisitOMPClauseList(T *Node) {
>> +void RecursiveASTVisitor<Derived>::VisitOMPClauseList(T *Node) {
>> for (auto *I : Node->varlists())
>> TraverseStmt(I);
>> }
>>
>> template<typename Derived>
>> -bool DataRecursiveASTVisitor<Derived>::VisitOMPPrivateClause(OMPPrivateClause *C) {
>> +bool RecursiveASTVisitor<Derived>::VisitOMPPrivateClause(OMPPrivateClause *C) {
>> VisitOMPClauseList(C);
>> return true;
>> }
>>
>> template<typename Derived>
>> -bool DataRecursiveASTVisitor<Derived>::VisitOMPFirstprivateClause(
>> +bool RecursiveASTVisitor<Derived>::VisitOMPFirstprivateClause(
>> OMPFirstprivateClause *C) {
>> VisitOMPClauseList(C);
>> return true;
>> }
>>
>> template<typename Derived>
>> -bool DataRecursiveASTVisitor<Derived>::VisitOMPSharedClause(OMPSharedClause *C) {
>> +bool RecursiveASTVisitor<Derived>::VisitOMPSharedClause(OMPSharedClause *C) {
>> VisitOMPClauseList(C);
>> return true;
>> }
>>
>> template<typename Derived>
>> bool
>> -DataRecursiveASTVisitor<Derived>::VisitOMPLinearClause(OMPLinearClause *C) {
>> +RecursiveASTVisitor<Derived>::VisitOMPLinearClause(OMPLinearClause *C) {
>> VisitOMPClauseList(C);
>> TraverseStmt(C->getStep());
>> return true;
>> }
>>
>> template<typename Derived>
>> -bool DataRecursiveASTVisitor<Derived>::VisitOMPCopyinClause(OMPCopyinClause *C) {
>> +bool RecursiveASTVisitor<Derived>::VisitOMPCopyinClause(OMPCopyinClause *C) {
>> VisitOMPClauseList(C);
>> return true;
>> }
>> @@ -2446,6 +2450,8 @@ bool DataRecursiveASTVisitor<Derived>::V
>>
>> #undef TRY_TO
>>
>> +#undef RecursiveASTVisitor
>> +
>> } // end namespace clang
>>
>> #endif // LLVM_CLANG_LIBCLANG_RECURSIVEASTVISITOR_H
>>
>>
>> _______________________________________________
>> cfe-commits mailing list
>> cfe-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
--
http://www.nuanti.com
the browser experts
More information about the cfe-commits
mailing list