summaryrefslogtreecommitdiffstats
path: root/include/clang-c
diff options
context:
space:
mode:
authorArgyrios Kyrtzidis <akyrtzi@gmail.com>2011-11-11 00:23:36 +0000
committerArgyrios Kyrtzidis <akyrtzi@gmail.com>2011-11-11 00:23:36 +0000
commitdd93c596cd95e1b96031ff47efe0a5095ff3d7f1 (patch)
tree423f7b1be7f9d00e680f5bf2eb6cc2e9bea4cc49 /include/clang-c
parentba49103550281ff9c92c850487e83c7a6eb43825 (diff)
[libclang] Simplify the indexing API.
Cut down the number of callbacks to more generic ones. Clients can check an enum to find out what kind of declaration it is and they can call functions to get more specific information than the generic provided info. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@144343 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include/clang-c')
-rw-r--r--include/clang-c/Index.h395
1 files changed, 100 insertions, 295 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,