diff options
author | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2011-11-12 02:16:30 +0000 |
---|---|---|
committer | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2011-11-12 02:16:30 +0000 |
commit | 6ec43adc39006a7fce94188956d0239bd54c0363 (patch) | |
tree | 76689d6b1d0528535ca34a1e44005a1f9fdba94e /tools/c-index-test/c-index-test.c | |
parent | 23d29c861f2770fe9f99ba80cca2e7cf4ac675ea (diff) |
[libclang] Further simplify the indexing API.
That stuff can be added later on if we need them.
Also add some const goodness.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@144446 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'tools/c-index-test/c-index-test.c')
-rw-r--r-- | tools/c-index-test/c-index-test.c | 174 |
1 files changed, 49 insertions, 125 deletions
diff --git a/tools/c-index-test/c-index-test.c b/tools/c-index-test/c-index-test.c index 833c5b47b2..ac2ab4fdd9 100644 --- a/tools/c-index-test/c-index-test.c +++ b/tools/c-index-test/c-index-test.c @@ -1577,7 +1577,8 @@ static void printCXIndexLoc(CXIdxLoc loc) { printf("%d:%d", line, column); } -static CXIdxClientEntity makeClientEntity(CXIdxEntityInfo *info, CXIdxLoc loc) { +static CXIdxClientContainer makeClientContainer(const CXIdxEntityInfo *info, + CXIdxLoc loc) { const char *name; char *newStr; CXIdxClientFile file; @@ -1591,7 +1592,7 @@ static CXIdxClientEntity makeClientEntity(CXIdxEntityInfo *info, CXIdxLoc loc) { /* FIXME: free these.*/ newStr = (char *)malloc(strlen(name) + 10); sprintf(newStr, "%s:%d:%d", name, line, column); - return (CXIdxClientEntity)newStr; + return (CXIdxClientContainer)newStr; } static void printCXIndexContainer(CXIdxClientContainer container) { @@ -1617,12 +1618,13 @@ static const char *getEntityKindString(CXIdxEntityKind kind) { case CXIdxEntity_Union: return "union"; case CXIdxEntity_CXXClass: return "c++-class"; } - return "<unknown>"; + assert(0 && "Garbage entity kind"); + return 0; } static void printEntityInfo(const char *cb, CXClientData client_data, - CXIdxEntityInfo *info) { + const CXIdxEntityInfo *info) { const char *name; IndexData *index_data; index_data = (IndexData *)client_data; @@ -1670,7 +1672,7 @@ static CXIdxClientFile index_enteredMainFile(CXClientData client_data, } static CXIdxClientFile index_ppIncludedFile(CXClientData client_data, - CXIdxIncludedFileInfo *info) { + const CXIdxIncludedFileInfo *info) { IndexData *index_data; index_data = (IndexData *)client_data; printCheck(index_data); @@ -1685,62 +1687,6 @@ static CXIdxClientFile index_ppIncludedFile(CXClientData client_data, return (CXIdxClientFile)info->file; } -static CXIdxClientMacro index_ppMacroDefined(CXClientData client_data, - CXIdxMacroDefinedInfo *info) { - IndexData *index_data; - index_data = (IndexData *)client_data; - printCheck(index_data); - - printf("[ppMacroDefined]: %s", info->macroInfo->name); - printf(" | loc: "); - printCXIndexLoc(info->macroInfo->loc); - printf(" | defBegin: "); - printCXIndexLoc(info->defBegin); - printf(" | length: %d\n", info->defLength); - - return (CXIdxClientMacro)info->macroInfo->name; -} - -static void index_ppMacroUndefined(CXClientData client_data, - CXIdxMacroUndefinedInfo *info) { - IndexData *index_data; - index_data = (IndexData *)client_data; - printCheck(index_data); - - printf("[ppMacroUndefined]: %s", info->name); - printf(" | loc: "); - printCXIndexLoc(info->loc); - printf("\n"); -} - -static void index_ppMacroExpanded(CXClientData client_data, - CXIdxMacroExpandedInfo *info) { - IndexData *index_data; - index_data = (IndexData *)client_data; - printCheck(index_data); - - printf("[ppMacroExpanded]: %s", info->name); - printf(" | loc: "); - printCXIndexLoc(info->loc); - printf("\n"); -} - -static CXIdxClientEntity index_importedEntity(CXClientData client_data, - CXIdxImportedEntityInfo *info) { - IndexData *index_data; - index_data = (IndexData *)client_data; - printCheck(index_data); - - printEntityInfo("[importedEntity]", client_data, info->entityInfo); - printf(" | cursor: "); - PrintCursor(info->cursor); - printf(" | loc: "); - printCXIndexLoc(info->loc); - printf("\n"); - - return makeClientEntity(info->entityInfo, info->loc); -} - static CXIdxClientContainer index_startedTranslationUnit(CXClientData client_data, void *reserved) { IndexData *index_data; @@ -1751,9 +1697,14 @@ static CXIdxClientContainer index_startedTranslationUnit(CXClientData client_dat return (CXIdxClientContainer)"TU"; } -static CXIdxClientEntity index_indexDeclaration(CXClientData client_data, - CXIdxDeclInfo *info) { +static void index_indexDeclaration(CXClientData client_data, + const CXIdxDeclInfo *info, + const CXIdxDeclOut *outData) { IndexData *index_data; + const CXIdxObjCCategoryDeclInfo *CatInfo; + const CXIdxObjCInterfaceDeclInfo *InterInfo; + const CXIdxObjCProtocolDeclInfo *ProtoInfo; + unsigned i; index_data = (IndexData *)client_data; printEntityInfo("[indexDeclaration]", client_data, info->entityInfo); @@ -1766,13 +1717,6 @@ static CXIdxClientEntity index_indexDeclaration(CXClientData client_data, printf(" | isRedecl: %d", info->isRedeclaration); printf(" | isDef: %d\n", info->isDefinition); - - if (clang_index_isEntityTagKind(info->entityInfo->kind)) { - printCheck(index_data); - printf(" <TagInfo>: isAnonymous: %d\n", - clang_index_getTagDeclInfo(info)->isAnonymous); - } - if (clang_index_isEntityObjCContainerKind(info->entityInfo->kind)) { const char *kindName = 0; CXIdxObjCContainerKind K = clang_index_getObjCContainerDeclInfo(info)->kind; @@ -1788,64 +1732,51 @@ static CXIdxClientEntity index_indexDeclaration(CXClientData client_data, printf(" <ObjCContainerInfo>: kind: %s\n", kindName); } - if (clang_index_isEntityObjCCategoryKind(info->entityInfo->kind)) { - CXIdxObjCCategoryDeclInfo * - CatInfo = clang_index_getObjCCategoryDeclInfo(info); + if ((CatInfo = clang_index_getObjCCategoryDeclInfo(info))) { printEntityInfo(" <ObjCCategoryInfo>: class", client_data, CatInfo->objcClass); printf("\n"); } - if (!info->isRedeclaration) - return makeClientEntity(info->entityInfo, info->loc); - - return 0; -} - -static CXIdxClientContainer -index_startedContainer(CXClientData client_data, CXIdxContainerInfo *info) { - printEntityInfo("[startedContainer]", client_data, info->entity); - printf(" | cursor: "); - PrintCursor(info->cursor); - printf(" | loc: "); - printCXIndexLoc(info->loc); - printf(" | isObjCImpl: %d\n", info->isObjCImpl); - - return (CXIdxClientContainer)info->entity->clientEntity; -} - -static void index_defineObjCClass(CXClientData client_data, - CXIdxObjCClassDefineInfo *info) { - printEntityInfo("[defineObjCClass]", client_data, info->objcClass); - printf(" | cursor: "); - PrintCursor(info->cursor); - printf(" | container: "); - printCXIndexContainer(info->container); - - if (info->baseInfo) { - printEntityInfo(" | <base>", client_data, info->baseInfo->objcClass); - printf(" | base loc: "); - printCXIndexLoc(info->baseInfo->loc); + if ((InterInfo = clang_index_getObjCInterfaceDeclInfo(info))) { + if (InterInfo->superInfo) { + printEntityInfo(" <ObjCInterfaceInfo>: base", client_data, + InterInfo->superInfo->base); + printf(" | cursor: "); + PrintCursor(InterInfo->superInfo->cursor); + printf(" | loc: "); + printCXIndexLoc(InterInfo->superInfo->loc); + printf("\n"); + } + for (i = 0; i < InterInfo->numProtocols; ++i) { + printEntityInfo(" <ObjCInterfaceInfo>: protocol", client_data, + InterInfo->protocols[i]->protocol); + printf(" | cursor: "); + PrintCursor(InterInfo->protocols[i]->cursor); + printf(" | loc: "); + printCXIndexLoc(InterInfo->protocols[i]->loc); + printf("\n"); + } } - printf("\n"); -} - -static void index_endedContainer(CXClientData client_data, - CXIdxEndContainerInfo *info) { - IndexData *index_data; - index_data = (IndexData *)client_data; - printCheck(index_data); + if ((ProtoInfo = clang_index_getObjCProtocolDeclInfo(info))) { + for (i = 0; i < ProtoInfo->numProtocols; ++i) { + printEntityInfo(" <ObjCProtocolInfo>: protocol", client_data, + ProtoInfo->protocols[i]->protocol); + printf(" | cursor: "); + PrintCursor(ProtoInfo->protocols[i]->cursor); + printf(" | loc: "); + printCXIndexLoc(ProtoInfo->protocols[i]->loc); + printf("\n"); + } + } - printf("[endedContainer]: "); - printCXIndexContainer(info->container); - printf(" | end: "); - printCXIndexLoc(info->endLoc); - printf("\n"); + if (outData->outContainer) + *outData->outContainer = makeClientContainer(info->entityInfo, info->loc); } static void index_indexEntityReference(CXClientData client_data, - CXIdxEntityRefInfo *info) { + const CXIdxEntityRefInfo *info) { printEntityInfo("[indexEntityReference]", client_data, info->referencedEntity); printf(" | cursor: "); PrintCursor(info->cursor); @@ -1863,20 +1794,13 @@ static void index_indexEntityReference(CXClientData client_data, } static IndexerCallbacks IndexCB = { + 0, /*abortQuery*/ index_diagnostic, index_enteredMainFile, index_ppIncludedFile, - index_ppMacroDefined, - index_ppMacroUndefined, - index_ppMacroExpanded, 0, /*importedASTFile*/ - index_importedEntity, - 0,/*index_importedMacro,*/ index_startedTranslationUnit, index_indexDeclaration, - index_startedContainer, - index_defineObjCClass, - index_endedContainer, index_indexEntityReference }; |