From: Douglas Gregor Date: Thu, 2 Sep 2010 22:19:24 +0000 (+0000) Subject: Add libclang visitation for UnresolvedLookupExprs X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=8ab670ee2b8147da63d1f282d928e754e4e97408;p=clang Add libclang visitation for UnresolvedLookupExprs git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@112879 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/test/Index/load-stmts.cpp b/test/Index/load-stmts.cpp index df21f2c722..fdc0027ced 100644 --- a/test/Index/load-stmts.cpp +++ b/test/Index/load-stmts.cpp @@ -38,6 +38,16 @@ void test_exprs(C *c) { int_ptr->Integer::~Integer(); } +namespace N { + int f(int); + float f(float); +} + +template +void test_dependent_exprs(T t) { + N::f(t); +} + // RUN: c-index-test -test-load-source all %s | FileCheck %s // CHECK: load-stmts.cpp:1:13: TypedefDecl=T:1:13 (Definition) Extent=[1:13 - 1:14] // CHECK: load-stmts.cpp:2:8: StructDecl=X:2:8 (Definition) Extent=[2:1 - 2:23] @@ -103,3 +113,7 @@ void test_exprs(C *c) { // CHECK: load-stmts.cpp:38:3: DeclRefExpr=int_ptr:37:12 Extent=[38:3 - 38:10] // CHECK: load-stmts.cpp:38:12: TypeRef=Integer:36:15 Extent=[38:12 - 38:19] // CHECK: load-stmts.cpp:38:22: TypeRef=Integer:36:15 Extent=[38:22 - 38:29] +// CHECK: load-stmts.cpp:47:6: FunctionTemplate=test_dependent_exprs:47:6 (Definition) +// CHECK: load-stmts.cpp:48:3: CallExpr= Extent=[48:3 - 48:10] +// CHECK: load-stmts.cpp:48:3: NamespaceRef=N:41:11 Extent=[48:3 - 48:4] +// CHECK: load-stmts.cpp:48:8: DeclRefExpr=t:47:29 Extent=[48:8 - 48:9] diff --git a/tools/libclang/CIndex.cpp b/tools/libclang/CIndex.cpp index d3c3c6e4fa..f30dd61ece 100644 --- a/tools/libclang/CIndex.cpp +++ b/tools/libclang/CIndex.cpp @@ -386,10 +386,12 @@ public: // FIXME: DesignatedInitExpr bool VisitCXXTypeidExpr(CXXTypeidExpr *E); bool VisitCXXDefaultArgExpr(CXXDefaultArgExpr *E) { return false; } - // FIXME: CXXTemporaryObjectExpr has poor source-location information - // FIXME: CXXScalarValueInitExpr has poor source-location information + // FIXME: CXXTemporaryObjectExpr has poor source-location information. + // FIXME: CXXScalarValueInitExpr has poor source-location information. // FIXME: CXXNewExpr has poor source-location information bool VisitCXXPseudoDestructorExpr(CXXPseudoDestructorExpr *E); + // FIXME: UnaryTypeTraitExpr has poor source-location information. + bool VisitUnresolvedLookupExpr(UnresolvedLookupExpr *E); }; } // end anonymous namespace @@ -1608,6 +1610,21 @@ bool CursorVisitor::VisitCXXPseudoDestructorExpr(CXXPseudoDestructorExpr *E) { return false; } +bool CursorVisitor::VisitUnresolvedLookupExpr(UnresolvedLookupExpr *E) { + // Visit the nested-name-specifier. + if (NestedNameSpecifier *Qualifier = E->getQualifier()) + if (VisitNestedNameSpecifier(Qualifier, E->getQualifierRange())) + return true; + + // Visit the declaration name. + if (VisitDeclarationNameInfo(E->getNameInfo())) + return true; + + // FIXME: We don't have a way to visit all of the declarations referenced + // here. + return false; +} + bool CursorVisitor::VisitObjCMessageExpr(ObjCMessageExpr *E) { if (TypeSourceInfo *TSInfo = E->getClassReceiverTypeInfo()) if (Visit(TSInfo->getTypeLoc()))