diff options
author | Ted Kremenek <kremenek@apple.com> | 2010-01-16 01:44:12 +0000 |
---|---|---|
committer | Ted Kremenek <kremenek@apple.com> | 2010-01-16 01:44:12 +0000 |
commit | 9cec00019a2dca6660b3b61f8724574495936f03 (patch) | |
tree | bc1ece723580484531707771ac72c2359a85d267 /clang | |
parent | bf5cfa1a4144a4d48997f3836131879b4be2c020 (diff) | |
download | bcm5719-llvm-9cec00019a2dca6660b3b61f8724574495936f03.tar.gz bcm5719-llvm-9cec00019a2dca6660b3b61f8724574495936f03.zip |
Remove TranslateKind and centralize Decl -> CXCursorKind in GetCursorKind(). This revealed a bunch of inconsistencies in how CXCursorKinds were being computed.
llvm-svn: 93618
Diffstat (limited to 'clang')
-rw-r--r-- | clang/test/Index/TestClassDecl.m | 12 | ||||
-rw-r--r-- | clang/test/Index/TestClassForwardDecl.m | 12 | ||||
-rw-r--r-- | clang/test/Index/c-index-api-loadTU-test.m | 2 | ||||
-rw-r--r-- | clang/test/Index/c-index-getCursor-test.m | 54 | ||||
-rw-r--r-- | clang/test/Index/resolve-loc.c | 2 | ||||
-rw-r--r-- | clang/tools/CIndex/CIndex.cpp | 36 | ||||
-rw-r--r-- | clang/tools/CIndex/CXCursor.cpp | 11 | ||||
-rw-r--r-- | clang/tools/c-index-test/c-index-test.c | 25 |
8 files changed, 75 insertions, 79 deletions
diff --git a/clang/test/Index/TestClassDecl.m b/clang/test/Index/TestClassDecl.m index fb97de15b11..0ec5c75af57 100644 --- a/clang/test/Index/TestClassDecl.m +++ b/clang/test/Index/TestClassDecl.m @@ -21,18 +21,18 @@ void function(Foo * arg) // CHECK-scan: {start_line=8 start_col=11 end_line=9 end_col=1} Invalid Cursor => NoDeclFound // CHECK-scan: {start_line=10 start_col=1 end_line=11 end_col=4} ObjCInterfaceDecl=Foo:10:1 // CHECK-scan: {start_line=11 start_col=5 end_line=12 end_col=1} Invalid Cursor => NoDeclFound -// CHECK-scan: {start_line=13 start_col=1 end_line=13 end_col=4} FunctionDecl=function:13:6 +// CHECK-scan: {start_line=13 start_col=1 end_line=13 end_col=4} FunctionDefn=function:13:6 // CHECK-scan: {start_line=13 start_col=5 end_line=13 end_col=5} Invalid Cursor => NoDeclFound -// CHECK-scan: {start_line=13 start_col=6 end_line=13 end_col=14} FunctionDecl=function:13:6 +// CHECK-scan: {start_line=13 start_col=6 end_line=13 end_col=14} FunctionDefn=function:13:6 // CHECK-scan: {start_line=13 start_col=15 end_line=13 end_col=17} ObjCClassRef=Foo:13:21 -// CHECK-scan: {start_line=13 start_col=18 end_line=13 end_col=18} FunctionDecl=function:13:6 +// CHECK-scan: {start_line=13 start_col=18 end_line=13 end_col=18} FunctionDefn=function:13:6 // CHECK-scan: {start_line=13 start_col=19 end_line=13 end_col=19} ParmDecl=arg:13:21 -// CHECK-scan: {start_line=13 start_col=20 end_line=13 end_col=20} FunctionDecl=function:13:6 +// CHECK-scan: {start_line=13 start_col=20 end_line=13 end_col=20} FunctionDefn=function:13:6 // CHECK-scan: {start_line=13 start_col=21 end_line=13 end_col=23} ParmDecl=arg:13:21 -// CHECK-scan: {start_line=13 start_col=24 end_line=16 end_col=1} FunctionDecl=function:13:6 +// CHECK-scan: {start_line=13 start_col=24 end_line=16 end_col=1} FunctionDefn=function:13:6 // CHECK-scan: {start_line=16 start_col=2 end_line=38 end_col=1} Invalid Cursor => NoDeclFound // CHECK-load: TestClassDecl.m:10:12: ObjCInterfaceDecl=Foo:10:1 [Context=TestClassDecl.m] [Extent=10:1:11:4] -// CHECK-load: TestClassDecl.m:13:6: FunctionDefn=function [Context=TestClassDecl.m] [Extent=13:6:16:1] +// CHECK-load: TestClassDecl.m:13:6: FunctionDefn=function:13:6 [Context=TestClassDecl.m] [Extent=13:6:16:1] // CHECK-load: TestClassDecl.m:13:21: ParmDecl=arg:13:21 [Context=function] [Extent=13:21:13:23] diff --git a/clang/test/Index/TestClassForwardDecl.m b/clang/test/Index/TestClassForwardDecl.m index e795972a7d1..8bb437ca6f5 100644 --- a/clang/test/Index/TestClassForwardDecl.m +++ b/clang/test/Index/TestClassForwardDecl.m @@ -16,15 +16,15 @@ void function(Foo * arg) // CHECK-scan: {start_line=8 start_col=1 end_line=8 end_col=7} Invalid Cursor => NotImplemented // CHECK-scan: {start_line=8 start_col=8 end_line=8 end_col=10} ObjCClassRef=Foo:8:1 // CHECK-scan: {start_line=8 start_col=11 end_line=9 end_col=1} Invalid Cursor => NoDeclFound -// CHECK-scan: {start_line=10 start_col=1 end_line=10 end_col=4} FunctionDecl=function:10:6 +// CHECK-scan: {start_line=10 start_col=1 end_line=10 end_col=4} FunctionDefn=function:10:6 // CHECK-scan: {start_line=10 start_col=5 end_line=10 end_col=5} Invalid Cursor => NoDeclFound -// CHECK-scan: {start_line=10 start_col=6 end_line=10 end_col=14} FunctionDecl=function:10:6 +// CHECK-scan: {start_line=10 start_col=6 end_line=10 end_col=14} FunctionDefn=function:10:6 // CHECK-scan: {start_line=10 start_col=15 end_line=10 end_col=17} ObjCClassRef=Foo:10:21 -// CHECK-scan: {start_line=10 start_col=18 end_line=10 end_col=18} FunctionDecl=function:10:6 +// CHECK-scan: {start_line=10 start_col=18 end_line=10 end_col=18} FunctionDefn=function:10:6 // CHECK-scan: {start_line=10 start_col=19 end_line=10 end_col=19} ParmDecl=arg:10:21 -// CHECK-scan: {start_line=10 start_col=20 end_line=10 end_col=20} FunctionDecl=function:10:6 +// CHECK-scan: {start_line=10 start_col=20 end_line=10 end_col=20} FunctionDefn=function:10:6 // CHECK-scan: {start_line=10 start_col=21 end_line=10 end_col=23} ParmDecl=arg:10:21 -// CHECK-scan: {start_line=10 start_col=24 end_line=13 end_col=1} FunctionDecl=function:10:6 +// CHECK-scan: {start_line=10 start_col=24 end_line=13 end_col=1} FunctionDefn=function:10:6 // CHECK-scan: {start_line=13 start_col=2 end_line=46 end_col=1} Invalid Cursor => NoDeclFound @@ -41,6 +41,6 @@ void function(Foo * arg) -// CHECK-load: TestClassForwardDecl.m:10:6: FunctionDefn=function [Context=TestClassForwardDecl.m] +// CHECK-load: TestClassForwardDecl.m:10:6: FunctionDefn=function:10:6 [Context=TestClassForwardDecl.m] // CHECK-load: TestClassForwardDecl.m:10:21: ParmDecl=arg:10:21 [Context=function] diff --git a/clang/test/Index/c-index-api-loadTU-test.m b/clang/test/Index/c-index-api-loadTU-test.m index 8a1e4d1556e..7ad12385d2b 100644 --- a/clang/test/Index/c-index-api-loadTU-test.m +++ b/clang/test/Index/c-index-api-loadTU-test.m @@ -74,7 +74,7 @@ int main (int argc, const char * argv[]) { // CHECK: c-index-api-loadTU-test.m:37:1: ObjCInstanceMethodDecl=bazMethod:37:1 [Context=Baz] [Extent=37:1:37:20] // CHECK: c-index-api-loadTU-test.m:41:1: EnumDecl=:41:1 [Context=c-index-api-loadTU-test.m] [Extent=41:1:43:1] // CHECK: c-index-api-loadTU-test.m:42:3: EnumConstantDecl=someEnum:42:3 [Context=] [Extent=42:3:42:10] -// CHECK: c-index-api-loadTU-test.m:45:5: FunctionDefn=main [Context=c-index-api-loadTU-test.m] [Extent=45:5:54:1] +// CHECK: c-index-api-loadTU-test.m:45:5: FunctionDefn=main:45:5 [Context=c-index-api-loadTU-test.m] [Extent=45:5:54:1] // CHECK: c-index-api-loadTU-test.m:45:15: ParmDecl=argc:45:15 [Context=main] [Extent=45:15:45:18] // CHECK: c-index-api-loadTU-test.m:45:34: ParmDecl=argv:45:34 [Context=main] [Extent=45:34:45:37] // CHECK: c-index-api-loadTU-test.m:46:8: VarDecl=bee:46:8 [Context=main] [Extent=46:8:46:10] diff --git a/clang/test/Index/c-index-getCursor-test.m b/clang/test/Index/c-index-getCursor-test.m index 03ab5a82083..0567506f231 100644 --- a/clang/test/Index/c-index-getCursor-test.m +++ b/clang/test/Index/c-index-getCursor-test.m @@ -80,9 +80,9 @@ int main (int argc, const char * argv[]) { // CHECK: {start_line=28 start_col=12 end_line=29 end_col=4} ObjCProtocolDecl=SubP:27:1 // CHECK: {start_line=29 start_col=5 end_line=30 end_col=1} Invalid Cursor => NoDeclFound // CHECK: {start_line=31 start_col=1 end_line=33 end_col=4} ObjCInterfaceDecl=Baz:31:1 -// CHECK: {start_line=33 start_col=5 end_line=33 end_col=7} Invalid Cursor => NotImplemented +// CHECK: {start_line=33 start_col=5 end_line=33 end_col=7} ObjCIvarDecl=_anIVar:33:9 // CHECK: {start_line=33 start_col=8 end_line=33 end_col=8} ObjCInterfaceDecl=Baz:31:1 -// CHECK: {start_line=33 start_col=9 end_line=33 end_col=15} Invalid Cursor => NotImplemented +// CHECK: {start_line=33 start_col=9 end_line=33 end_col=15} ObjCIvarDecl=_anIVar:33:9 // CHECK: {start_line=33 start_col=16 end_line=35 end_col=1} ObjCInterfaceDecl=Baz:31:1 // CHECK: {start_line=36 start_col=1 end_line=36 end_col=20} ObjCInstanceMethodDecl=bazMethod:36:1 // CHECK: {start_line=36 start_col=21 end_line=38 end_col=4} ObjCInterfaceDecl=Baz:31:1 @@ -91,57 +91,57 @@ int main (int argc, const char * argv[]) { // CHECK: {start_line=41 start_col=3 end_line=41 end_col=10} EnumConstantDecl=someEnum:41:3 // CHECK: {start_line=41 start_col=11 end_line=42 end_col=1} EnumDecl=:40:1 // CHECK: {start_line=42 start_col=2 end_line=43 end_col=1} Invalid Cursor => NoDeclFound -// CHECK: {start_line=44 start_col=1 end_line=44 end_col=3} FunctionDecl=main:44:5 +// CHECK: {start_line=44 start_col=1 end_line=44 end_col=3} FunctionDefn=main:44:5 // CHECK: {start_line=44 start_col=4 end_line=44 end_col=4} Invalid Cursor => NoDeclFound -// CHECK: {start_line=44 start_col=5 end_line=44 end_col=10} FunctionDecl=main:44:5 +// CHECK: {start_line=44 start_col=5 end_line=44 end_col=10} FunctionDefn=main:44:5 // CHECK: {start_line=44 start_col=11 end_line=44 end_col=13} ParmDecl=argc:44:15 -// CHECK: {start_line=44 start_col=14 end_line=44 end_col=14} FunctionDecl=main:44:5 +// CHECK: {start_line=44 start_col=14 end_line=44 end_col=14} FunctionDefn=main:44:5 // CHECK: {start_line=44 start_col=15 end_line=44 end_col=18} ParmDecl=argc:44:15 -// CHECK: {start_line=44 start_col=19 end_line=44 end_col=26} FunctionDecl=main:44:5 +// CHECK: {start_line=44 start_col=19 end_line=44 end_col=26} FunctionDefn=main:44:5 // CHECK: {start_line=44 start_col=27 end_line=44 end_col=30} ParmDecl=argv:44:34 -// CHECK: {start_line=44 start_col=31 end_line=44 end_col=31} FunctionDecl=main:44:5 +// CHECK: {start_line=44 start_col=31 end_line=44 end_col=31} FunctionDefn=main:44:5 // CHECK: {start_line=44 start_col=32 end_line=44 end_col=32} ParmDecl=argv:44:34 -// CHECK: {start_line=44 start_col=33 end_line=44 end_col=33} FunctionDecl=main:44:5 +// CHECK: {start_line=44 start_col=33 end_line=44 end_col=33} FunctionDefn=main:44:5 // CHECK: {start_line=44 start_col=34 end_line=44 end_col=39} ParmDecl=argv:44:34 -// CHECK: {start_line=44 start_col=40 end_line=45 end_col=1} FunctionDecl=main:44:5 +// CHECK: {start_line=44 start_col=40 end_line=45 end_col=1} FunctionDefn=main:44:5 // CHECK: {start_line=45 start_col=2 end_line=45 end_col=4} ObjCClassRef=Baz:45:8 -// CHECK: {start_line=45 start_col=5 end_line=45 end_col=5} FunctionDecl=main:44:5 +// CHECK: {start_line=45 start_col=5 end_line=45 end_col=5} FunctionDefn=main:44:5 // CHECK: {start_line=45 start_col=6 end_line=45 end_col=6} VarDecl=bee:45:8 -// CHECK: {start_line=45 start_col=7 end_line=45 end_col=7} FunctionDecl=main:44:5 +// CHECK: {start_line=45 start_col=7 end_line=45 end_col=7} FunctionDefn=main:44:5 // CHECK: {start_line=45 start_col=8 end_line=45 end_col=10} VarDecl=bee:45:8 -// CHECK: {start_line=45 start_col=11 end_line=46 end_col=1} FunctionDecl=main:44:5 +// CHECK: {start_line=45 start_col=11 end_line=46 end_col=1} FunctionDefn=main:44:5 // CHECK: {start_line=46 start_col=2 end_line=46 end_col=3} TypedefDecl=id:0:0 -// CHECK: {start_line=46 start_col=4 end_line=46 end_col=4} FunctionDecl=main:44:5 +// CHECK: {start_line=46 start_col=4 end_line=46 end_col=4} FunctionDefn=main:44:5 // CHECK: {start_line=46 start_col=5 end_line=46 end_col=8} VarDecl=a:46:5 // CHECK: {start_line=46 start_col=9 end_line=46 end_col=9} ObjCSelectorRef=foo:7:1 // CHECK: {start_line=46 start_col=10 end_line=46 end_col=12} VarRef=bee:45:8 // CHECK: {start_line=46 start_col=13 end_line=46 end_col=17} ObjCSelectorRef=foo:7:1 -// CHECK: {start_line=46 start_col=18 end_line=47 end_col=1} FunctionDecl=main:44:5 +// CHECK: {start_line=46 start_col=18 end_line=47 end_col=1} FunctionDefn=main:44:5 // CHECK: {start_line=47 start_col=2 end_line=47 end_col=3} TypedefDecl=id:0:0 -// CHECK: {start_line=47 start_col=4 end_line=47 end_col=4} FunctionDecl=main:44:5 +// CHECK: {start_line=47 start_col=4 end_line=47 end_col=4} FunctionDefn=main:44:5 // CHECK: {start_line=47 start_col=5 end_line=47 end_col=5} VarDecl=c:47:12 // CHECK: {start_line=47 start_col=6 end_line=47 end_col=9} ObjCProtocolRef=SubP:47:12 // CHECK: {start_line=47 start_col=10 end_line=47 end_col=10} VarDecl=c:47:12 -// CHECK: {start_line=47 start_col=11 end_line=47 end_col=11} FunctionDecl=main:44:5 +// CHECK: {start_line=47 start_col=11 end_line=47 end_col=11} FunctionDefn=main:44:5 // CHECK: {start_line=47 start_col=12 end_line=47 end_col=15} VarDecl=c:47:12 // CHECK: {start_line=47 start_col=16 end_line=47 end_col=25} ObjCSelectorRef=fooC:8:1 -// CHECK: {start_line=47 start_col=26 end_line=48 end_col=1} FunctionDecl=main:44:5 +// CHECK: {start_line=47 start_col=26 end_line=48 end_col=1} FunctionDefn=main:44:5 // CHECK: {start_line=48 start_col=2 end_line=48 end_col=3} TypedefDecl=id:0:0 -// CHECK: {start_line=48 start_col=4 end_line=48 end_col=4} FunctionDecl=main:44:5 +// CHECK: {start_line=48 start_col=4 end_line=48 end_col=4} FunctionDefn=main:44:5 // CHECK: {start_line=48 start_col=5 end_line=48 end_col=5} VarDecl=d:48:13 // CHECK: {start_line=48 start_col=6 end_line=48 end_col=10} ObjCProtocolRef=Proto:48:13 // CHECK: {start_line=48 start_col=11 end_line=48 end_col=11} VarDecl=d:48:13 -// CHECK: {start_line=48 start_col=12 end_line=48 end_col=12} FunctionDecl=main:44:5 +// CHECK: {start_line=48 start_col=12 end_line=48 end_col=12} FunctionDefn=main:44:5 // CHECK: {start_line=48 start_col=13 end_line=48 end_col=13} VarDecl=d:48:13 -// CHECK: {start_line=48 start_col=14 end_line=49 end_col=1} FunctionDecl=main:44:5 +// CHECK: {start_line=48 start_col=14 end_line=49 end_col=1} FunctionDefn=main:44:5 // CHECK: {start_line=49 start_col=2 end_line=49 end_col=2} VarRef=d:48:13 -// CHECK: {start_line=49 start_col=3 end_line=49 end_col=5} FunctionDecl=main:44:5 +// CHECK: {start_line=49 start_col=3 end_line=49 end_col=5} FunctionDefn=main:44:5 // CHECK: {start_line=49 start_col=6 end_line=49 end_col=6} VarRef=c:47:12 -// CHECK: {start_line=49 start_col=7 end_line=50 end_col=1} FunctionDecl=main:44:5 +// CHECK: {start_line=49 start_col=7 end_line=50 end_col=1} FunctionDefn=main:44:5 // CHECK: {start_line=50 start_col=2 end_line=50 end_col=2} ObjCSelectorRef=pMethod:24:1 // CHECK: {start_line=50 start_col=3 end_line=50 end_col=3} VarRef=d:48:13 // CHECK: {start_line=50 start_col=4 end_line=50 end_col=12} ObjCSelectorRef=pMethod:24:1 -// CHECK: {start_line=50 start_col=13 end_line=51 end_col=1} FunctionDecl=main:44:5 +// CHECK: {start_line=50 start_col=13 end_line=51 end_col=1} FunctionDefn=main:44:5 // CHECK: {start_line=51 start_col=2 end_line=51 end_col=2} ObjCSelectorRef=catMethodWithFloat::19:1 // CHECK: {start_line=51 start_col=3 end_line=51 end_col=5} VarRef=bee:45:8 // CHECK: {start_line=51 start_col=6 end_line=51 end_col=25} ObjCSelectorRef=catMethodWithFloat::19:1 @@ -149,12 +149,12 @@ int main (int argc, const char * argv[]) { // CHECK: {start_line=51 start_col=27 end_line=51 end_col=29} VarRef=bee:45:8 // CHECK: {start_line=51 start_col=30 end_line=51 end_col=42} ObjCSelectorRef=floatMethod:20:1 // CHECK: {start_line=51 start_col=43 end_line=51 end_col=43} ObjCSelectorRef=catMethodWithFloat::19:1 -// CHECK: {start_line=51 start_col=44 end_line=52 end_col=2} FunctionDecl=main:44:5 +// CHECK: {start_line=51 start_col=44 end_line=52 end_col=2} FunctionDefn=main:44:5 // CHECK: {start_line=52 start_col=3 end_line=52 end_col=6} FunctionRef=main:44:5 -// CHECK: {start_line=52 start_col=7 end_line=52 end_col=7} FunctionDecl=main:44:5 +// CHECK: {start_line=52 start_col=7 end_line=52 end_col=7} FunctionDefn=main:44:5 // CHECK: {start_line=52 start_col=8 end_line=52 end_col=15} EnumConstantRef=someEnum:41:3 -// CHECK: {start_line=52 start_col=16 end_line=52 end_col=32} FunctionDecl=main:44:5 +// CHECK: {start_line=52 start_col=16 end_line=52 end_col=32} FunctionDefn=main:44:5 // CHECK: {start_line=52 start_col=33 end_line=52 end_col=35} VarRef=bee:45:8 -// CHECK: {start_line=52 start_col=36 end_line=53 end_col=1} FunctionDecl=main:44:5 +// CHECK: {start_line=52 start_col=36 end_line=53 end_col=1} FunctionDefn=main:44:5 // CHECK: {start_line=53 start_col=2 end_line=160 end_col=1} Invalid Cursor => NoDeclFound diff --git a/clang/test/Index/resolve-loc.c b/clang/test/Index/resolve-loc.c index 1b40ec79625..cbc371a76c6 100644 --- a/clang/test/Index/resolve-loc.c +++ b/clang/test/Index/resolve-loc.c @@ -24,7 +24,7 @@ struct S { // CHECK: VarDecl=top_var // CHECK: FunctionDecl=top_func_decl // CHECK: ParmDecl=param1 -// CHECK: FunctionDecl=top_func_def +// CHECK: FunctionDefn=top_func_def // CHECK: ParmDecl=param2 // CHECK: VarDecl=local_var1 // CHECK: VarDecl=for_var diff --git a/clang/tools/CIndex/CIndex.cpp b/clang/tools/CIndex/CIndex.cpp index f799ba80465..f297aceed21 100644 --- a/clang/tools/CIndex/CIndex.cpp +++ b/clang/tools/CIndex/CIndex.cpp @@ -146,6 +146,9 @@ private: unsigned MaxPCHLevel; void Call(const CXCursor &C) { + if (clang_isInvalid(C.kind)) + return; + if (const Decl *D = getCursorDecl(C)) { // Filter any declarations that have a PCH level greater than what // we allow. @@ -165,9 +168,6 @@ public: Root(root), Callback(cback), CData(D), MaxPCHLevel(MaxPCHLevel) {} void VisitDecl(Decl *D); - void VisitObjCClassDecl(ObjCClassDecl *D) { - // FIXME: Do something. - } void VisitDeclContext(DeclContext *DC); void VisitTranslationUnitDecl(TranslationUnitDecl *D); }; @@ -736,30 +736,6 @@ time_t clang_getFileTime(CXFile SFile) { // CXCursor Operations. //===----------------------------------------------------------------------===// -static enum CXCursorKind TranslateKind(Decl *D) { - switch (D->getKind()) { - case Decl::Function: return CXCursor_FunctionDecl; - case Decl::Typedef: return CXCursor_TypedefDecl; - case Decl::Enum: return CXCursor_EnumDecl; - case Decl::EnumConstant: return CXCursor_EnumConstantDecl; - case Decl::Record: return CXCursor_StructDecl; // FIXME: union/class - case Decl::Field: return CXCursor_FieldDecl; - case Decl::Var: return CXCursor_VarDecl; - case Decl::ParmVar: return CXCursor_ParmDecl; - case Decl::ObjCInterface: return CXCursor_ObjCInterfaceDecl; - case Decl::ObjCCategory: return CXCursor_ObjCCategoryDecl; - case Decl::ObjCProtocol: return CXCursor_ObjCProtocolDecl; - case Decl::ObjCMethod: { - ObjCMethodDecl *MD = dyn_cast<ObjCMethodDecl>(D); - if (MD->isInstanceMethod()) - return CXCursor_ObjCInstanceMethodDecl; - return CXCursor_ObjCClassMethodDecl; - } - default: break; - } - return CXCursor_NotImplemented; -} - static Decl *getDeclFromExpr(Stmt *E) { if (DeclRefExpr *RefExpr = dyn_cast<DeclRefExpr>(E)) return RefExpr->getDecl(); @@ -910,7 +886,7 @@ CXCursor clang_getCursor(CXTranslationUnit CTUnit, const char *source_name, return C; } } - return MakeCXCursor(TranslateKind(Dcl), Dcl); + return MakeCXCursor(Dcl); } return MakeCXCursor(CXCursor_NoDeclFound, 0); } @@ -926,7 +902,7 @@ unsigned clang_equalCursors(CXCursor X, CXCursor Y) { CXCursor clang_getCursorFromDecl(CXDecl AnonDecl) { assert(AnonDecl && "Passed null CXDecl"); NamedDecl *ND = static_cast<NamedDecl *>(AnonDecl); - return MakeCXCursor(TranslateKind(ND), ND); + return MakeCXCursor(ND); } unsigned clang_isInvalid(enum CXCursorKind K) { @@ -950,7 +926,7 @@ CXCursorKind clang_getCursorKind(CXCursor C) { } CXDecl clang_getCursorDecl(CXCursor C) { - if (clang_isDeclaration(C.kind)) + if (clang_isDeclaration(C.kind) || clang_isDefinition(C.kind)) return getCursorDecl(C); if (clang_isReference(C.kind)) { diff --git a/clang/tools/CIndex/CXCursor.cpp b/clang/tools/CIndex/CXCursor.cpp index 00313edc452..e6304459792 100644 --- a/clang/tools/CIndex/CXCursor.cpp +++ b/clang/tools/CIndex/CXCursor.cpp @@ -32,14 +32,25 @@ CXCursor cxcursor::MakeCXCursor(CXCursorKind K, Decl *D, Stmt *S) { static CXCursorKind GetCursorKind(Decl *D) { switch (D->getKind()) { + case Decl::Enum: return CXCursor_EnumDecl; + case Decl::EnumConstant: return CXCursor_EnumConstantDecl; + case Decl::Field: return CXCursor_FieldDecl; case Decl::Function: return cast<FunctionDecl>(D)->isThisDeclarationADefinition() ? CXCursor_FunctionDefn : CXCursor_FunctionDecl; case Decl::ObjCCategory: return CXCursor_ObjCCategoryDecl; case Decl::ObjCCategoryImpl: return CXCursor_ObjCCategoryDefn; + case Decl::ObjCClass: + // FIXME + return CXCursor_NotImplemented; case Decl::ObjCImplementation: return CXCursor_ObjCClassDefn; case Decl::ObjCInterface: return CXCursor_ObjCInterfaceDecl; + case Decl::ObjCIvar: return CXCursor_ObjCIvarDecl; + case Decl::ObjCMethod: + return cast<ObjCMethodDecl>(D)->isInstanceMethod() + ? CXCursor_ObjCInstanceMethodDecl : CXCursor_ObjCClassMethodDecl; case Decl::ObjCProtocol: return CXCursor_ObjCProtocolDecl; + case Decl::ParmVar: return CXCursor_ParmDecl; case Decl::Typedef: return CXCursor_TypedefDecl; case Decl::Var: return CXCursor_VarDecl; default: diff --git a/clang/tools/c-index-test/c-index-test.c b/clang/tools/c-index-test/c-index-test.c index a689dc54e11..afceafab205 100644 --- a/clang/tools/c-index-test/c-index-test.c +++ b/clang/tools/c-index-test/c-index-test.c @@ -74,7 +74,10 @@ static const char* GetCursorSource(CXCursor Cursor) { static const char *FileCheckPrefix = "CHECK"; static void PrintDeclExtent(CXDecl Dcl) { - CXSourceExtent extent = clang_getDeclExtent(Dcl); + CXSourceExtent extent; + if (!Dcl) + return; + extent = clang_getDeclExtent(Dcl); printf(" [Extent=%d:%d:%d:%d]", extent.begin.line, extent.begin.column, extent.end.line, extent.end.column); } @@ -101,6 +104,7 @@ static void DeclVisitor(CXDecl Dcl, CXCursor Cursor, CXClientData Filter) { static void TranslationUnitVisitor(CXTranslationUnit Unit, CXCursor Cursor, CXClientData Filter) { if (!Filter || (Cursor.kind == *(enum CXCursorKind *)Filter)) { + CXDecl D; CXString string; printf("// %s: %s:%d:%d: ", FileCheckPrefix, GetCursorSource(Cursor), clang_getCursorLine(Cursor), @@ -111,11 +115,15 @@ static void TranslationUnitVisitor(CXTranslationUnit Unit, CXCursor Cursor, basename(clang_getCString(string))); clang_disposeString(string); - PrintDeclExtent(Cursor.data[0]); - - printf("\n"); + D = clang_getCursorDecl(Cursor); + if (!D) { + printf("\n"); + return; + } - clang_loadDeclaration(Cursor.data[0], DeclVisitor, 0); + PrintDeclExtent(D); + printf("\n"); + clang_loadDeclaration(D, DeclVisitor, 0); } } @@ -179,10 +187,11 @@ static void USRDeclVisitor(CXDecl D, CXCursor C, CXClientData Filter) { } static void USRVisitor(CXTranslationUnit Unit, CXCursor Cursor, - CXClientData Filter) { - if (Cursor.data[0]) { + CXClientData Filter) { + CXDecl D = clang_getCursorDecl(Cursor); + if (D) { /* USRDeclVisitor(Unit, Cursor.decl, Cursor, Filter);*/ - clang_loadDeclaration(Cursor.data[0], USRDeclVisitor, 0); + clang_loadDeclaration(D, USRDeclVisitor, 0); } } |