r209091 - Begin RAV reunification: s/DataRecursiveASTVisitor/RecursiveASTVisitor/

Richard Smith richard at metafoo.co.uk
Sun May 18 13:39:37 PDT 2014


On Sun, May 18, 2014 at 1:06 PM, Alp Toker <alp at nuanti.com> wrote:

>
> On 18/05/2014 22:29, Argyrios Kyrtzidis wrote:
>
>> Hi Alp,
>>
>> Thanks for doing this!
>>
>
+1 =)

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.
>

Even if we can't get back to a single visitor class, we should at least be
able to factor out the differences into some kind of policy parameter to
the template.


> 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>::TraverseTemplateParameterListH
>>> elper(
>>> +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>::TraverseTemplateArgumentLocsHe
>>> lper(
>>> +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
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20140518/f7f84244/attachment.html>


More information about the cfe-commits mailing list