Visit the children of CXXOperatorCallExprs in source order within
libclang, so that clang_annotateTokens() doesn't get confused and miss
annotations.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@109706 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/tools/libclang/CIndex.cpp b/tools/libclang/CIndex.cpp
index c3095e7..1910733 100644
--- a/tools/libclang/CIndex.cpp
+++ b/tools/libclang/CIndex.cpp
@@ -343,6 +343,7 @@
 //  bool VisitSwitchCase(SwitchCase *S);
 
   // Expression visitors
+  bool VisitCXXOperatorCallExpr(CXXOperatorCallExpr *E);
   bool VisitBlockExpr(BlockExpr *B);
   bool VisitCompoundLiteralExpr(CompoundLiteralExpr *E);
   bool VisitExplicitCastExpr(ExplicitCastExpr *E);
@@ -1055,6 +1056,20 @@
   return false;
 }
 
+bool CursorVisitor::VisitCXXOperatorCallExpr(CXXOperatorCallExpr *E) {
+  if (Visit(MakeCXCursor(E->getArg(0), StmtParent, TU)))
+    return true;
+  
+  if (Visit(MakeCXCursor(E->getCallee(), StmtParent, TU)))
+    return true;
+  
+  for (unsigned I = 1, N = E->getNumArgs(); I != N; ++I)
+    if (Visit(MakeCXCursor(E->getArg(I), StmtParent, TU)))
+      return true;
+  
+  return false;
+}
+
 bool CursorVisitor::VisitBlockExpr(BlockExpr *B) {
   return Visit(B->getBlockDecl());
 }