[libclang] Indexing API: Support C++ symbols.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@145058 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 43f0983..0e7193e 100644
--- a/tools/c-index-test/c-index-test.c
+++ b/tools/c-index-test/c-index-test.c
@@ -1609,7 +1609,9 @@
return (CXIdxClientContainer)newStr;
}
-static void printCXIndexContainer(CXIdxClientContainer container) {
+static void printCXIndexContainer(const CXIdxContainerInfo *info) {
+ CXIdxClientContainer container;
+ container = clang_index_getClientContainer(info);
if (!container)
printf("[<<NULL>>]");
else
@@ -1635,6 +1637,27 @@
case CXIdxEntity_Struct: return "struct";
case CXIdxEntity_Union: return "union";
case CXIdxEntity_CXXClass: return "c++-class";
+ case CXIdxEntity_CXXNamespace: return "namespace";
+ case CXIdxEntity_CXXNamespaceAlias: return "namespace-alias";
+ case CXIdxEntity_CXXStaticVariable: return "c++-static-var";
+ case CXIdxEntity_CXXStaticMethod: return "c++-static-method";
+ case CXIdxEntity_CXXInstanceMethod: return "c++-instance-method";
+ case CXIdxEntity_CXXConstructor: return "constructor";
+ case CXIdxEntity_CXXDestructor: return "destructor";
+ case CXIdxEntity_CXXConversionFunction: return "conversion-func";
+ case CXIdxEntity_CXXTypeAlias: return "type-alias";
+ }
+ assert(0 && "Garbage entity kind");
+ return 0;
+}
+
+static const char *getEntityTemplateKindString(CXIdxEntityCXXTemplateKind kind) {
+ switch (kind) {
+ case CXIdxEntity_NonTemplate: return "";
+ case CXIdxEntity_Template: return "-template";
+ case CXIdxEntity_TemplatePartialSpecialization:
+ return "-template-partial-spec";
+ case CXIdxEntity_TemplateSpecialization: return "-template-spec";
}
assert(0 && "Garbage entity kind");
return 0;
@@ -1657,7 +1680,8 @@
if (!name)
name = "<anon-tag>";
- printf("%s: kind: %s", cb, getEntityKindString(info->kind));
+ printf("%s: kind: %s%s", cb, getEntityKindString(info->kind),
+ getEntityTemplateKindString(info->templateKind));
printf(" | name: %s", name);
printf(" | USR: %s", info->USR);
}
@@ -1735,8 +1759,7 @@
}
static void index_indexDeclaration(CXClientData client_data,
- const CXIdxDeclInfo *info,
- const CXIdxDeclOut *outData) {
+ const CXIdxDeclInfo *info) {
IndexData *index_data;
const CXIdxObjCCategoryDeclInfo *CatInfo;
const CXIdxObjCInterfaceDeclInfo *InterInfo;
@@ -1804,8 +1827,9 @@
printProtocolList(ProtoInfo, client_data);
}
- if (outData->outContainer)
- *outData->outContainer = makeClientContainer(info->entityInfo, info->loc);
+ if (info->declAsContainer)
+ clang_index_setClientContainer(info->declAsContainer,
+ makeClientContainer(info->entityInfo, info->loc));
}
static void index_indexEntityReference(CXClientData client_data,
@@ -1839,7 +1863,8 @@
static int index_file(int argc, const char **argv) {
const char *check_prefix;
- CXIndex CIdx;
+ CXIndex Idx;
+ CXIndexAction idxAction;
IndexData index_data;
unsigned index_opts;
int result;
@@ -1858,7 +1883,14 @@
return -1;
}
- CIdx = clang_createIndex(0, 1);
+ if (!(Idx = clang_createIndex(/* excludeDeclsFromPCH */ 1,
+ /* displayDiagnosics=*/1))) {
+ fprintf(stderr, "Could not create Index\n");
+ return 1;
+ }
+ idxAction = 0;
+ result = 1;
+
index_data.check_prefix = check_prefix;
index_data.first_check_printed = 0;
index_data.fail_for_error = 0;
@@ -1867,17 +1899,21 @@
if (getenv("CINDEXTEST_SUPPRESSREFS"))
index_opts |= CXIndexOpt_SuppressRedundantRefs;
- result = clang_indexSourceFile(CIdx, &index_data,
+ idxAction = clang_IndexAction_create(Idx);
+ result = clang_indexSourceFile(idxAction, &index_data,
&IndexCB,sizeof(IndexCB), index_opts,
0, argv, argc, 0, 0, 0, 0);
if (index_data.fail_for_error)
- return -1;
+ result = -1;
+ clang_IndexAction_dispose(idxAction);
+ clang_disposeIndex(Idx);
return result;
}
static int index_tu(int argc, const char **argv) {
CXIndex Idx;
+ CXIndexAction idxAction;
CXTranslationUnit TU;
const char *check_prefix;
IndexData index_data;
@@ -1903,9 +1939,11 @@
fprintf(stderr, "Could not create Index\n");
return 1;
}
+ idxAction = 0;
+ result = 1;
if (!CreateTranslationUnit(Idx, argv[0], &TU))
- return 1;
+ goto finished;
index_data.check_prefix = check_prefix;
index_data.first_check_printed = 0;
@@ -1914,13 +1952,18 @@
index_opts = 0;
if (getenv("CINDEXTEST_SUPPRESSREFS"))
index_opts |= CXIndexOpt_SuppressRedundantRefs;
-
- result = clang_indexTranslationUnit(TU, &index_data,
- &IndexCB,sizeof(IndexCB),
- index_opts);
- if (index_data.fail_for_error)
- return -1;
+ idxAction = clang_IndexAction_create(Idx);
+ result = clang_indexTranslationUnit(idxAction, &index_data,
+ &IndexCB,sizeof(IndexCB),
+ index_opts, TU);
+ if (index_data.fail_for_error)
+ goto finished;
+
+ finished:
+ clang_IndexAction_dispose(idxAction);
+ clang_disposeIndex(Idx);
+
return result;
}