[cfe-commits] r118961 - /cfe/trunk/tools/libclang/CIndex.cpp

Ted Kremenek kremenek at apple.com
Fri Nov 12 16:58:18 PST 2010


Author: kremenek
Date: Fri Nov 12 18:58:18 2010
New Revision: 118961

URL: http://llvm.org/viewvc/llvm-project?rev=118961&view=rev
Log:
CursorVisitor: Migrate DeclRefExpr over to data-recursion algorithm.

Modified:
    cfe/trunk/tools/libclang/CIndex.cpp

Modified: cfe/trunk/tools/libclang/CIndex.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/libclang/CIndex.cpp?rev=118961&r1=118960&r2=118961&view=diff
==============================================================================
--- cfe/trunk/tools/libclang/CIndex.cpp (original)
+++ cfe/trunk/tools/libclang/CIndex.cpp Fri Nov 12 18:58:18 2010
@@ -127,7 +127,8 @@
 class VisitorJob {
 public:
   enum Kind { DeclVisitKind, StmtVisitKind, MemberExprPartsKind,
-              TypeLocVisitKind, OverloadExprPartsKind };
+              TypeLocVisitKind, OverloadExprPartsKind,
+              DeclRefExprPartsKind };
 protected:
   void *dataA;
   void *dataB;
@@ -311,7 +312,6 @@
   bool VisitStmt(Stmt *S);
 
   // Expression visitors
-  bool VisitDeclRefExpr(DeclRefExpr *E);
   bool VisitBlockExpr(BlockExpr *B);
   bool VisitObjCEncodeExpr(ObjCEncodeExpr *E);
   bool VisitOffsetOfExpr(OffsetOfExpr *E);
@@ -338,6 +338,7 @@
   DATA_RECURSIVE_VISIT(CompoundLiteralExpr)
   DATA_RECURSIVE_VISIT(CXXMemberCallExpr)
   DATA_RECURSIVE_VISIT(CXXOperatorCallExpr)
+  DATA_RECURSIVE_VISIT(DeclRefExpr)
   DATA_RECURSIVE_VISIT(DeclStmt)
   DATA_RECURSIVE_VISIT(ExplicitCastExpr)
   DATA_RECURSIVE_VISIT(DoStmt)
@@ -1438,29 +1439,6 @@
   return false;
 }
 
-bool CursorVisitor::VisitDeclRefExpr(DeclRefExpr *E) {
-  // Visit nested-name-specifier, if present.
-  if (NestedNameSpecifier *Qualifier = E->getQualifier())
-    if (VisitNestedNameSpecifier(Qualifier, E->getQualifierRange()))
-      return true;
-  
-  // Visit declaration name.
-  if (VisitDeclarationNameInfo(E->getNameInfo()))
-    return true;
-  
-  // Visit explicitly-specified template arguments.
-  if (E->hasExplicitTemplateArgs()) {
-    ExplicitTemplateArgumentList &Args = E->getExplicitTemplateArgs();
-    for (TemplateArgumentLoc *Arg = Args.getTemplateArgs(),
-                          *ArgEnd = Arg + Args.NumTemplateArgs;
-         Arg != ArgEnd; ++Arg)
-      if (VisitTemplateArgumentLoc(*Arg))
-        return true;
-  }
-  
-  return false;
-}
-
 bool CursorVisitor::VisitCXXRecordDecl(CXXRecordDecl *D) {
   if (D->isDefinition()) {
     for (CXXRecordDecl::base_class_iterator I = D->bases_begin(),
@@ -1748,6 +1726,7 @@
 
 DEF_JOB(StmtVisit, Stmt, StmtVisitKind)
 DEF_JOB(MemberExprParts, MemberExpr, MemberExprPartsKind)
+DEF_JOB(DeclRefExprParts, DeclRefExpr, DeclRefExprPartsKind)
 DEF_JOB(OverloadExprParts, OverloadExpr, OverloadExprPartsKind)
 #undef DEF_JOB
 
@@ -1788,6 +1767,7 @@
 
   void VisitCompoundLiteralExpr(CompoundLiteralExpr *E);
   void VisitCXXOperatorCallExpr(CXXOperatorCallExpr *E);
+  void VisitDeclRefExpr(DeclRefExpr *D);
   void VisitDeclStmt(DeclStmt *S);
   void VisitExplicitCastExpr(ExplicitCastExpr *E);
   void VisitForStmt(ForStmt *FS);
@@ -1846,6 +1826,9 @@
   AddStmt(CE->getCallee());
   AddStmt(CE->getArg(0));
 }
+void EnqueueVisitor::VisitDeclRefExpr(DeclRefExpr *DR) {
+  WL.push_back(DeclRefExprParts(DR, Parent));
+}
 void EnqueueVisitor::VisitDeclStmt(DeclStmt *S) {
   unsigned size = WL.size();
   bool isFirst = true;
@@ -2041,6 +2024,26 @@
         }
         continue;
       }
+      case VisitorJob::DeclRefExprPartsKind: {
+        DeclRefExpr *DR = cast<DeclRefExprParts>(LI).get();
+        // Visit nested-name-specifier, if present.
+        if (NestedNameSpecifier *Qualifier = DR->getQualifier())
+          if (VisitNestedNameSpecifier(Qualifier, DR->getQualifierRange()))
+            return true;
+        // Visit declaration name.
+        if (VisitDeclarationNameInfo(DR->getNameInfo()))
+          return true;
+        // Visit explicitly-specified template arguments.
+        if (DR->hasExplicitTemplateArgs()) {
+          ExplicitTemplateArgumentList &Args = DR->getExplicitTemplateArgs();
+          for (TemplateArgumentLoc *Arg = Args.getTemplateArgs(),
+                 *ArgEnd = Arg + Args.NumTemplateArgs;
+               Arg != ArgEnd; ++Arg)
+            if (VisitTemplateArgumentLoc(*Arg))
+              return true;
+        }
+        continue;
+      }
       case VisitorJob::OverloadExprPartsKind: {
         OverloadExpr *O = cast<OverloadExprParts>(LI).get();
         // Visit the nested-name-specifier.





More information about the cfe-commits mailing list