diff options
author | Douglas Gregor <dgregor@apple.com> | 2010-07-29 00:26:18 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2010-07-29 00:26:18 +0000 |
commit | b59d21c22b7ca8d66f15e7f99f4a1aae9ebe6920 (patch) | |
tree | d0620940e3d2075f4f094b5be870bf5de0dee1f2 /clang/tools/libclang/CIndex.cpp | |
parent | 3d6ac44d96f806c2c643dd608cc7f2edcb99ebc3 (diff) | |
download | bcm5719-llvm-b59d21c22b7ca8d66f15e7f99f4a1aae9ebe6920.tar.gz bcm5719-llvm-b59d21c22b7ca8d66f15e7f99f4a1aae9ebe6920.zip |
Visit the children of CXXOperatorCallExprs in source order within
libclang, so that clang_annotateTokens() doesn't get confused and miss
annotations.
llvm-svn: 109706
Diffstat (limited to 'clang/tools/libclang/CIndex.cpp')
-rw-r--r-- | clang/tools/libclang/CIndex.cpp | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/clang/tools/libclang/CIndex.cpp b/clang/tools/libclang/CIndex.cpp index c3095e7c915..19107333ee3 100644 --- a/clang/tools/libclang/CIndex.cpp +++ b/clang/tools/libclang/CIndex.cpp @@ -343,6 +343,7 @@ public: // 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 @@ bool CursorVisitor::VisitForStmt(ForStmt *S) { 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()); } |