diff options
author | Steve Naroff <snaroff@apple.com> | 2009-09-25 21:32:34 +0000 |
---|---|---|
committer | Steve Naroff <snaroff@apple.com> | 2009-09-25 21:32:34 +0000 |
commit | 699a07d8a0b1579c5178b3baf4bcf9edb6b38108 (patch) | |
tree | 6e29a00c4ba82e4158e113990a72553b44bf8332 | |
parent | b3c477415f49668be7a770c8f44c217b42e3ccd3 (diff) |
Add clang_getDeclLine and clang_getDeclColumn
Fix clang_getCursorDecl to do the right thing for expr refs
Fixup test file to accommodate new output (which includes the line/column for the referenced decl)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@82798 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | include/clang-c/Index.h | 3 | ||||
-rw-r--r-- | test/Index/c-index-api-test.m | 178 | ||||
-rw-r--r-- | tools/CIndex/CIndex.cpp | 45 | ||||
-rw-r--r-- | tools/CIndex/CIndex.exports | 2 | ||||
-rw-r--r-- | tools/c-index-test/c-index-test.c | 9 |
5 files changed, 146 insertions, 91 deletions
diff --git a/include/clang-c/Index.h b/include/clang-c/Index.h index 24f3c54ba5..2203e28723 100644 --- a/include/clang-c/Index.h +++ b/include/clang-c/Index.h @@ -175,6 +175,9 @@ CXEntity clang_getEntity(const char *URI); CXCursor clang_getCursorFromDecl(CXDecl); CXEntity clang_getEntityFromDecl(CXDecl); const char *clang_getDeclSpelling(CXDecl); +unsigned clang_getDeclLine(CXDecl); +unsigned clang_getDeclColumn(CXDecl); + /* * CXCursor Operations. */ diff --git a/test/Index/c-index-api-test.m b/test/Index/c-index-api-test.m index 5eb1df7895..1a926bcea4 100644 --- a/test/Index/c-index-api-test.m +++ b/test/Index/c-index-api-test.m @@ -96,97 +96,97 @@ int main (int argc, const char * argv[]) { // CHECK: c-index-api-test.m:76:6: VarDecl=a [Context:a] // CHECK: c-index-api-test.m:76:7: VarDecl=a [Context:a] // CHECK: c-index-api-test.m:76:8: VarDecl=a [Context:a] -// CHECK: c-index-api-test.m:76:9: ObjCSelectorRef=foo [Context:a] -// CHECK: c-index-api-test.m:76:10: VarRef=bee [Context:a] -// CHECK: c-index-api-test.m:76:11: VarRef=bee [Context:a] -// CHECK: c-index-api-test.m:76:12: VarRef=bee [Context:a] -// CHECK: c-index-api-test.m:76:13: ObjCSelectorRef=foo [Context:a] -// CHECK: c-index-api-test.m:76:14: ObjCSelectorRef=foo [Context:a] -// CHECK: c-index-api-test.m:76:15: ObjCSelectorRef=foo [Context:a] -// CHECK: c-index-api-test.m:76:16: ObjCSelectorRef=foo [Context:a] -// CHECK: c-index-api-test.m:76:17: ObjCSelectorRef=foo [Context:a] +// CHECK: c-index-api-test.m:76:9: ObjCSelectorRef=foo:15:15 [Context:a] +// CHECK: c-index-api-test.m:76:10: VarRef=bee:75:75 [Context:a] +// CHECK: c-index-api-test.m:76:11: VarRef=bee:75:75 [Context:a] +// CHECK: c-index-api-test.m:76:12: VarRef=bee:75:75 [Context:a] +// CHECK: c-index-api-test.m:76:13: ObjCSelectorRef=foo:15:15 [Context:a] +// CHECK: c-index-api-test.m:76:14: ObjCSelectorRef=foo:15:15 [Context:a] +// CHECK: c-index-api-test.m:76:15: ObjCSelectorRef=foo:15:15 [Context:a] +// CHECK: c-index-api-test.m:76:16: ObjCSelectorRef=foo:15:15 [Context:a] +// CHECK: c-index-api-test.m:76:17: ObjCSelectorRef=foo:15:15 [Context:a] // CHECK: c-index-api-test.m:77:12: VarDecl=c [Context:c] // CHECK: c-index-api-test.m:77:13: VarDecl=c [Context:c] // CHECK: c-index-api-test.m:77:14: VarDecl=c [Context:c] // CHECK: c-index-api-test.m:77:15: VarDecl=c [Context:c] -// CHECK: c-index-api-test.m:77:16: ObjCSelectorRef=fooC [Context:c] -// CHECK: c-index-api-test.m:77:17: ObjCSelectorRef=fooC [Context:c] -// CHECK: c-index-api-test.m:77:18: ObjCSelectorRef=fooC [Context:c] -// CHECK: c-index-api-test.m:77:19: ObjCSelectorRef=fooC [Context:c] -// CHECK: c-index-api-test.m:77:20: ObjCSelectorRef=fooC [Context:c] -// CHECK: c-index-api-test.m:77:21: ObjCSelectorRef=fooC [Context:c] -// CHECK: c-index-api-test.m:77:22: ObjCSelectorRef=fooC [Context:c] -// CHECK: c-index-api-test.m:77:23: ObjCSelectorRef=fooC [Context:c] -// CHECK: c-index-api-test.m:77:24: ObjCSelectorRef=fooC [Context:c] -// CHECK: c-index-api-test.m:77:25: ObjCSelectorRef=fooC [Context:c] +// CHECK: c-index-api-test.m:77:16: ObjCSelectorRef=fooC:16:16 [Context:c] +// CHECK: c-index-api-test.m:77:17: ObjCSelectorRef=fooC:16:16 [Context:c] +// CHECK: c-index-api-test.m:77:18: ObjCSelectorRef=fooC:16:16 [Context:c] +// CHECK: c-index-api-test.m:77:19: ObjCSelectorRef=fooC:16:16 [Context:c] +// CHECK: c-index-api-test.m:77:20: ObjCSelectorRef=fooC:16:16 [Context:c] +// CHECK: c-index-api-test.m:77:21: ObjCSelectorRef=fooC:16:16 [Context:c] +// CHECK: c-index-api-test.m:77:22: ObjCSelectorRef=fooC:16:16 [Context:c] +// CHECK: c-index-api-test.m:77:23: ObjCSelectorRef=fooC:16:16 [Context:c] +// CHECK: c-index-api-test.m:77:24: ObjCSelectorRef=fooC:16:16 [Context:c] +// CHECK: c-index-api-test.m:77:25: ObjCSelectorRef=fooC:16:16 [Context:c] // CHECK: c-index-api-test.m:78:13: VarDecl=d [Context:d] -// CHECK: c-index-api-test.m:79:2: VarRef=d [Context:main] -// CHECK: c-index-api-test.m:79:6: VarRef=c [Context:main] -// CHECK: c-index-api-test.m:80:2: ObjCSelectorRef=pMethod [Context:main] -// CHECK: c-index-api-test.m:80:3: VarRef=d [Context:main] -// CHECK: c-index-api-test.m:80:4: ObjCSelectorRef=pMethod [Context:main] -// CHECK: c-index-api-test.m:80:5: ObjCSelectorRef=pMethod [Context:main] -// CHECK: c-index-api-test.m:80:6: ObjCSelectorRef=pMethod [Context:main] -// CHECK: c-index-api-test.m:80:7: ObjCSelectorRef=pMethod [Context:main] -// CHECK: c-index-api-test.m:80:8: ObjCSelectorRef=pMethod [Context:main] -// CHECK: c-index-api-test.m:80:9: ObjCSelectorRef=pMethod [Context:main] -// CHECK: c-index-api-test.m:80:10: ObjCSelectorRef=pMethod [Context:main] -// CHECK: c-index-api-test.m:80:11: ObjCSelectorRef=pMethod [Context:main] -// CHECK: c-index-api-test.m:80:12: ObjCSelectorRef=pMethod [Context:main] -// CHECK: c-index-api-test.m:81:2: ObjCSelectorRef=catMethodWithFloat: [Context:main] -// CHECK: c-index-api-test.m:81:3: VarRef=bee [Context:main] -// CHECK: c-index-api-test.m:81:4: VarRef=bee [Context:main] -// CHECK: c-index-api-test.m:81:5: VarRef=bee [Context:main] -// CHECK: c-index-api-test.m:81:6: ObjCSelectorRef=catMethodWithFloat: [Context:main] -// CHECK: c-index-api-test.m:81:7: ObjCSelectorRef=catMethodWithFloat: [Context:main] -// CHECK: c-index-api-test.m:81:8: ObjCSelectorRef=catMethodWithFloat: [Context:main] -// CHECK: c-index-api-test.m:81:9: ObjCSelectorRef=catMethodWithFloat: [Context:main] -// CHECK: c-index-api-test.m:81:10: ObjCSelectorRef=catMethodWithFloat: [Context:main] -// CHECK: c-index-api-test.m:81:11: ObjCSelectorRef=catMethodWithFloat: [Context:main] -// CHECK: c-index-api-test.m:81:12: ObjCSelectorRef=catMethodWithFloat: [Context:main] -// CHECK: c-index-api-test.m:81:13: ObjCSelectorRef=catMethodWithFloat: [Context:main] -// CHECK: c-index-api-test.m:81:14: ObjCSelectorRef=catMethodWithFloat: [Context:main] -// CHECK: c-index-api-test.m:81:15: ObjCSelectorRef=catMethodWithFloat: [Context:main] -// CHECK: c-index-api-test.m:81:16: ObjCSelectorRef=catMethodWithFloat: [Context:main] -// CHECK: c-index-api-test.m:81:17: ObjCSelectorRef=catMethodWithFloat: [Context:main] -// CHECK: c-index-api-test.m:81:18: ObjCSelectorRef=catMethodWithFloat: [Context:main] -// CHECK: c-index-api-test.m:81:19: ObjCSelectorRef=catMethodWithFloat: [Context:main] -// CHECK: c-index-api-test.m:81:20: ObjCSelectorRef=catMethodWithFloat: [Context:main] -// CHECK: c-index-api-test.m:81:21: ObjCSelectorRef=catMethodWithFloat: [Context:main] -// CHECK: c-index-api-test.m:81:22: ObjCSelectorRef=catMethodWithFloat: [Context:main] -// CHECK: c-index-api-test.m:81:23: ObjCSelectorRef=catMethodWithFloat: [Context:main] -// CHECK: c-index-api-test.m:81:24: ObjCSelectorRef=catMethodWithFloat: [Context:main] -// CHECK: c-index-api-test.m:81:25: ObjCSelectorRef=catMethodWithFloat: [Context:main] -// CHECK: c-index-api-test.m:81:26: ObjCSelectorRef=floatMethod [Context:main] -// CHECK: c-index-api-test.m:81:27: VarRef=bee [Context:main] -// CHECK: c-index-api-test.m:81:28: VarRef=bee [Context:main] -// CHECK: c-index-api-test.m:81:29: VarRef=bee [Context:main] -// CHECK: c-index-api-test.m:81:30: ObjCSelectorRef=floatMethod [Context:main] -// CHECK: c-index-api-test.m:81:31: ObjCSelectorRef=floatMethod [Context:main] -// CHECK: c-index-api-test.m:81:32: ObjCSelectorRef=floatMethod [Context:main] -// CHECK: c-index-api-test.m:81:33: ObjCSelectorRef=floatMethod [Context:main] -// CHECK: c-index-api-test.m:81:34: ObjCSelectorRef=floatMethod [Context:main] -// CHECK: c-index-api-test.m:81:35: ObjCSelectorRef=floatMethod [Context:main] -// CHECK: c-index-api-test.m:81:36: ObjCSelectorRef=floatMethod [Context:main] -// CHECK: c-index-api-test.m:81:37: ObjCSelectorRef=floatMethod [Context:main] -// CHECK: c-index-api-test.m:81:38: ObjCSelectorRef=floatMethod [Context:main] -// CHECK: c-index-api-test.m:81:39: ObjCSelectorRef=floatMethod [Context:main] -// CHECK: c-index-api-test.m:81:40: ObjCSelectorRef=floatMethod [Context:main] -// CHECK: c-index-api-test.m:81:41: ObjCSelectorRef=floatMethod [Context:main] -// CHECK: c-index-api-test.m:81:42: ObjCSelectorRef=floatMethod [Context:main] -// CHECK: c-index-api-test.m:81:43: ObjCSelectorRef=catMethodWithFloat: [Context:main] -// CHECK: c-index-api-test.m:82:3: FunctionRef=main [Context:main] -// CHECK: c-index-api-test.m:82:4: FunctionRef=main [Context:main] -// CHECK: c-index-api-test.m:82:5: FunctionRef=main [Context:main] -// CHECK: c-index-api-test.m:82:6: FunctionRef=main [Context:main] -// CHECK: c-index-api-test.m:82:8: EnumConstantRef=someEnum [Context:main] -// CHECK: c-index-api-test.m:82:9: EnumConstantRef=someEnum [Context:main] -// CHECK: c-index-api-test.m:82:10: EnumConstantRef=someEnum [Context:main] -// CHECK: c-index-api-test.m:82:11: EnumConstantRef=someEnum [Context:main] -// CHECK: c-index-api-test.m:82:12: EnumConstantRef=someEnum [Context:main] -// CHECK: c-index-api-test.m:82:13: EnumConstantRef=someEnum [Context:main] -// CHECK: c-index-api-test.m:82:14: EnumConstantRef=someEnum [Context:main] -// CHECK: c-index-api-test.m:82:15: EnumConstantRef=someEnum [Context:main] -// CHECK: c-index-api-test.m:82:33: VarRef=bee [Context:main] -// CHECK: c-index-api-test.m:82:34: VarRef=bee [Context:main] -// CHECK: c-index-api-test.m:82:35: VarRef=bee [Context:main] +// CHECK: c-index-api-test.m:79:2: VarRef=d:78:78 [Context:main] +// CHECK: c-index-api-test.m:79:6: VarRef=c:77:77 [Context:main] +// CHECK: c-index-api-test.m:80:2: ObjCSelectorRef=pMethod:32:32 [Context:main] +// CHECK: c-index-api-test.m:80:3: VarRef=d:78:78 [Context:main] +// CHECK: c-index-api-test.m:80:4: ObjCSelectorRef=pMethod:32:32 [Context:main] +// CHECK: c-index-api-test.m:80:5: ObjCSelectorRef=pMethod:32:32 [Context:main] +// CHECK: c-index-api-test.m:80:6: ObjCSelectorRef=pMethod:32:32 [Context:main] +// CHECK: c-index-api-test.m:80:7: ObjCSelectorRef=pMethod:32:32 [Context:main] +// CHECK: c-index-api-test.m:80:8: ObjCSelectorRef=pMethod:32:32 [Context:main] +// CHECK: c-index-api-test.m:80:9: ObjCSelectorRef=pMethod:32:32 [Context:main] +// CHECK: c-index-api-test.m:80:10: ObjCSelectorRef=pMethod:32:32 [Context:main] +// CHECK: c-index-api-test.m:80:11: ObjCSelectorRef=pMethod:32:32 [Context:main] +// CHECK: c-index-api-test.m:80:12: ObjCSelectorRef=pMethod:32:32 [Context:main] +// CHECK: c-index-api-test.m:81:2: ObjCSelectorRef=catMethodWithFloat::27:27 [Context:main] +// CHECK: c-index-api-test.m:81:3: VarRef=bee:75:75 [Context:main] +// CHECK: c-index-api-test.m:81:4: VarRef=bee:75:75 [Context:main] +// CHECK: c-index-api-test.m:81:5: VarRef=bee:75:75 [Context:main] +// CHECK: c-index-api-test.m:81:6: ObjCSelectorRef=catMethodWithFloat::27:27 [Context:main] +// CHECK: c-index-api-test.m:81:7: ObjCSelectorRef=catMethodWithFloat::27:27 [Context:main] +// CHECK: c-index-api-test.m:81:8: ObjCSelectorRef=catMethodWithFloat::27:27 [Context:main] +// CHECK: c-index-api-test.m:81:9: ObjCSelectorRef=catMethodWithFloat::27:27 [Context:main] +// CHECK: c-index-api-test.m:81:10: ObjCSelectorRef=catMethodWithFloat::27:27 [Context:main] +// CHECK: c-index-api-test.m:81:11: ObjCSelectorRef=catMethodWithFloat::27:27 [Context:main] +// CHECK: c-index-api-test.m:81:12: ObjCSelectorRef=catMethodWithFloat::27:27 [Context:main] +// CHECK: c-index-api-test.m:81:13: ObjCSelectorRef=catMethodWithFloat::27:27 [Context:main] +// CHECK: c-index-api-test.m:81:14: ObjCSelectorRef=catMethodWithFloat::27:27 [Context:main] +// CHECK: c-index-api-test.m:81:15: ObjCSelectorRef=catMethodWithFloat::27:27 [Context:main] +// CHECK: c-index-api-test.m:81:16: ObjCSelectorRef=catMethodWithFloat::27:27 [Context:main] +// CHECK: c-index-api-test.m:81:17: ObjCSelectorRef=catMethodWithFloat::27:27 [Context:main] +// CHECK: c-index-api-test.m:81:18: ObjCSelectorRef=catMethodWithFloat::27:27 [Context:main] +// CHECK: c-index-api-test.m:81:19: ObjCSelectorRef=catMethodWithFloat::27:27 [Context:main] +// CHECK: c-index-api-test.m:81:20: ObjCSelectorRef=catMethodWithFloat::27:27 [Context:main] +// CHECK: c-index-api-test.m:81:21: ObjCSelectorRef=catMethodWithFloat::27:27 [Context:main] +// CHECK: c-index-api-test.m:81:22: ObjCSelectorRef=catMethodWithFloat::27:27 [Context:main] +// CHECK: c-index-api-test.m:81:23: ObjCSelectorRef=catMethodWithFloat::27:27 [Context:main] +// CHECK: c-index-api-test.m:81:24: ObjCSelectorRef=catMethodWithFloat::27:27 [Context:main] +// CHECK: c-index-api-test.m:81:25: ObjCSelectorRef=catMethodWithFloat::27:27 [Context:main] +// CHECK: c-index-api-test.m:81:26: ObjCSelectorRef=floatMethod:28:28 [Context:main] +// CHECK: c-index-api-test.m:81:27: VarRef=bee:75:75 [Context:main] +// CHECK: c-index-api-test.m:81:28: VarRef=bee:75:75 [Context:main] +// CHECK: c-index-api-test.m:81:29: VarRef=bee:75:75 [Context:main] +// CHECK: c-index-api-test.m:81:30: ObjCSelectorRef=floatMethod:28:28 [Context:main] +// CHECK: c-index-api-test.m:81:31: ObjCSelectorRef=floatMethod:28:28 [Context:main] +// CHECK: c-index-api-test.m:81:32: ObjCSelectorRef=floatMethod:28:28 [Context:main] +// CHECK: c-index-api-test.m:81:33: ObjCSelectorRef=floatMethod:28:28 [Context:main] +// CHECK: c-index-api-test.m:81:34: ObjCSelectorRef=floatMethod:28:28 [Context:main] +// CHECK: c-index-api-test.m:81:35: ObjCSelectorRef=floatMethod:28:28 [Context:main] +// CHECK: c-index-api-test.m:81:36: ObjCSelectorRef=floatMethod:28:28 [Context:main] +// CHECK: c-index-api-test.m:81:37: ObjCSelectorRef=floatMethod:28:28 [Context:main] +// CHECK: c-index-api-test.m:81:38: ObjCSelectorRef=floatMethod:28:28 [Context:main] +// CHECK: c-index-api-test.m:81:39: ObjCSelectorRef=floatMethod:28:28 [Context:main] +// CHECK: c-index-api-test.m:81:40: ObjCSelectorRef=floatMethod:28:28 [Context:main] +// CHECK: c-index-api-test.m:81:41: ObjCSelectorRef=floatMethod:28:28 [Context:main] +// CHECK: c-index-api-test.m:81:42: ObjCSelectorRef=floatMethod:28:28 [Context:main] +// CHECK: c-index-api-test.m:81:43: ObjCSelectorRef=catMethodWithFloat::27:27 [Context:main] +// CHECK: c-index-api-test.m:82:3: FunctionRef=main:74:74 [Context:main] +// CHECK: c-index-api-test.m:82:4: FunctionRef=main:74:74 [Context:main] +// CHECK: c-index-api-test.m:82:5: FunctionRef=main:74:74 [Context:main] +// CHECK: c-index-api-test.m:82:6: FunctionRef=main:74:74 [Context:main] +// CHECK: c-index-api-test.m:82:8: EnumConstantRef=someEnum:49:49 [Context:main] +// CHECK: c-index-api-test.m:82:9: EnumConstantRef=someEnum:49:49 [Context:main] +// CHECK: c-index-api-test.m:82:10: EnumConstantRef=someEnum:49:49 [Context:main] +// CHECK: c-index-api-test.m:82:11: EnumConstantRef=someEnum:49:49 [Context:main] +// CHECK: c-index-api-test.m:82:12: EnumConstantRef=someEnum:49:49 [Context:main] +// CHECK: c-index-api-test.m:82:13: EnumConstantRef=someEnum:49:49 [Context:main] +// CHECK: c-index-api-test.m:82:14: EnumConstantRef=someEnum:49:49 [Context:main] +// CHECK: c-index-api-test.m:82:15: EnumConstantRef=someEnum:49:49 [Context:main] +// CHECK: c-index-api-test.m:82:33: VarRef=bee:75:75 [Context:main] +// CHECK: c-index-api-test.m:82:34: VarRef=bee:75:75 [Context:main] +// CHECK: c-index-api-test.m:82:35: VarRef=bee:75:75 [Context:main] diff --git a/tools/CIndex/CIndex.cpp b/tools/CIndex/CIndex.cpp index 37f2d8695c..74b3cfd8af 100644 --- a/tools/CIndex/CIndex.cpp +++ b/tools/CIndex/CIndex.cpp @@ -354,6 +354,22 @@ const char *clang_getDeclSpelling(CXDecl AnonDecl) return ""; } +unsigned clang_getDeclLine(CXDecl AnonDecl) +{ + assert(AnonDecl && "Passed null CXDecl"); + NamedDecl *ND = static_cast<NamedDecl *>(AnonDecl); + SourceManager &SourceMgr = ND->getASTContext().getSourceManager(); + return SourceMgr.getSpellingLineNumber(ND->getLocation()); +} + +unsigned clang_getDeclColumn(CXDecl AnonDecl) +{ + assert(AnonDecl && "Passed null CXDecl"); + NamedDecl *ND = static_cast<NamedDecl *>(AnonDecl); + SourceManager &SourceMgr = ND->getASTContext().getSourceManager(); + return SourceMgr.getSpellingLineNumber(ND->getLocation()); +} + const char *clang_getCursorSpelling(CXCursor C) { assert(C.decl && "CXCursor has null decl"); @@ -542,9 +558,36 @@ CXCursorKind clang_getCursorKind(CXCursor C) return C.kind; } +static Decl *getDeclFromExpr(Stmt *E) { + if (DeclRefExpr *RefExpr = dyn_cast<DeclRefExpr>(E)) + return RefExpr->getDecl(); + if (MemberExpr *ME = dyn_cast<MemberExpr>(E)) + return ME->getMemberDecl(); + if (ObjCIvarRefExpr *RE = dyn_cast<ObjCIvarRefExpr>(E)) + return RE->getDecl(); + + if (CallExpr *CE = dyn_cast<CallExpr>(E)) + return getDeclFromExpr(CE->getCallee()); + if (CastExpr *CE = dyn_cast<CastExpr>(E)) + return getDeclFromExpr(CE->getSubExpr()); + if (ObjCMessageExpr *OME = dyn_cast<ObjCMessageExpr>(E)) + return OME->getMethodDecl(); + + return 0; +} + CXDecl clang_getCursorDecl(CXCursor C) { - return C.decl; + if (clang_isDeclaration(C.kind)) + return C.decl; + + if (clang_isReference(C.kind)) { + if (C.stmt) + return getDeclFromExpr(static_cast<Stmt *>(C.stmt)); + else + return C.decl; + } + return 0; } static SourceLocation getLocationFromCursor(CXCursor C, diff --git a/tools/CIndex/CIndex.exports b/tools/CIndex/CIndex.exports index 1b804b1819..8cfc1a9d7f 100644 --- a/tools/CIndex/CIndex.exports +++ b/tools/CIndex/CIndex.exports @@ -9,6 +9,8 @@ _clang_getCursorLine _clang_getCursorSource _clang_getDeclarationName _clang_getDeclSpelling +_clang_getDeclLine +_clang_getDeclColumn _clang_getEntity _clang_getEntityFromDecl _clang_getURI diff --git a/tools/c-index-test/c-index-test.c b/tools/c-index-test/c-index-test.c index f1f9372a18..aa93a7ed4f 100644 --- a/tools/c-index-test/c-index-test.c +++ b/tools/c-index-test/c-index-test.c @@ -9,9 +9,16 @@ extern char *basename(const char *); static void PrintCursor(CXCursor Cursor) { if (clang_isInvalid(Cursor.kind)) printf("Invalid Cursor => %s\n", clang_getCursorKindSpelling(Cursor.kind)); - else + else { printf("%s=%s", clang_getCursorKindSpelling(Cursor.kind), clang_getCursorSpelling(Cursor)); + if (Cursor.stmt) { + CXDecl DeclReferenced = clang_getCursorDecl(Cursor); + if (DeclReferenced) + printf(":%d:%d", clang_getDeclLine(DeclReferenced), + clang_getDeclColumn(DeclReferenced)); + } + } } static void DeclVisitor(CXDecl Dcl, CXCursor Cursor, CXClientData Filter) |