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
diff --git a/include/clang-c/Index.h b/include/clang-c/Index.h
index 24f3c54..2203e28 100644
--- a/include/clang-c/Index.h
+++ b/include/clang-c/Index.h
@@ -175,6 +175,9 @@
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 5eb1df7..1a926bc 100644
--- a/test/Index/c-index-api-test.m
+++ b/test/Index/c-index-api-test.m
@@ -96,97 +96,97 @@
// 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 37f2d86..74b3cfd 100644
--- a/tools/CIndex/CIndex.cpp
+++ b/tools/CIndex/CIndex.cpp
@@ -354,6 +354,22 @@
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 @@
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 1b804b1..8cfc1a9 100644
--- a/tools/CIndex/CIndex.exports
+++ b/tools/CIndex/CIndex.exports
@@ -9,6 +9,8 @@
_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 f1f9372..aa93a7e 100644
--- a/tools/c-index-test/c-index-test.c
+++ b/tools/c-index-test/c-index-test.c
@@ -9,9 +9,16 @@
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)