[cfe-commits] r82798 - in /cfe/trunk: include/clang-c/Index.h test/Index/c-index-api-test.m tools/CIndex/CIndex.cpp tools/CIndex/CIndex.exports tools/c-index-test/c-index-test.c
Steve Naroff
snaroff at apple.com
Fri Sep 25 14:32:34 PDT 2009
Author: snaroff
Date: Fri Sep 25 16:32:34 2009
New Revision: 82798
URL: http://llvm.org/viewvc/llvm-project?rev=82798&view=rev
Log:
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)
Modified:
cfe/trunk/include/clang-c/Index.h
cfe/trunk/test/Index/c-index-api-test.m
cfe/trunk/tools/CIndex/CIndex.cpp
cfe/trunk/tools/CIndex/CIndex.exports
cfe/trunk/tools/c-index-test/c-index-test.c
Modified: cfe/trunk/include/clang-c/Index.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang-c/Index.h?rev=82798&r1=82797&r2=82798&view=diff
==============================================================================
--- cfe/trunk/include/clang-c/Index.h (original)
+++ cfe/trunk/include/clang-c/Index.h Fri Sep 25 16:32:34 2009
@@ -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.
*/
Modified: cfe/trunk/test/Index/c-index-api-test.m
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Index/c-index-api-test.m?rev=82798&r1=82797&r2=82798&view=diff
==============================================================================
--- cfe/trunk/test/Index/c-index-api-test.m (original)
+++ cfe/trunk/test/Index/c-index-api-test.m Fri Sep 25 16:32:34 2009
@@ -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]
Modified: cfe/trunk/tools/CIndex/CIndex.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/CIndex/CIndex.cpp?rev=82798&r1=82797&r2=82798&view=diff
==============================================================================
--- cfe/trunk/tools/CIndex/CIndex.cpp (original)
+++ cfe/trunk/tools/CIndex/CIndex.cpp Fri Sep 25 16:32:34 2009
@@ -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,
Modified: cfe/trunk/tools/CIndex/CIndex.exports
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/CIndex/CIndex.exports?rev=82798&r1=82797&r2=82798&view=diff
==============================================================================
--- cfe/trunk/tools/CIndex/CIndex.exports (original)
+++ cfe/trunk/tools/CIndex/CIndex.exports Fri Sep 25 16:32:34 2009
@@ -9,6 +9,8 @@
_clang_getCursorSource
_clang_getDeclarationName
_clang_getDeclSpelling
+_clang_getDeclLine
+_clang_getDeclColumn
_clang_getEntity
_clang_getEntityFromDecl
_clang_getURI
Modified: cfe/trunk/tools/c-index-test/c-index-test.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/c-index-test/c-index-test.c?rev=82798&r1=82797&r2=82798&view=diff
==============================================================================
--- cfe/trunk/tools/c-index-test/c-index-test.c (original)
+++ cfe/trunk/tools/c-index-test/c-index-test.c Fri Sep 25 16:32:34 2009
@@ -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)
More information about the cfe-commits
mailing list