aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/clang-c/Index.h395
-rw-r--r--tools/c-index-test/c-index-test.c383
-rw-r--r--tools/libclang/IndexDecl.cpp67
-rw-r--r--tools/libclang/IndexTypeSourceInfo.cpp4
-rw-r--r--tools/libclang/Indexing.cpp54
-rw-r--r--tools/libclang/IndexingContext.cpp581
-rw-r--r--tools/libclang/IndexingContext.h102
-rw-r--r--tools/libclang/libclang.exports6
8 files changed, 629 insertions, 963 deletions
diff --git a/include/clang-c/Index.h b/include/clang-c/Index.h
index 941381d79e..7a44c2d4a9 100644
--- a/include/clang-c/Index.h
+++ b/include/clang-c/Index.h
@@ -3938,7 +3938,7 @@ void clang_findReferencesInFileWithBlock(CXCursor, CXFile,
/**
* \brief The client's data object that is associated with a CXFile.
*/
-typedef void *CXIdxFile;
+typedef void *CXIdxClientFile;
/**
* \brief The client's data object that is associated with a unique entity in
@@ -3952,7 +3952,7 @@ typedef void *CXIdxFile;
*
* In the example above there is only one entity introduced, the class 'Foo'.
*/
-typedef void *CXIdxEntity;
+typedef void *CXIdxClientEntity;
/**
* \brief The client's data object that is associated with a semantic container
@@ -3983,23 +3983,22 @@ typedef void *CXIdxEntity;
* container. Note that C++ out-of-line member functions (#7) are considered
* as part of the C++ class container, not of the translation unit.
*/
-typedef void *CXIdxContainer;
+typedef void *CXIdxClientContainer;
/**
* \brief The client's data object that is associated with a macro definition
* in the current translation unit that gets indexed.
*/
-typedef void *CXIdxMacro;
+typedef void *CXIdxClientMacro;
/**
* \brief The client's data object that is associated with an AST file (PCH
* or module).
*/
-typedef void *CXIdxASTFile;
+typedef void *CXIdxClientASTFile;
/**
- * \brief The client's data object that is associated with an AST file (PCH
- * or module).
+ * \brief Source location passed to index callbacks.
*/
typedef struct {
void *ptr_data[2];
@@ -4021,7 +4020,7 @@ typedef struct {
/**
* \brief The actual file that the #include/#import directive resolved to.
*/
- CXIdxFile file;
+ CXFile file;
int isImport;
int isAngled;
} CXIdxIncludedFileInfo;
@@ -4068,7 +4067,7 @@ typedef struct {
typedef struct {
CXIdxLoc loc;
const char *name;
- CXIdxMacro macro;
+ CXIdxClientMacro macro;
} CXIdxMacroUndefinedInfo;
/**
@@ -4077,198 +4076,99 @@ typedef struct {
typedef struct {
CXIdxLoc loc;
const char *name;
- CXIdxMacro macro;
+ CXIdxClientMacro macro;
} CXIdxMacroExpandedInfo;
-typedef struct {
- const char *name;
- const char *USR;
-} CXIdxEntityInfo;
-
-typedef struct {
- CXCursor cursor;
- CXIdxLoc loc;
- CXIdxContainer container;
-} CXIdxIndexedDeclInfo;
-
-/**
- * \brief Data for \see importedEntity callback.
- */
-typedef struct {
- CXIdxEntityInfo *entityInfo;
- CXCursor cursor;
- CXIdxLoc loc;
- CXIdxASTFile ASTFile;
-} CXIdxImportedEntityInfo;
-
/**
* \brief Data for \see importedMacro callback.
*/
typedef struct {
CXIdxMacroInfo *macroInfo;
- CXIdxASTFile ASTFile;
+ CXIdxClientASTFile ASTFile;
} CXIdxImportedMacroInfo;
-typedef struct {
- CXIdxEntityInfo *entityInfo;
- CXIdxIndexedDeclInfo *declInfo;
-} CXIdxIndexedEntityInfo;
-
-typedef struct {
- CXIdxIndexedDeclInfo *declInfo;
- CXIdxEntity entity;
-} CXIdxIndexedRedeclInfo;
-
-typedef struct {
- CXCursor cursor;
- CXIdxLoc loc;
- CXIdxEntity entity;
-} CXIdxContainerInfo;
-
-/**
- * \brief Data for \see indexTypedef callback.
- */
-typedef struct {
- CXIdxIndexedEntityInfo *indexedEntityInfo;
-} CXIdxTypedefInfo;
-
-/**
- * \brief Data for \see indexFunction callback.
- */
-typedef struct {
- CXIdxIndexedEntityInfo *indexedEntityInfo;
- int isDefinition;
-} CXIdxFunctionInfo;
-
-/**
- * \brief Data for \see indexFunctionRedeclaration callback.
- */
-typedef struct {
- CXIdxIndexedRedeclInfo *indexedRedeclInfo;
- int isDefinition;
-} CXIdxFunctionRedeclInfo;
-
-/**
- * \brief Data for \see indexVariable callback.
- */
-typedef struct {
- CXIdxIndexedEntityInfo *indexedEntityInfo;
- int isDefinition;
-} CXIdxVariableInfo;
+typedef enum {
+ CXIdxEntity_Unexposed = 0,
+ CXIdxEntity_Typedef = 1,
+ CXIdxEntity_Function = 2,
+ CXIdxEntity_Variable = 3,
+ CXIdxEntity_Field = 4,
+ CXIdxEntity_EnumConstant = 5,
-/**
- * \brief Data for \see indexVariableRedeclaration callback.
- */
-typedef struct {
- CXIdxIndexedRedeclInfo *indexedRedeclInfo;
- int isDefinition;
-} CXIdxVariableRedeclInfo;
+ CXIdxEntity_ObjCClass = 6,
+ CXIdxEntity_ObjCProtocol = 7,
+ CXIdxEntity_ObjCCategory = 8,
-/**
- * \brief Data for \see indexTagType callback.
- */
-typedef struct {
- CXIdxIndexedEntityInfo *indexedEntityInfo;
- int isDefinition;
- int isAnonymous;
-} CXIdxTagTypeInfo;
+ CXIdxEntity_ObjCMethod = 9,
+ CXIdxEntity_ObjCProperty = 10,
+ CXIdxEntity_ObjCIvar = 11,
-/**
- * \brief Data for \see indexTagTypeRedeclaration callback.
- */
-typedef struct {
- CXIdxIndexedRedeclInfo *indexedRedeclInfo;
- int isDefinition;
-} CXIdxTagTypeRedeclInfo;
-
-/**
- * \brief Data for \see startedTagTypeDefinition callback.
- */
-typedef struct {
- CXIdxContainerInfo *containerInfo;
-} CXIdxTagTypeDefinitionInfo;
+ CXIdxEntity_Enum = 12,
+ CXIdxEntity_Struct = 13,
+ CXIdxEntity_Union = 14,
+ CXIdxEntity_CXXClass = 15
-/**
- * \brief Data for \see indexField callback.
- */
-typedef struct {
- CXIdxIndexedEntityInfo *indexedEntityInfo;
-} CXIdxFieldInfo;
-
-/**
- * \brief Data for \see indexEnumerator callback.
- */
-typedef struct {
- CXIdxIndexedEntityInfo *indexedEntityInfo;
-} CXIdxEnumeratorInfo;
+} CXIdxEntityKind;
-/**
- * \brief Data for \see indexObjCClass callback.
- */
typedef struct {
- CXIdxIndexedEntityInfo *indexedEntityInfo;
- int isForwardRef;
-} CXIdxObjCClassInfo;
+ CXIdxEntityKind kind;
+ const char *name;
+ const char *USR;
+ CXIdxClientEntity clientEntity;
+} CXIdxEntityInfo;
/**
- * \brief Data for \see indexObjCProtocol callback.
+ * \brief Data for \see importedEntity callback.
*/
typedef struct {
- CXIdxIndexedEntityInfo *indexedEntityInfo;
- int isForwardRef;
-} CXIdxObjCProtocolInfo;
+ CXIdxEntityInfo *entityInfo;
+ CXCursor cursor;
+ CXIdxLoc loc;
+ CXIdxClientASTFile ASTFile;
+} CXIdxImportedEntityInfo;
-/**
- * \brief Data for \see indexObjCCategory callback.
- */
typedef struct {
- CXIdxIndexedEntityInfo *indexedEntityInfo;
- CXIdxEntity objcClass;
-} CXIdxObjCCategoryInfo;
+ CXIdxEntityInfo *entity;
+ CXCursor cursor;
+ CXIdxLoc loc;
+ int isObjCImpl;
+} CXIdxContainerInfo;
-/**
- * \brief Data for \see indexObjCMethod callback.
- */
typedef struct {
- CXIdxIndexedEntityInfo *indexedEntityInfo;
+ CXIdxEntityInfo *entityInfo;
+ CXCursor cursor;
+ CXIdxLoc loc;
+ CXIdxClientContainer container;
+ int isRedeclaration;
int isDefinition;
-} CXIdxObjCMethodInfo;
+} CXIdxDeclInfo;
-/**
- * \brief Data for \see indexObjCProperty callback.
- */
typedef struct {
- CXIdxIndexedEntityInfo *indexedEntityInfo;
-} CXIdxObjCPropertyInfo;
+ CXIdxDeclInfo *declInfo;
+ int isAnonymous;
+} CXIdxTagDeclInfo;
-/**
- * \brief Data for \see indexObjCMethodRedeclaration callback.
- */
-typedef struct {
- CXIdxIndexedRedeclInfo *indexedRedeclInfo;
- int isDefinition;
-} CXIdxObjCMethodRedeclInfo;
+typedef enum {
+ CXIdxObjCContainer_ForwardRef = 0,
+ CXIdxObjCContainer_Interface = 1,
+ CXIdxObjCContainer_Implementation = 2
+} CXIdxObjCContainerKind;
-/**
- * \brief Data for \see startedStatementBody callback.
- */
typedef struct {
- CXIdxContainerInfo *containerInfo;
- CXIdxLoc bodyBegin;
-} CXIdxStmtBodyInfo;
+ CXIdxDeclInfo *declInfo;
+ CXIdxObjCContainerKind kind;
+} CXIdxObjCContainerDeclInfo;
-/**
- * \brief Data for \see startedObjCContainer callback.
- */
typedef struct {
- CXIdxContainerInfo *containerInfo;
-} CXIdxObjCContainerInfo;
+ CXIdxObjCContainerDeclInfo *containerInfo;
+ CXIdxEntityInfo *objcClass;
+} CXIdxObjCCategoryDeclInfo;
/**
* \brief Data for \see defineObjCClass callback.
*/
typedef struct {
- CXIdxEntity objcClass;
+ CXIdxEntityInfo *objcClass;
CXIdxLoc loc;
} CXIdxObjCBaseClassInfo;
@@ -4276,7 +4176,7 @@ typedef struct {
* \brief Data for \see defineObjCClass callback.
*/
typedef struct {
- CXIdxEntity protocol;
+ CXIdxEntityInfo *protocol;
CXIdxLoc loc;
} CXIdxObjCProtocolRefInfo;
@@ -4285,8 +4185,8 @@ typedef struct {
*/
typedef struct {
CXCursor cursor;
- CXIdxEntity objcClass;
- CXIdxContainer container;
+ CXIdxEntityInfo *objcClass;
+ CXIdxClientContainer container;
CXIdxObjCBaseClassInfo *baseInfo;
CXIdxObjCProtocolRefInfo **protocols;
unsigned numProtocols;
@@ -4296,7 +4196,7 @@ typedef struct {
* \brief Data for \see endedContainer callback.
*/
typedef struct {
- CXIdxContainer container;
+ CXIdxClientContainer container;
CXIdxLoc endLoc;
} CXIdxEndContainerInfo;
@@ -4326,7 +4226,7 @@ typedef struct {
/**
* \brief The entity that gets referenced.
*/
- CXIdxEntity referencedEntity;
+ CXIdxEntityInfo *referencedEntity;
/**
* \brief Immediate "parent" of the reference. For example:
*
@@ -4337,11 +4237,11 @@ typedef struct {
* The parent of reference of type 'Foo' is the variable 'var'.
* parentEntity will be null for references inside statement bodies.
*/
- CXIdxEntity parentEntity;
+ CXIdxEntityInfo *parentEntity;
/**
* \brief Container context of the reference.
*/
- CXIdxContainer container;
+ CXIdxClientContainer container;
CXIdxEntityRefKind kind;
} CXIdxEntityRefInfo;
@@ -4352,23 +4252,19 @@ typedef struct {
void (*diagnostic)(CXClientData client_data,
CXDiagnostic, void *reserved);
- /**
- * \brief Called for the purpose of associating a client's CXIdxFile with
- * a CXFile.
- */
- CXIdxFile (*recordFile)(CXClientData client_data,
- CXFile file, void *reserved);
-
+ CXIdxClientFile (*enteredMainFile)(CXClientData client_data,
+ CXFile mainFile, void *reserved);
+
/**
* \brief Called when a file gets #included/#imported.
*/
- void (*ppIncludedFile)(CXClientData client_data,
- CXIdxIncludedFileInfo *);
+ CXIdxClientFile (*ppIncludedFile)(CXClientData client_data,
+ CXIdxIncludedFileInfo *);
/**
* \brief Called when a macro gets #defined.
*/
- CXIdxMacro (*ppMacroDefined)(CXClientData client_data,
+ CXIdxClientMacro (*ppMacroDefined)(CXClientData client_data,
CXIdxMacroDefinedInfo *);
/**
@@ -4393,138 +4289,37 @@ typedef struct {
* the AST file can be later associated with CXIdxEntities returned by
* \see importedEntity callbacks.
*/
- CXIdxASTFile (*importedASTFile)(CXClientData client_data,
+ CXIdxClientASTFile (*importedASTFile)(CXClientData client_data,
CXIdxImportedASTFileInfo *);
/**
* \brief Called when an entity gets imported from an AST file. This generally
* happens when an entity from a PCH/module is referenced for the first time.
*/
- CXIdxEntity (*importedEntity)(CXClientData client_data,
- CXIdxImportedEntityInfo *);
+ CXIdxClientEntity (*importedEntity)(CXClientData client_data,
+ CXIdxImportedEntityInfo *);
/**
* \brief Called when a macro gets imported from an AST file. This generally
* happens when a macro from a PCH/module is referenced for the first time.
*/
- CXIdxEntity (*importedMacro)(CXClientData client_data,
- CXIdxImportedMacroInfo *);
+ CXIdxClientMacro (*importedMacro)(CXClientData client_data,
+ CXIdxImportedMacroInfo *);
/**
* \brief Called at the beginning of indexing a translation unit.
*/
- CXIdxContainer (*startedTranslationUnit)(CXClientData client_data,
+ CXIdxClientContainer (*startedTranslationUnit)(CXClientData client_data,
void *reserved);
- /**
- * \brief Called to index a typedef entity.
- */
- CXIdxEntity (*indexTypedef)(CXClientData client_data,
- CXIdxTypedefInfo *);
-
- /**
- * \brief Called to index a function entity.
- */
- CXIdxEntity (*indexFunction)(CXClientData client_data,
- CXIdxFunctionInfo *);
-
- /**
- * \brief Called to index a function redeclaration.
- */
- void (*indexFunctionRedeclaration)(CXClientData client_data,
- CXIdxFunctionRedeclInfo *);
+ CXIdxClientEntity (*indexDeclaration)(CXClientData client_data,
+ CXIdxDeclInfo *);
/**
- * \brief Called to index a file-scope variable (not field or ivar).
+ * \brief Called to initiate a container context.
*/
- CXIdxEntity (*indexVariable)(CXClientData client_data,
- CXIdxVariableInfo *);
-
- /**
- * \brief Called to index a variable redeclaration.
- */
- void (*indexVariableRedeclaration)(CXClientData client_data,
- CXIdxVariableRedeclInfo *);
-
- /**
- * \brief Called to index a tag entity (struct/union/enum/class).
- */
- CXIdxEntity (*indexTagType)(CXClientData client_data,
- CXIdxTagTypeInfo *);
-
- /**
- * \brief Called to index a tag redeclaration.
- */
- void (*indexTagTypeRedeclaration)(CXClientData client_data,
- CXIdxTagTypeRedeclInfo *);
-
- /**
- * \brief Called to index a tag type's field entity.
- */
- CXIdxEntity (*indexField)(CXClientData client_data,
- CXIdxFieldInfo *);
-
- /**
- * \brief Called to index an enumerator entity.
- */
- CXIdxEntity (*indexEnumerator)(CXClientData client_data,
- CXIdxEnumeratorInfo *);
-
- /**
- * \brief Called to initiate a tag type's container context.
- */
- CXIdxContainer (*startedTagTypeDefinition)(CXClientData client_data,
- CXIdxTagTypeDefinitionInfo *);
-
- /**
- * \brief Called to index an ObjC class entity.
- */
- CXIdxEntity (*indexObjCClass)(CXClientData client_data,
- CXIdxObjCClassInfo *);
-
- /**
- * \brief Called to index an ObjC protocol entity.
- */
- CXIdxEntity (*indexObjCProtocol)(CXClientData client_data,
- CXIdxObjCProtocolInfo *);
-
- /**
- * \brief Called to index an ObjC category entity.
- */
- CXIdxEntity (*indexObjCCategory)(CXClientData client_data,
- CXIdxObjCCategoryInfo *);
-
- /**
- * \brief Called to index an ObjC method entity.
- */
- CXIdxEntity (*indexObjCMethod)(CXClientData client_data,
- CXIdxObjCMethodInfo *);
-
- /**
- * \brief Called to index an ObjC property entity.
- */
- CXIdxEntity (*indexObjCProperty)(CXClientData client_data,
- CXIdxObjCPropertyInfo *);
-
- /**
- * \brief Called to index an ObjC method redeclaration.
- */
- void (*indexObjCMethodRedeclaration)(CXClientData client_data,
- CXIdxObjCMethodRedeclInfo *);
-
- /**
- * \brief Called to initiate a statement body container context for a
- * function/ObjC method/C++ member function/block.
- */
- CXIdxContainer (*startedStatementBody)(CXClientData client_data,
- CXIdxStmtBodyInfo *);
-
- /**
- * \brief Called to initiate an ObjC container context for
- * @interface/@implementation/@protocol.
- */
- CXIdxContainer (*startedObjCContainer)(CXClientData client_data,
- CXIdxObjCContainerInfo *);
+ CXIdxClientContainer (*startedContainer)(CXClientData client_data,
+ CXIdxContainerInfo *);
/**
* \brief Called to define an ObjC class via its @interface.
@@ -4546,6 +4341,16 @@ typedef struct {
} IndexerCallbacks;
+int clang_index_isEntityTagKind(CXIdxEntityKind);
+CXIdxTagDeclInfo *clang_index_getTagDeclInfo(CXIdxDeclInfo *);
+
+int clang_index_isEntityObjCContainerKind(CXIdxEntityKind);
+CXIdxObjCContainerDeclInfo *
+clang_index_getObjCContainerDeclInfo(CXIdxDeclInfo *);
+
+int clang_index_isEntityObjCCategoryKind(CXIdxEntityKind);
+CXIdxObjCCategoryDeclInfo *clang_index_getObjCCategoryDeclInfo(CXIdxDeclInfo *);
+
/**
* \brief Index the given source file and the translation unit corresponding
* to that file via callbacks implemented through \see IndexerCallbacks.
@@ -4591,7 +4396,7 @@ CINDEX_LINKAGE int clang_indexTranslationUnit(CXIndex CIdx,
* retrieves the location of the argument.
*/
CINDEX_LINKAGE void clang_indexLoc_getFileLocation(CXIdxLoc loc,
- CXIdxFile *indexFile,
+ CXIdxClientFile *indexFile,
CXFile *file,
unsigned *line,
unsigned *column,
diff --git a/tools/c-index-test/c-index-test.c b/tools/c-index-test/c-index-test.c
index 44b90b13e1..eb992395f2 100644
--- a/tools/c-index-test/c-index-test.c
+++ b/tools/c-index-test/c-index-test.c
@@ -1547,7 +1547,7 @@ static void printCheck(IndexData *data) {
}
}
-static void printCXIndexFile(CXIdxFile file) {
+static void printCXIndexFile(CXIdxClientFile file) {
CXString filename = clang_getFileName((CXFile)file);
printf("%s", clang_getCString(filename));
clang_disposeString(filename);
@@ -1556,7 +1556,7 @@ static void printCXIndexFile(CXIdxFile file) {
static void printCXIndexLoc(CXIdxLoc loc) {
CXString filename;
const char *cname, *end;
- CXIdxFile file;
+ CXIdxClientFile file;
unsigned line, column;
int isHeader;
@@ -1577,88 +1577,63 @@ static void printCXIndexLoc(CXIdxLoc loc) {
printf("%d:%d", line, column);
}
-static CXIdxEntity makeCXIndexEntity(CXIdxIndexedEntityInfo *info) {
+static CXIdxClientEntity makeClientEntity(CXIdxEntityInfo *info, CXIdxLoc loc) {
const char *name;
- CXIdxLoc loc;
char *newStr;
- CXIdxFile file;
+ CXIdxClientFile file;
unsigned line, column;
- name = info->entityInfo->name;
+ name = info->name;
if (!name)
name = "<anon-tag>";
- loc = info->declInfo->loc;
clang_indexLoc_getFileLocation(loc, &file, 0, &line, &column, 0);
/* FIXME: free these.*/
newStr = (char *)malloc(strlen(name) + 10);
sprintf(newStr, "%s:%d:%d", name, line, column);
- return (CXIdxEntity)newStr;
+ return (CXIdxClientEntity)newStr;
}
-static CXIdxContainer makeCXIndexContainer(CXIdxEntity entity) {
- return (CXIdxContainer)entity;
-}
-
-static void printCXIndexEntity(CXIdxEntity entity) {
- printf("{%s}", (const char *)entity);
-}
-
-static void printCXIndexContainer(CXIdxContainer container) {
+static void printCXIndexContainer(CXIdxClientContainer container) {
printf("[%s]", (const char *)container);
}
-static void printIndexedDeclInfo(CXIdxIndexedDeclInfo *info) {
- printf(" | cursor: ");
- PrintCursor(info->cursor);
- printf(" | loc: ");
- printCXIndexLoc(info->loc);
- printf(" | container: ");
- printCXIndexContainer(info->container);
-}
-
-static void printIndexedEntityInfo(const char *cb,
- CXClientData client_data,
- CXIdxIndexedEntityInfo *info) {
+static const char *getEntityKindString(CXIdxEntityKind kind) {
+ switch (kind) {
+ case CXIdxEntity_Unexposed: return "<<UNEXPOSED>>";
+ case CXIdxEntity_Typedef: return "typedef";
+ case CXIdxEntity_Function: return "function";
+ case CXIdxEntity_Variable: return "variable";
+ case CXIdxEntity_Field: return "field";
+ case CXIdxEntity_EnumConstant: return "enumerator";
+ case CXIdxEntity_ObjCClass: return "objc-class";
+ case CXIdxEntity_ObjCProtocol: return "objc-protocol";
+ case CXIdxEntity_ObjCCategory: return "objc-category";
+ case CXIdxEntity_ObjCMethod: return "objc-method";
+ case CXIdxEntity_ObjCProperty: return "objc-property";
+ case CXIdxEntity_ObjCIvar: return "objc-ivar";
+ case CXIdxEntity_Enum: return "enum";
+ case CXIdxEntity_Struct: return "struct";
+ case CXIdxEntity_Union: return "union";
+ case CXIdxEntity_CXXClass: return "c++-class";
+ }
+}
+
+static void printEntityInfo(const char *cb,
+ CXClientData client_data,
+ CXIdxEntityInfo *info) {
const char *name;
IndexData *index_data;
index_data = (IndexData *)client_data;
printCheck(index_data);
- name = info->entityInfo->name;
+ name = info->name;
if (!name)
name = "<anon-tag>";
- printf("%s: %s", cb, info->entityInfo->name);
- printIndexedDeclInfo(info->declInfo);
- printf(" | USR: %s", info->entityInfo->USR);
-}
-
-static void printIndexedRedeclInfo(const char *cb,
- CXClientData client_data,
- CXIdxIndexedRedeclInfo *info) {
- IndexData *index_data;
- index_data = (IndexData *)client_data;
- printCheck(index_data);
-
- printf("%s redeclaration: ", cb);
- printCXIndexEntity(info->entity);
- printIndexedDeclInfo(info->declInfo);
-}
-
-static void printStartedContainerInfo(const char *cb,
- CXClientData client_data,
- CXIdxContainerInfo *info) {
- IndexData *index_data;
- index_data = (IndexData *)client_data;
- printCheck(index_data);
-
- printf("%s: ", cb);
- printCXIndexEntity(info->entity);
- printf(" | cursor: ");
- PrintCursor(info->cursor);
- printf(" | loc: ");
- printCXIndexLoc(info->loc);
+ printf("%s: kind: %s", cb, getEntityKindString(info->kind));
+ printf(" | name: %s", name);
+ printf(" | USR: %s", info->USR);
}
static void index_diagnostic(CXClientData client_data,
@@ -1680,26 +1655,36 @@ static void index_diagnostic(CXClientData client_data,
}
}
-static CXIdxFile index_recordFile(CXClientData client_data,
- CXFile file, void *reserved) {
- return (CXIdxFile)file;
+static CXIdxClientFile index_enteredMainFile(CXClientData client_data,
+ CXFile file, void *reserved) {
+ IndexData *index_data;
+ index_data = (IndexData *)client_data;
+ printCheck(index_data);
+
+ printf("[enteredMainFile]: ");
+ printCXIndexFile((CXIdxClientFile)file);
+ printf("\n");
+
+ return (CXIdxClientFile)file;
}
-static void index_ppIncludedFile(CXClientData client_data,
- CXIdxIncludedFileInfo *info) {
+static CXIdxClientFile index_ppIncludedFile(CXClientData client_data,
+ CXIdxIncludedFileInfo *info) {
IndexData *index_data;
index_data = (IndexData *)client_data;
printCheck(index_data);
printf("[ppIncludedFile]: ");
- printCXIndexFile(info->file);
+ printCXIndexFile((CXIdxClientFile)info->file);
printf(" | name: \"%s\"", info->filename);
printf(" | hash loc: ");
printCXIndexLoc(info->hashLoc);
printf(" | isImport: %d | isAngled: %d\n", info->isImport, info->isAngled);
+
+ return (CXIdxClientFile)info->file;
}
-static CXIdxMacro index_ppMacroDefined(CXClientData client_data,
+static CXIdxClientMacro index_ppMacroDefined(CXClientData client_data,
CXIdxMacroDefinedInfo *info) {
IndexData *index_data;
index_data = (IndexData *)client_data;
@@ -1712,7 +1697,7 @@ static CXIdxMacro index_ppMacroDefined(CXClientData client_data,
printCXIndexLoc(info->defBegin);
printf(" | length: %d\n", info->defLength);
- return (CXIdxMacro)info->macroInfo->name;
+ return (CXIdxClientMacro)info->macroInfo->name;
}
static void index_ppMacroUndefined(CXClientData client_data,
@@ -1739,217 +1724,105 @@ static void index_ppMacroExpanded(CXClientData client_data,
printf("\n");
}
-static CXIdxEntity index_importedEntity(CXClientData client_data,
+static CXIdxClientEntity index_importedEntity(CXClientData client_data,
CXIdxImportedEntityInfo *info) {
IndexData *index_data;
- CXIdxIndexedDeclInfo DeclInfo;
- CXIdxIndexedEntityInfo EntityInfo;
- const char *name;
- DeclInfo.cursor = info->cursor;
- DeclInfo.loc = info->loc;
- DeclInfo.container = 0;
- EntityInfo.entityInfo = info->entityInfo;
- EntityInfo.declInfo = &DeclInfo;
index_data = (IndexData *)client_data;
printCheck(index_data);
- name = info->entityInfo->name;
- if (!name)
- name = "<anon-tag>";
-
- printf("[importedEntity]: %s", name);
+ printEntityInfo("[importedEntity]", client_data, info->entityInfo);
printf(" | cursor: ");
PrintCursor(info->cursor);
printf(" | loc: ");
printCXIndexLoc(info->loc);
printf("\n");
- return makeCXIndexEntity(&EntityInfo);
+ return makeClientEntity(info->entityInfo, info->loc);
}
-static CXIdxContainer index_startedTranslationUnit(CXClientData client_data,
+static CXIdxClientContainer index_startedTranslationUnit(CXClientData client_data,
void *reserved) {
IndexData *index_data;
index_data = (IndexData *)client_data;
printCheck(index_data);
printf("[startedTranslationUnit]\n");
- return (CXIdxContainer)"TU";
-}
-
-static CXIdxEntity index_indexTypedef(CXClientData client_data,
- CXIdxTypedefInfo *info) {
- printIndexedEntityInfo("[indexTypedef]", client_data, info->indexedEntityInfo);
- printf("\n");
-
- return makeCXIndexEntity(info->indexedEntityInfo);
-}
-
-static CXIdxEntity index_indexFunction(CXClientData client_data,
- CXIdxFunctionInfo *info) {
- printIndexedEntityInfo("[indexFunction]", client_data, info->indexedEntityInfo);
- printf(" | isDefinition: %d\n", info->isDefinition);
-
- return makeCXIndexEntity(info->indexedEntityInfo);
-}
-
-static void index_indexFunctionRedeclaration(CXClientData client_data,
- CXIdxFunctionRedeclInfo *info) {
- printIndexedRedeclInfo("[indexFunctionRedeclaration]", client_data,
- info->indexedRedeclInfo);
- printf(" | isDefinition: %d\n", info->isDefinition);
-}
-
-static CXIdxEntity index_indexVariable(CXClientData client_data,
- CXIdxVariableInfo *info) {
- printIndexedEntityInfo("[indexVariable]", client_data, info->indexedEntityInfo);
- printf(" | isDefinition: %d\n", info->isDefinition);
-
- return makeCXIndexEntity(info->indexedEntityInfo);
-}
-
-static void index_indexVariableRedeclaration(CXClientData client_data,
- CXIdxVariableRedeclInfo *info) {
- printIndexedRedeclInfo("[indexVariableRedeclaration]", client_data,
- info->indexedRedeclInfo);
- printf(" | isDefinition: %d\n", info->isDefinition);
-}
-
-static CXIdxEntity index_indexTagType(CXClientData client_data,
- CXIdxTagTypeInfo *info) {
- printIndexedEntityInfo("[indexTagType]", client_data, info->indexedEntityInfo);
- printf(" | isDefinition: %d | anon: %d\n",
- info->isDefinition, info->isAnonymous);
-
- return makeCXIndexEntity(info->indexedEntityInfo);
+ return (CXIdxClientContainer)"TU";
}
-static void index_indexTagTypeRedeclaration(CXClientData client_data,
- CXIdxTagTypeRedeclInfo *info) {
- printIndexedRedeclInfo("[indexTagTypeRedeclaration]", client_data,
- info->indexedRedeclInfo);
- printf(" | isDefinition: %d\n", info->isDefinition);
-}
-
-static CXIdxEntity index_indexField(CXClientData client_data,
- CXIdxFieldInfo *info) {
- printIndexedEntityInfo("[indexField]", client_data, info->indexedEntityInfo);
- printf("\n");
-
- return makeCXIndexEntity(info->indexedEntityInfo);
-}
+static CXIdxClientEntity index_indexDeclaration(CXClientData client_data,
+ CXIdxDeclInfo *info) {
+ IndexData *index_data;
+ index_data = (IndexData *)client_data;
-static CXIdxEntity index_indexEnumerator(CXClientData client_data,
- CXIdxEnumeratorInfo *info) {
- printIndexedEntityInfo("[indexEnumerator]", client_data,
- info->indexedEntityInfo);
- printf("\n");
-
- return makeCXIndexEntity(info->indexedEntityInfo);
-}
+ printEntityInfo("[indexDeclaration]", client_data, info->entityInfo);
+ printf(" | cursor: ");
+ PrintCursor(info->cursor);
+ printf(" | loc: ");
+ printCXIndexLoc(info->loc);
+ printf(" | container: ");
+ printCXIndexContainer(info->container);
+ printf(" | isRedecl: %d", info->isRedeclaration);
+ printf(" | isDef: %d\n", info->isDefinition);
-static CXIdxContainer
-index_startedTagTypeDefinition(CXClientData client_data,
- CXIdxTagTypeDefinitionInfo *info) {
- printStartedContainerInfo("[startedTagTypeDefinition]", client_data,
- info->containerInfo);
- printf("\n");
- return makeCXIndexContainer(info->containerInfo->entity);
-}
-
-static CXIdxEntity index_indexObjCClass(CXClientData client_data,
- CXIdxObjCClassInfo *info) {
- printIndexedEntityInfo("[indexObjCClass]", client_data,
- info->indexedEntityInfo);
- printf(" | forward ref: %d\n", info->isForwardRef);
-
- return makeCXIndexEntity(info->indexedEntityInfo);
-}
-
-static CXIdxEntity index_indexObjCProtocol(CXClientData client_data,
- CXIdxObjCProtocolInfo *info) {
- printIndexedEntityInfo("[indexObjCProtocol]", client_data,
- info->indexedEntityInfo);
- printf(" | forward ref: %d\n", info->isForwardRef);
-
- return makeCXIndexEntity(info->indexedEntityInfo);
-}
-
-static CXIdxEntity index_indexObjCCategory(CXClientData client_data,
- CXIdxObjCCategoryInfo *info) {
- printIndexedEntityInfo("[indexObjCCategory]", client_data,
- info->indexedEntityInfo);
- printf(" | class: ");
- printCXIndexEntity(info->objcClass);
- printf("\n");
-
- return makeCXIndexEntity(info->indexedEntityInfo);
-}
-
-static CXIdxEntity index_indexObjCMethod(CXClientData client_data,
- CXIdxObjCMethodInfo *info) {
- printIndexedEntityInfo("[indexObjCMethod]", client_data,
- info->indexedEntityInfo);
- printf(" | isDefinition: %d\n", info->isDefinition);
-
- return makeCXIndexEntity(info->indexedEntityInfo);
-}
+ 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;
+ switch (K) {
+ case CXIdxObjCContainer_ForwardRef:
+ kindName = "forward-ref"; break;
+ case CXIdxObjCContainer_Interface:
+ kindName = "interface"; break;
+ case CXIdxObjCContainer_Implementation:
+ kindName = "implementation"; break;
+ }
+ printCheck(index_data);
+ printf(" <ObjCContainerInfo>: kind: %s\n", kindName);
+ }
-static CXIdxEntity index_indexObjCProperty(CXClientData client_data,
- CXIdxObjCPropertyInfo *info) {
- printIndexedEntityInfo("[indexObjCProperty]", client_data,
- info->indexedEntityInfo);
- printf("\n");
+ if (clang_index_isEntityObjCCategoryKind(info->entityInfo->kind)) {
+ CXIdxObjCCategoryDeclInfo *
+ CatInfo = clang_index_getObjCCategoryDeclInfo(info);
+ printEntityInfo(" <ObjCCategoryInfo>: class", client_data,
+ CatInfo->objcClass);
+ printf("\n");
+ }
- return makeCXIndexEntity(info->indexedEntityInfo);
-}
+ if (!info->isRedeclaration)
+ return makeClientEntity(info->entityInfo, info->loc);
-static void index_indexObjCMethodRedeclaration(CXClientData client_data,
- CXIdxObjCMethodRedeclInfo *info) {
- printIndexedRedeclInfo("[indexObjCMethodRedeclaration]", client_data,
- info->indexedRedeclInfo);
- printf(" | isDefinition: %d\n", info->isDefinition);
+ return 0;
}
-static CXIdxContainer
-index_startedStatementBody(CXClientData client_data,
- CXIdxStmtBodyInfo *info) {
- printStartedContainerInfo("[startedStatementBody]", client_data,
- info->containerInfo);
- printf(" | body: ");
- printCXIndexLoc(info->bodyBegin);
- printf("\n");
-
- return makeCXIndexContainer(info->containerInfo->entity);
-}
+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);
-static CXIdxContainer
-index_startedObjCContainer(CXClientData client_data,
- CXIdxObjCContainerInfo *info) {
- printStartedContainerInfo("[startedObjCContainer]", client_data,
- info->containerInfo);
- printf("\n");
-
- return makeCXIndexContainer(info->containerInfo->entity);
+ return (CXIdxClientContainer)info->entity->clientEntity;
}
static void index_defineObjCClass(CXClientData client_data,
CXIdxObjCClassDefineInfo *info) {
- IndexData *index_data;
- index_data = (IndexData *)client_data;