Flesh out CXCursorKind...

- More declaration types (distinguish between struct/union/class, instance/class methods).
- Add definition types (class, category, function, instance/class method, etc.).

Add client data to clang_loadDeclaration() and implement.



git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@80787 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/tools/c-index-test/c-index-test.c b/tools/c-index-test/c-index-test.c
index 30700d8..d96468f 100644
--- a/tools/c-index-test/c-index-test.c
+++ b/tools/c-index-test/c-index-test.c
@@ -3,16 +3,28 @@
 #include "clang-c/Index.h"
 #include <stdio.h>
 
-static void PrintDecls(CXTranslationUnit Unit, CXCursor Cursor,
-                       CXClientData Filter) {
-  if (clang_isDeclaration(Cursor.kind)) {
-    if (Cursor.kind == *(enum CXCursorKind *)Filter) {
-      printf("%s => %s", clang_getKindSpelling(Cursor.kind),
-                         clang_getDeclSpelling(Cursor.decl));
-      printf(" (%s,%d:%d)\n", clang_getCursorSource(Cursor),
-                              clang_getCursorLine(Cursor),
-                              clang_getCursorColumn(Cursor));
-    }
+static void DeclVisitor(CXDecl Dcl, CXCursor Cursor, CXClientData Filter) 
+{
+  if (!Filter || (Cursor.kind == *(enum CXCursorKind *)Filter)) {
+    printf("%s => %s", clang_getKindSpelling(Cursor.kind),
+                       clang_getDeclSpelling(Cursor.decl));
+    printf(" (%s,%d:%d)\n", clang_getCursorSource(Cursor),
+                            clang_getCursorLine(Cursor),
+                            clang_getCursorColumn(Cursor));
+  }
+}
+static void TranslationUnitVisitor(CXTranslationUnit Unit, CXCursor Cursor,
+                                   CXClientData Filter) 
+{
+  if (!Filter || (Cursor.kind == *(enum CXCursorKind *)Filter)) {
+    printf("%s => %s", clang_getKindSpelling(Cursor.kind),
+                       clang_getDeclSpelling(Cursor.decl));
+    printf(" (%s,%d:%d)\n", clang_getCursorSource(Cursor),
+                            clang_getCursorLine(Cursor),
+                            clang_getCursorColumn(Cursor));
+
+    enum CXCursorKind filterData = CXCursor_FieldDecl;
+    clang_loadDeclaration(Cursor.decl, DeclVisitor, 0);
   }
 }
 
@@ -23,8 +35,7 @@
   CXIndex Idx = clang_createIndex();
   CXTranslationUnit TU = clang_createTranslationUnit(Idx, argv[1]);
   
-  /* Use client data to only print ObjC interfaces */
-  enum CXCursorKind filterData = CXCursor_ObjCInterfaceDecl;
-  clang_loadTranslationUnit(TU, PrintDecls, &filterData);
+  enum CXCursorKind filterData = CXCursor_StructDecl;
+  clang_loadTranslationUnit(TU, TranslationUnitVisitor, 0);
   return 1;
 }