diff options
author | Douglas Gregor <dgregor@apple.com> | 2010-09-02 20:35:02 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2010-09-02 20:35:02 +0000 |
commit | 8947a7501ee34577a020591d32f701e4b0656cb7 (patch) | |
tree | edd6d4920e4f7582657d82a4de87ca207b3d7240 /tools/libclang/CIndex.cpp | |
parent | 159e091e52d579f6b0d18f87b8ad505cac46e8f7 (diff) |
Visit the nested-name-specifier and explicitly-specified template
arguments of a DeclRefExpr.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@112854 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'tools/libclang/CIndex.cpp')
-rw-r--r-- | tools/libclang/CIndex.cpp | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/tools/libclang/CIndex.cpp b/tools/libclang/CIndex.cpp index 89aa92cf7d..6367de34a3 100644 --- a/tools/libclang/CIndex.cpp +++ b/tools/libclang/CIndex.cpp @@ -369,7 +369,7 @@ public: // bool VisitSwitchCase(SwitchCase *S); // Expression visitors - // FIXME: DeclRefExpr with template arguments, nested-name-specifier + bool VisitDeclRefExpr(DeclRefExpr *E); // FIXME: MemberExpr with template arguments, nested-name-specifier bool VisitCXXOperatorCallExpr(CXXOperatorCallExpr *E); bool VisitBlockExpr(BlockExpr *B); @@ -1438,6 +1438,29 @@ bool CursorVisitor::VisitForStmt(ForStmt *S) { 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::VisitCXXOperatorCallExpr(CXXOperatorCallExpr *E) { if (Visit(MakeCXCursor(E->getArg(0), StmtParent, TU))) return true; |