CursorVisitor: migrate CXXNewExpr and CXXDefaultArgExpr over to data-recursive algorithm.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@118989 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/tools/libclang/CIndex.cpp b/tools/libclang/CIndex.cpp
index e87ec05..062a367 100644
--- a/tools/libclang/CIndex.cpp
+++ b/tools/libclang/CIndex.cpp
@@ -320,9 +320,7 @@
   bool VisitDesignatedInitExpr(DesignatedInitExpr *E);
   bool VisitCXXTypeidExpr(CXXTypeidExpr *E);
   bool VisitCXXUuidofExpr(CXXUuidofExpr *E);
-  bool VisitCXXDefaultArgExpr(CXXDefaultArgExpr *E) { return false; }
   bool VisitCXXScalarValueInitExpr(CXXScalarValueInitExpr *E);
-  bool VisitCXXNewExpr(CXXNewExpr *E);
   bool VisitCXXPseudoDestructorExpr(CXXPseudoDestructorExpr *E);
   bool VisitUnaryTypeTraitExpr(UnaryTypeTraitExpr *E);
   bool VisitDependentScopeDeclRefExpr(DependentScopeDeclRefExpr *E);
@@ -334,7 +332,9 @@
   DATA_RECURSIVE_VISIT(BinaryOperator)
   DATA_RECURSIVE_VISIT(BlockExpr)
   DATA_RECURSIVE_VISIT(CompoundLiteralExpr)
+  DATA_RECURSIVE_VISIT(CXXDefaultArgExpr)
   DATA_RECURSIVE_VISIT(CXXMemberCallExpr)
+  DATA_RECURSIVE_VISIT(CXXNewExpr)
   DATA_RECURSIVE_VISIT(CXXOperatorCallExpr)
   DATA_RECURSIVE_VISIT(CXXTemporaryObjectExpr)
   DATA_RECURSIVE_VISIT(DeclRefExpr)
@@ -1569,29 +1569,6 @@
   return false;
 }
 
-bool CursorVisitor::VisitCXXNewExpr(CXXNewExpr *E) {
-  // Visit placement arguments.
-  for (unsigned I = 0, N = E->getNumPlacementArgs(); I != N; ++I)
-    if (Visit(MakeCXCursor(E->getPlacementArg(I), StmtParent, TU)))
-      return true;
-  
-  // Visit the allocated type.
-  if (TypeSourceInfo *TSInfo = E->getAllocatedTypeSourceInfo())
-    if (Visit(TSInfo->getTypeLoc()))
-      return true;
-  
-  // Visit the array size, if any.
-  if (E->isArray() && Visit(MakeCXCursor(E->getArraySize(), StmtParent, TU)))
-    return true;
-  
-  // Visit the initializer or constructor arguments.
-  for (unsigned I = 0, N = E->getNumConstructorArgs(); I != N; ++I)
-    if (Visit(MakeCXCursor(E->getConstructorArg(I), StmtParent, TU)))
-      return true;
-  
-  return false;
-}
-
 bool CursorVisitor::VisitCXXPseudoDestructorExpr(CXXPseudoDestructorExpr *E) {
   // Visit base expression.
   if (Visit(MakeCXCursor(E->getBase(), StmtParent, TU)))
@@ -1750,6 +1727,8 @@
   void VisitBlockExpr(BlockExpr *B);
   void VisitCompoundLiteralExpr(CompoundLiteralExpr *E);
   void VisitCompoundStmt(CompoundStmt *S);
+  void VisitCXXDefaultArgExpr(CXXDefaultArgExpr *E) { /* Do nothing. */ }
+  void VisitCXXNewExpr(CXXNewExpr *E);
   void VisitCXXOperatorCallExpr(CXXOperatorCallExpr *E);
   void VisitCXXTemporaryObjectExpr(CXXTemporaryObjectExpr *E);
   void VisitDeclRefExpr(DeclRefExpr *D);
@@ -1812,7 +1791,19 @@
         E = S->body_rend(); I != E; ++I) {
     AddStmt(*I);
   }
-}  
+}
+void EnqueueVisitor::VisitCXXNewExpr(CXXNewExpr *E) {
+  // Enqueue the initializer or constructor arguments.
+  for (unsigned I = E->getNumConstructorArgs(); I > 0; --I)
+    AddStmt(E->getConstructorArg(I-1));
+  // Enqueue the array size, if any.
+  AddStmt(E->getArraySize());
+  // Enqueue the allocated type.
+  AddTypeLoc(E->getAllocatedTypeSourceInfo());
+  // Enqueue the placement arguments.
+  for (unsigned I = E->getNumPlacementArgs(); I > 0; --I)
+    AddStmt(E->getPlacementArg(I-1));
+}
 void EnqueueVisitor::VisitCXXOperatorCallExpr(CXXOperatorCallExpr *CE) {
   // Note that we enqueue things in reverse order so that
   // they are visited correctly by the DFS.
@@ -1972,7 +1963,9 @@
           case Stmt::CaseStmtClass:
           case Stmt::CompoundLiteralExprClass:
           case Stmt::CompoundStmtClass:
+          case Stmt::CXXDefaultArgExprClass:
           case Stmt::CXXMemberCallExprClass:
+          case Stmt::CXXNewExprClass:
           case Stmt::CXXOperatorCallExprClass:
           case Stmt::CXXTemporaryObjectExprClass:
           case Stmt::DefaultStmtClass: