clang API Documentation
00001 /*===-- clang-c/Index.h - Indexing Public C Interface -------------*- C -*-===*\ 00002 |* *| 00003 |* The LLVM Compiler Infrastructure *| 00004 |* *| 00005 |* This file is distributed under the University of Illinois Open Source *| 00006 |* License. See LICENSE.TXT for details. *| 00007 |* *| 00008 |*===----------------------------------------------------------------------===*| 00009 |* *| 00010 |* This header provides a public inferface to a Clang library for extracting *| 00011 |* high-level symbol information from source files without exposing the full *| 00012 |* Clang C++ API. *| 00013 |* *| 00014 \*===----------------------------------------------------------------------===*/ 00015 00016 #ifndef LLVM_CLANG_C_INDEX_H 00017 #define LLVM_CLANG_C_INDEX_H 00018 00019 #include <time.h> 00020 00021 #include "clang-c/Platform.h" 00022 #include "clang-c/CXErrorCode.h" 00023 #include "clang-c/CXString.h" 00024 #include "clang-c/BuildSystem.h" 00025 00026 /** 00027 * \brief The version constants for the libclang API. 00028 * CINDEX_VERSION_MINOR should increase when there are API additions. 00029 * CINDEX_VERSION_MAJOR is intended for "major" source/ABI breaking changes. 00030 * 00031 * The policy about the libclang API was always to keep it source and ABI 00032 * compatible, thus CINDEX_VERSION_MAJOR is expected to remain stable. 00033 */ 00034 #define CINDEX_VERSION_MAJOR 0 00035 #define CINDEX_VERSION_MINOR 29 00036 00037 #define CINDEX_VERSION_ENCODE(major, minor) ( \ 00038 ((major) * 10000) \ 00039 + ((minor) * 1)) 00040 00041 #define CINDEX_VERSION CINDEX_VERSION_ENCODE( \ 00042 CINDEX_VERSION_MAJOR, \ 00043 CINDEX_VERSION_MINOR ) 00044 00045 #define CINDEX_VERSION_STRINGIZE_(major, minor) \ 00046 #major"."#minor 00047 #define CINDEX_VERSION_STRINGIZE(major, minor) \ 00048 CINDEX_VERSION_STRINGIZE_(major, minor) 00049 00050 #define CINDEX_VERSION_STRING CINDEX_VERSION_STRINGIZE( \ 00051 CINDEX_VERSION_MAJOR, \ 00052 CINDEX_VERSION_MINOR) 00053 00054 #ifdef __cplusplus 00055 extern "C" { 00056 #endif 00057 00058 /** \defgroup CINDEX libclang: C Interface to Clang 00059 * 00060 * The C Interface to Clang provides a relatively small API that exposes 00061 * facilities for parsing source code into an abstract syntax tree (AST), 00062 * loading already-parsed ASTs, traversing the AST, associating 00063 * physical source locations with elements within the AST, and other 00064 * facilities that support Clang-based development tools. 00065 * 00066 * This C interface to Clang will never provide all of the information 00067 * representation stored in Clang's C++ AST, nor should it: the intent is to 00068 * maintain an API that is relatively stable from one release to the next, 00069 * providing only the basic functionality needed to support development tools. 00070 * 00071 * To avoid namespace pollution, data types are prefixed with "CX" and 00072 * functions are prefixed with "clang_". 00073 * 00074 * @{ 00075 */ 00076 00077 /** 00078 * \brief An "index" that consists of a set of translation units that would 00079 * typically be linked together into an executable or library. 00080 */ 00081 typedef void *CXIndex; 00082 00083 /** 00084 * \brief A single translation unit, which resides in an index. 00085 */ 00086 typedef struct CXTranslationUnitImpl *CXTranslationUnit; 00087 00088 /** 00089 * \brief Opaque pointer representing client data that will be passed through 00090 * to various callbacks and visitors. 00091 */ 00092 typedef void *CXClientData; 00093 00094 /** 00095 * \brief Provides the contents of a file that has not yet been saved to disk. 00096 * 00097 * Each CXUnsavedFile instance provides the name of a file on the 00098 * system along with the current contents of that file that have not 00099 * yet been saved to disk. 00100 */ 00101 struct CXUnsavedFile { 00102 /** 00103 * \brief The file whose contents have not yet been saved. 00104 * 00105 * This file must already exist in the file system. 00106 */ 00107 const char *Filename; 00108 00109 /** 00110 * \brief A buffer containing the unsaved contents of this file. 00111 */ 00112 const char *Contents; 00113 00114 /** 00115 * \brief The length of the unsaved contents of this buffer. 00116 */ 00117 unsigned long Length; 00118 }; 00119 00120 /** 00121 * \brief Describes the availability of a particular entity, which indicates 00122 * whether the use of this entity will result in a warning or error due to 00123 * it being deprecated or unavailable. 00124 */ 00125 enum CXAvailabilityKind { 00126 /** 00127 * \brief The entity is available. 00128 */ 00129 CXAvailability_Available, 00130 /** 00131 * \brief The entity is available, but has been deprecated (and its use is 00132 * not recommended). 00133 */ 00134 CXAvailability_Deprecated, 00135 /** 00136 * \brief The entity is not available; any use of it will be an error. 00137 */ 00138 CXAvailability_NotAvailable, 00139 /** 00140 * \brief The entity is available, but not accessible; any use of it will be 00141 * an error. 00142 */ 00143 CXAvailability_NotAccessible 00144 }; 00145 00146 /** 00147 * \brief Describes a version number of the form major.minor.subminor. 00148 */ 00149 typedef struct CXVersion { 00150 /** 00151 * \brief The major version number, e.g., the '10' in '10.7.3'. A negative 00152 * value indicates that there is no version number at all. 00153 */ 00154 int Major; 00155 /** 00156 * \brief The minor version number, e.g., the '7' in '10.7.3'. This value 00157 * will be negative if no minor version number was provided, e.g., for 00158 * version '10'. 00159 */ 00160 int Minor; 00161 /** 00162 * \brief The subminor version number, e.g., the '3' in '10.7.3'. This value 00163 * will be negative if no minor or subminor version number was provided, 00164 * e.g., in version '10' or '10.7'. 00165 */ 00166 int Subminor; 00167 } CXVersion; 00168 00169 /** 00170 * \brief Provides a shared context for creating translation units. 00171 * 00172 * It provides two options: 00173 * 00174 * - excludeDeclarationsFromPCH: When non-zero, allows enumeration of "local" 00175 * declarations (when loading any new translation units). A "local" declaration 00176 * is one that belongs in the translation unit itself and not in a precompiled 00177 * header that was used by the translation unit. If zero, all declarations 00178 * will be enumerated. 00179 * 00180 * Here is an example: 00181 * 00182 * \code 00183 * // excludeDeclsFromPCH = 1, displayDiagnostics=1 00184 * Idx = clang_createIndex(1, 1); 00185 * 00186 * // IndexTest.pch was produced with the following command: 00187 * // "clang -x c IndexTest.h -emit-ast -o IndexTest.pch" 00188 * TU = clang_createTranslationUnit(Idx, "IndexTest.pch"); 00189 * 00190 * // This will load all the symbols from 'IndexTest.pch' 00191 * clang_visitChildren(clang_getTranslationUnitCursor(TU), 00192 * TranslationUnitVisitor, 0); 00193 * clang_disposeTranslationUnit(TU); 00194 * 00195 * // This will load all the symbols from 'IndexTest.c', excluding symbols 00196 * // from 'IndexTest.pch'. 00197 * char *args[] = { "-Xclang", "-include-pch=IndexTest.pch" }; 00198 * TU = clang_createTranslationUnitFromSourceFile(Idx, "IndexTest.c", 2, args, 00199 * 0, 0); 00200 * clang_visitChildren(clang_getTranslationUnitCursor(TU), 00201 * TranslationUnitVisitor, 0); 00202 * clang_disposeTranslationUnit(TU); 00203 * \endcode 00204 * 00205 * This process of creating the 'pch', loading it separately, and using it (via 00206 * -include-pch) allows 'excludeDeclsFromPCH' to remove redundant callbacks 00207 * (which gives the indexer the same performance benefit as the compiler). 00208 */ 00209 CINDEX_LINKAGE CXIndex clang_createIndex(int excludeDeclarationsFromPCH, 00210 int displayDiagnostics); 00211 00212 /** 00213 * \brief Destroy the given index. 00214 * 00215 * The index must not be destroyed until all of the translation units created 00216 * within that index have been destroyed. 00217 */ 00218 CINDEX_LINKAGE void clang_disposeIndex(CXIndex index); 00219 00220 typedef enum { 00221 /** 00222 * \brief Used to indicate that no special CXIndex options are needed. 00223 */ 00224 CXGlobalOpt_None = 0x0, 00225 00226 /** 00227 * \brief Used to indicate that threads that libclang creates for indexing 00228 * purposes should use background priority. 00229 * 00230 * Affects #clang_indexSourceFile, #clang_indexTranslationUnit, 00231 * #clang_parseTranslationUnit, #clang_saveTranslationUnit. 00232 */ 00233 CXGlobalOpt_ThreadBackgroundPriorityForIndexing = 0x1, 00234 00235 /** 00236 * \brief Used to indicate that threads that libclang creates for editing 00237 * purposes should use background priority. 00238 * 00239 * Affects #clang_reparseTranslationUnit, #clang_codeCompleteAt, 00240 * #clang_annotateTokens 00241 */ 00242 CXGlobalOpt_ThreadBackgroundPriorityForEditing = 0x2, 00243 00244 /** 00245 * \brief Used to indicate that all threads that libclang creates should use 00246 * background priority. 00247 */ 00248 CXGlobalOpt_ThreadBackgroundPriorityForAll = 00249 CXGlobalOpt_ThreadBackgroundPriorityForIndexing | 00250 CXGlobalOpt_ThreadBackgroundPriorityForEditing 00251 00252 } CXGlobalOptFlags; 00253 00254 /** 00255 * \brief Sets general options associated with a CXIndex. 00256 * 00257 * For example: 00258 * \code 00259 * CXIndex idx = ...; 00260 * clang_CXIndex_setGlobalOptions(idx, 00261 * clang_CXIndex_getGlobalOptions(idx) | 00262 * CXGlobalOpt_ThreadBackgroundPriorityForIndexing); 00263 * \endcode 00264 * 00265 * \param options A bitmask of options, a bitwise OR of CXGlobalOpt_XXX flags. 00266 */ 00267 CINDEX_LINKAGE void clang_CXIndex_setGlobalOptions(CXIndex, unsigned options); 00268 00269 /** 00270 * \brief Gets the general options associated with a CXIndex. 00271 * 00272 * \returns A bitmask of options, a bitwise OR of CXGlobalOpt_XXX flags that 00273 * are associated with the given CXIndex object. 00274 */ 00275 CINDEX_LINKAGE unsigned clang_CXIndex_getGlobalOptions(CXIndex); 00276 00277 /** 00278 * \defgroup CINDEX_FILES File manipulation routines 00279 * 00280 * @{ 00281 */ 00282 00283 /** 00284 * \brief A particular source file that is part of a translation unit. 00285 */ 00286 typedef void *CXFile; 00287 00288 00289 /** 00290 * \brief Retrieve the complete file and path name of the given file. 00291 */ 00292 CINDEX_LINKAGE CXString clang_getFileName(CXFile SFile); 00293 00294 /** 00295 * \brief Retrieve the last modification time of the given file. 00296 */ 00297 CINDEX_LINKAGE time_t clang_getFileTime(CXFile SFile); 00298 00299 /** 00300 * \brief Uniquely identifies a CXFile, that refers to the same underlying file, 00301 * across an indexing session. 00302 */ 00303 typedef struct { 00304 unsigned long long data[3]; 00305 } CXFileUniqueID; 00306 00307 /** 00308 * \brief Retrieve the unique ID for the given \c file. 00309 * 00310 * \param file the file to get the ID for. 00311 * \param outID stores the returned CXFileUniqueID. 00312 * \returns If there was a failure getting the unique ID, returns non-zero, 00313 * otherwise returns 0. 00314 */ 00315 CINDEX_LINKAGE int clang_getFileUniqueID(CXFile file, CXFileUniqueID *outID); 00316 00317 /** 00318 * \brief Determine whether the given header is guarded against 00319 * multiple inclusions, either with the conventional 00320 * \#ifndef/\#define/\#endif macro guards or with \#pragma once. 00321 */ 00322 CINDEX_LINKAGE unsigned 00323 clang_isFileMultipleIncludeGuarded(CXTranslationUnit tu, CXFile file); 00324 00325 /** 00326 * \brief Retrieve a file handle within the given translation unit. 00327 * 00328 * \param tu the translation unit 00329 * 00330 * \param file_name the name of the file. 00331 * 00332 * \returns the file handle for the named file in the translation unit \p tu, 00333 * or a NULL file handle if the file was not a part of this translation unit. 00334 */ 00335 CINDEX_LINKAGE CXFile clang_getFile(CXTranslationUnit tu, 00336 const char *file_name); 00337 00338 /** 00339 * \brief Returns non-zero if the \c file1 and \c file2 point to the same file, 00340 * or they are both NULL. 00341 */ 00342 CINDEX_LINKAGE int clang_File_isEqual(CXFile file1, CXFile file2); 00343 00344 /** 00345 * @} 00346 */ 00347 00348 /** 00349 * \defgroup CINDEX_LOCATIONS Physical source locations 00350 * 00351 * Clang represents physical source locations in its abstract syntax tree in 00352 * great detail, with file, line, and column information for the majority of 00353 * the tokens parsed in the source code. These data types and functions are 00354 * used to represent source location information, either for a particular 00355 * point in the program or for a range of points in the program, and extract 00356 * specific location information from those data types. 00357 * 00358 * @{ 00359 */ 00360 00361 /** 00362 * \brief Identifies a specific source location within a translation 00363 * unit. 00364 * 00365 * Use clang_getExpansionLocation() or clang_getSpellingLocation() 00366 * to map a source location to a particular file, line, and column. 00367 */ 00368 typedef struct { 00369 const void *ptr_data[2]; 00370 unsigned int_data; 00371 } CXSourceLocation; 00372 00373 /** 00374 * \brief Identifies a half-open character range in the source code. 00375 * 00376 * Use clang_getRangeStart() and clang_getRangeEnd() to retrieve the 00377 * starting and end locations from a source range, respectively. 00378 */ 00379 typedef struct { 00380 const void *ptr_data[2]; 00381 unsigned begin_int_data; 00382 unsigned end_int_data; 00383 } CXSourceRange; 00384 00385 /** 00386 * \brief Retrieve a NULL (invalid) source location. 00387 */ 00388 CINDEX_LINKAGE CXSourceLocation clang_getNullLocation(void); 00389 00390 /** 00391 * \brief Determine whether two source locations, which must refer into 00392 * the same translation unit, refer to exactly the same point in the source 00393 * code. 00394 * 00395 * \returns non-zero if the source locations refer to the same location, zero 00396 * if they refer to different locations. 00397 */ 00398 CINDEX_LINKAGE unsigned clang_equalLocations(CXSourceLocation loc1, 00399 CXSourceLocation loc2); 00400 00401 /** 00402 * \brief Retrieves the source location associated with a given file/line/column 00403 * in a particular translation unit. 00404 */ 00405 CINDEX_LINKAGE CXSourceLocation clang_getLocation(CXTranslationUnit tu, 00406 CXFile file, 00407 unsigned line, 00408 unsigned column); 00409 /** 00410 * \brief Retrieves the source location associated with a given character offset 00411 * in a particular translation unit. 00412 */ 00413 CINDEX_LINKAGE CXSourceLocation clang_getLocationForOffset(CXTranslationUnit tu, 00414 CXFile file, 00415 unsigned offset); 00416 00417 /** 00418 * \brief Returns non-zero if the given source location is in a system header. 00419 */ 00420 CINDEX_LINKAGE int clang_Location_isInSystemHeader(CXSourceLocation location); 00421 00422 /** 00423 * \brief Returns non-zero if the given source location is in the main file of 00424 * the corresponding translation unit. 00425 */ 00426 CINDEX_LINKAGE int clang_Location_isFromMainFile(CXSourceLocation location); 00427 00428 /** 00429 * \brief Retrieve a NULL (invalid) source range. 00430 */ 00431 CINDEX_LINKAGE CXSourceRange clang_getNullRange(void); 00432 00433 /** 00434 * \brief Retrieve a source range given the beginning and ending source 00435 * locations. 00436 */ 00437 CINDEX_LINKAGE CXSourceRange clang_getRange(CXSourceLocation begin, 00438 CXSourceLocation end); 00439 00440 /** 00441 * \brief Determine whether two ranges are equivalent. 00442 * 00443 * \returns non-zero if the ranges are the same, zero if they differ. 00444 */ 00445 CINDEX_LINKAGE unsigned clang_equalRanges(CXSourceRange range1, 00446 CXSourceRange range2); 00447 00448 /** 00449 * \brief Returns non-zero if \p range is null. 00450 */ 00451 CINDEX_LINKAGE int clang_Range_isNull(CXSourceRange range); 00452 00453 /** 00454 * \brief Retrieve the file, line, column, and offset represented by 00455 * the given source location. 00456 * 00457 * If the location refers into a macro expansion, retrieves the 00458 * location of the macro expansion. 00459 * 00460 * \param location the location within a source file that will be decomposed 00461 * into its parts. 00462 * 00463 * \param file [out] if non-NULL, will be set to the file to which the given 00464 * source location points. 00465 * 00466 * \param line [out] if non-NULL, will be set to the line to which the given 00467 * source location points. 00468 * 00469 * \param column [out] if non-NULL, will be set to the column to which the given 00470 * source location points. 00471 * 00472 * \param offset [out] if non-NULL, will be set to the offset into the 00473 * buffer to which the given source location points. 00474 */ 00475 CINDEX_LINKAGE void clang_getExpansionLocation(CXSourceLocation location, 00476 CXFile *file, 00477 unsigned *line, 00478 unsigned *column, 00479 unsigned *offset); 00480 00481 /** 00482 * \brief Retrieve the file, line, column, and offset represented by 00483 * the given source location, as specified in a # line directive. 00484 * 00485 * Example: given the following source code in a file somefile.c 00486 * 00487 * \code 00488 * #123 "dummy.c" 1 00489 * 00490 * static int func(void) 00491 * { 00492 * return 0; 00493 * } 00494 * \endcode 00495 * 00496 * the location information returned by this function would be 00497 * 00498 * File: dummy.c Line: 124 Column: 12 00499 * 00500 * whereas clang_getExpansionLocation would have returned 00501 * 00502 * File: somefile.c Line: 3 Column: 12 00503 * 00504 * \param location the location within a source file that will be decomposed 00505 * into its parts. 00506 * 00507 * \param filename [out] if non-NULL, will be set to the filename of the 00508 * source location. Note that filenames returned will be for "virtual" files, 00509 * which don't necessarily exist on the machine running clang - e.g. when 00510 * parsing preprocessed output obtained from a different environment. If 00511 * a non-NULL value is passed in, remember to dispose of the returned value 00512 * using \c clang_disposeString() once you've finished with it. For an invalid 00513 * source location, an empty string is returned. 00514 * 00515 * \param line [out] if non-NULL, will be set to the line number of the 00516 * source location. For an invalid source location, zero is returned. 00517 * 00518 * \param column [out] if non-NULL, will be set to the column number of the 00519 * source location. For an invalid source location, zero is returned. 00520 */ 00521 CINDEX_LINKAGE void clang_getPresumedLocation(CXSourceLocation location, 00522 CXString *filename, 00523 unsigned *line, 00524 unsigned *column); 00525 00526 /** 00527 * \brief Legacy API to retrieve the file, line, column, and offset represented 00528 * by the given source location. 00529 * 00530 * This interface has been replaced by the newer interface 00531 * #clang_getExpansionLocation(). See that interface's documentation for 00532 * details. 00533 */ 00534 CINDEX_LINKAGE void clang_getInstantiationLocation(CXSourceLocation location, 00535 CXFile *file, 00536 unsigned *line, 00537 unsigned *column, 00538 unsigned *offset); 00539 00540 /** 00541 * \brief Retrieve the file, line, column, and offset represented by 00542 * the given source location. 00543 * 00544 * If the location refers into a macro instantiation, return where the 00545 * location was originally spelled in the source file. 00546 * 00547 * \param location the location within a source file that will be decomposed 00548 * into its parts. 00549 * 00550 * \param file [out] if non-NULL, will be set to the file to which the given 00551 * source location points. 00552 * 00553 * \param line [out] if non-NULL, will be set to the line to which the given 00554 * source location points. 00555 * 00556 * \param column [out] if non-NULL, will be set to the column to which the given 00557 * source location points. 00558 * 00559 * \param offset [out] if non-NULL, will be set to the offset into the 00560 * buffer to which the given source location points. 00561 */ 00562 CINDEX_LINKAGE void clang_getSpellingLocation(CXSourceLocation location, 00563 CXFile *file, 00564 unsigned *line, 00565 unsigned *column, 00566 unsigned *offset); 00567 00568 /** 00569 * \brief Retrieve the file, line, column, and offset represented by 00570 * the given source location. 00571 * 00572 * If the location refers into a macro expansion, return where the macro was 00573 * expanded or where the macro argument was written, if the location points at 00574 * a macro argument. 00575 * 00576 * \param location the location within a source file that will be decomposed 00577 * into its parts. 00578 * 00579 * \param file [out] if non-NULL, will be set to the file to which the given 00580 * source location points. 00581 * 00582 * \param line [out] if non-NULL, will be set to the line to which the given 00583 * source location points. 00584 * 00585 * \param column [out] if non-NULL, will be set to the column to which the given 00586 * source location points. 00587 * 00588 * \param offset [out] if non-NULL, will be set to the offset into the 00589 * buffer to which the given source location points. 00590 */ 00591 CINDEX_LINKAGE void clang_getFileLocation(CXSourceLocation location, 00592 CXFile *file, 00593 unsigned *line, 00594 unsigned *column, 00595 unsigned *offset); 00596 00597 /** 00598 * \brief Retrieve a source location representing the first character within a 00599 * source range. 00600 */ 00601 CINDEX_LINKAGE CXSourceLocation clang_getRangeStart(CXSourceRange range); 00602 00603 /** 00604 * \brief Retrieve a source location representing the last character within a 00605 * source range. 00606 */ 00607 CINDEX_LINKAGE CXSourceLocation clang_getRangeEnd(CXSourceRange range); 00608 00609 /** 00610 * \brief Identifies an array of ranges. 00611 */ 00612 typedef struct { 00613 /** \brief The number of ranges in the \c ranges array. */ 00614 unsigned count; 00615 /** 00616 * \brief An array of \c CXSourceRanges. 00617 */ 00618 CXSourceRange *ranges; 00619 } CXSourceRangeList; 00620 00621 /** 00622 * \brief Retrieve all ranges that were skipped by the preprocessor. 00623 * 00624 * The preprocessor will skip lines when they are surrounded by an 00625 * if/ifdef/ifndef directive whose condition does not evaluate to true. 00626 */ 00627 CINDEX_LINKAGE CXSourceRangeList *clang_getSkippedRanges(CXTranslationUnit tu, 00628 CXFile file); 00629 00630 /** 00631 * \brief Destroy the given \c CXSourceRangeList. 00632 */ 00633 CINDEX_LINKAGE void clang_disposeSourceRangeList(CXSourceRangeList *ranges); 00634 00635 /** 00636 * @} 00637 */ 00638 00639 /** 00640 * \defgroup CINDEX_DIAG Diagnostic reporting 00641 * 00642 * @{ 00643 */ 00644 00645 /** 00646 * \brief Describes the severity of a particular diagnostic. 00647 */ 00648 enum CXDiagnosticSeverity { 00649 /** 00650 * \brief A diagnostic that has been suppressed, e.g., by a command-line 00651 * option. 00652 */ 00653 CXDiagnostic_Ignored = 0, 00654 00655 /** 00656 * \brief This diagnostic is a note that should be attached to the 00657 * previous (non-note) diagnostic. 00658 */ 00659 CXDiagnostic_Note = 1, 00660 00661 /** 00662 * \brief This diagnostic indicates suspicious code that may not be 00663 * wrong. 00664 */ 00665 CXDiagnostic_Warning = 2, 00666 00667 /** 00668 * \brief This diagnostic indicates that the code is ill-formed. 00669 */ 00670 CXDiagnostic_Error = 3, 00671 00672 /** 00673 * \brief This diagnostic indicates that the code is ill-formed such 00674 * that future parser recovery is unlikely to produce useful 00675 * results. 00676 */ 00677 CXDiagnostic_Fatal = 4 00678 }; 00679 00680 /** 00681 * \brief A single diagnostic, containing the diagnostic's severity, 00682 * location, text, source ranges, and fix-it hints. 00683 */ 00684 typedef void *CXDiagnostic; 00685 00686 /** 00687 * \brief A group of CXDiagnostics. 00688 */ 00689 typedef void *CXDiagnosticSet; 00690 00691 /** 00692 * \brief Determine the number of diagnostics in a CXDiagnosticSet. 00693 */ 00694 CINDEX_LINKAGE unsigned clang_getNumDiagnosticsInSet(CXDiagnosticSet Diags); 00695 00696 /** 00697 * \brief Retrieve a diagnostic associated with the given CXDiagnosticSet. 00698 * 00699 * \param Diags the CXDiagnosticSet to query. 00700 * \param Index the zero-based diagnostic number to retrieve. 00701 * 00702 * \returns the requested diagnostic. This diagnostic must be freed 00703 * via a call to \c clang_disposeDiagnostic(). 00704 */ 00705 CINDEX_LINKAGE CXDiagnostic clang_getDiagnosticInSet(CXDiagnosticSet Diags, 00706 unsigned Index); 00707 00708 00709 /** 00710 * \brief Describes the kind of error that occurred (if any) in a call to 00711 * \c clang_loadDiagnostics. 00712 */ 00713 enum CXLoadDiag_Error { 00714 /** 00715 * \brief Indicates that no error occurred. 00716 */ 00717 CXLoadDiag_None = 0, 00718 00719 /** 00720 * \brief Indicates that an unknown error occurred while attempting to 00721 * deserialize diagnostics. 00722 */ 00723 CXLoadDiag_Unknown = 1, 00724 00725 /** 00726 * \brief Indicates that the file containing the serialized diagnostics 00727 * could not be opened. 00728 */ 00729 CXLoadDiag_CannotLoad = 2, 00730 00731 /** 00732 * \brief Indicates that the serialized diagnostics file is invalid or 00733 * corrupt. 00734 */ 00735 CXLoadDiag_InvalidFile = 3 00736 }; 00737 00738 /** 00739 * \brief Deserialize a set of diagnostics from a Clang diagnostics bitcode 00740 * file. 00741 * 00742 * \param file The name of the file to deserialize. 00743 * \param error A pointer to a enum value recording if there was a problem 00744 * deserializing the diagnostics. 00745 * \param errorString A pointer to a CXString for recording the error string 00746 * if the file was not successfully loaded. 00747 * 00748 * \returns A loaded CXDiagnosticSet if successful, and NULL otherwise. These 00749 * diagnostics should be released using clang_disposeDiagnosticSet(). 00750 */ 00751 CINDEX_LINKAGE CXDiagnosticSet clang_loadDiagnostics(const char *file, 00752 enum CXLoadDiag_Error *error, 00753 CXString *errorString); 00754 00755 /** 00756 * \brief Release a CXDiagnosticSet and all of its contained diagnostics. 00757 */ 00758 CINDEX_LINKAGE void clang_disposeDiagnosticSet(CXDiagnosticSet Diags); 00759 00760 /** 00761 * \brief Retrieve the child diagnostics of a CXDiagnostic. 00762 * 00763 * This CXDiagnosticSet does not need to be released by 00764 * clang_disposeDiagnosticSet. 00765 */ 00766 CINDEX_LINKAGE CXDiagnosticSet clang_getChildDiagnostics(CXDiagnostic D); 00767 00768 /** 00769 * \brief Determine the number of diagnostics produced for the given 00770 * translation unit. 00771 */ 00772 CINDEX_LINKAGE unsigned clang_getNumDiagnostics(CXTranslationUnit Unit); 00773 00774 /** 00775 * \brief Retrieve a diagnostic associated with the given translation unit. 00776 * 00777 * \param Unit the translation unit to query. 00778 * \param Index the zero-based diagnostic number to retrieve. 00779 * 00780 * \returns the requested diagnostic. This diagnostic must be freed 00781 * via a call to \c clang_disposeDiagnostic(). 00782 */ 00783 CINDEX_LINKAGE CXDiagnostic clang_getDiagnostic(CXTranslationUnit Unit, 00784 unsigned Index); 00785 00786 /** 00787 * \brief Retrieve the complete set of diagnostics associated with a 00788 * translation unit. 00789 * 00790 * \param Unit the translation unit to query. 00791 */ 00792 CINDEX_LINKAGE CXDiagnosticSet 00793 clang_getDiagnosticSetFromTU(CXTranslationUnit Unit); 00794 00795 /** 00796 * \brief Destroy a diagnostic. 00797 */ 00798 CINDEX_LINKAGE void clang_disposeDiagnostic(CXDiagnostic Diagnostic); 00799 00800 /** 00801 * \brief Options to control the display of diagnostics. 00802 * 00803 * The values in this enum are meant to be combined to customize the 00804 * behavior of \c clang_formatDiagnostic(). 00805 */ 00806 enum CXDiagnosticDisplayOptions { 00807 /** 00808 * \brief Display the source-location information where the 00809 * diagnostic was located. 00810 * 00811 * When set, diagnostics will be prefixed by the file, line, and 00812 * (optionally) column to which the diagnostic refers. For example, 00813 * 00814 * \code 00815 * test.c:28: warning: extra tokens at end of #endif directive 00816 * \endcode 00817 * 00818 * This option corresponds to the clang flag \c -fshow-source-location. 00819 */ 00820 CXDiagnostic_DisplaySourceLocation = 0x01, 00821 00822 /** 00823 * \brief If displaying the source-location information of the 00824 * diagnostic, also include the column number. 00825 * 00826 * This option corresponds to the clang flag \c -fshow-column. 00827 */ 00828 CXDiagnostic_DisplayColumn = 0x02, 00829 00830 /** 00831 * \brief If displaying the source-location information of the 00832 * diagnostic, also include information about source ranges in a 00833 * machine-parsable format. 00834 * 00835 * This option corresponds to the clang flag 00836 * \c -fdiagnostics-print-source-range-info. 00837 */ 00838 CXDiagnostic_DisplaySourceRanges = 0x04, 00839 00840 /** 00841 * \brief Display the option name associated with this diagnostic, if any. 00842 * 00843 * The option name displayed (e.g., -Wconversion) will be placed in brackets 00844 * after the diagnostic text. This option corresponds to the clang flag 00845 * \c -fdiagnostics-show-option. 00846 */ 00847 CXDiagnostic_DisplayOption = 0x08, 00848 00849 /** 00850 * \brief Display the category number associated with this diagnostic, if any. 00851 * 00852 * The category number is displayed within brackets after the diagnostic text. 00853 * This option corresponds to the clang flag 00854 * \c -fdiagnostics-show-category=id. 00855 */ 00856 CXDiagnostic_DisplayCategoryId = 0x10, 00857 00858 /** 00859 * \brief Display the category name associated with this diagnostic, if any. 00860 * 00861 * The category name is displayed within brackets after the diagnostic text. 00862 * This option corresponds to the clang flag 00863 * \c -fdiagnostics-show-category=name. 00864 */ 00865 CXDiagnostic_DisplayCategoryName = 0x20 00866 }; 00867 00868 /** 00869 * \brief Format the given diagnostic in a manner that is suitable for display. 00870 * 00871 * This routine will format the given diagnostic to a string, rendering 00872 * the diagnostic according to the various options given. The 00873 * \c clang_defaultDiagnosticDisplayOptions() function returns the set of 00874 * options that most closely mimics the behavior of the clang compiler. 00875 * 00876 * \param Diagnostic The diagnostic to print. 00877 * 00878 * \param Options A set of options that control the diagnostic display, 00879 * created by combining \c CXDiagnosticDisplayOptions values. 00880 * 00881 * \returns A new string containing for formatted diagnostic. 00882 */ 00883 CINDEX_LINKAGE CXString clang_formatDiagnostic(CXDiagnostic Diagnostic, 00884 unsigned Options); 00885 00886 /** 00887 * \brief Retrieve the set of display options most similar to the 00888 * default behavior of the clang compiler. 00889 * 00890 * \returns A set of display options suitable for use with \c 00891 * clang_formatDiagnostic(). 00892 */ 00893 CINDEX_LINKAGE unsigned clang_defaultDiagnosticDisplayOptions(void); 00894 00895 /** 00896 * \brief Determine the severity of the given diagnostic. 00897 */ 00898 CINDEX_LINKAGE enum CXDiagnosticSeverity 00899 clang_getDiagnosticSeverity(CXDiagnostic); 00900 00901 /** 00902 * \brief Retrieve the source location of the given diagnostic. 00903 * 00904 * This location is where Clang would print the caret ('^') when 00905 * displaying the diagnostic on the command line. 00906 */ 00907 CINDEX_LINKAGE CXSourceLocation clang_getDiagnosticLocation(CXDiagnostic); 00908 00909 /** 00910 * \brief Retrieve the text of the given diagnostic. 00911 */ 00912 CINDEX_LINKAGE CXString clang_getDiagnosticSpelling(CXDiagnostic); 00913 00914 /** 00915 * \brief Retrieve the name of the command-line option that enabled this 00916 * diagnostic. 00917 * 00918 * \param Diag The diagnostic to be queried. 00919 * 00920 * \param Disable If non-NULL, will be set to the option that disables this 00921 * diagnostic (if any). 00922 * 00923 * \returns A string that contains the command-line option used to enable this 00924 * warning, such as "-Wconversion" or "-pedantic". 00925 */ 00926 CINDEX_LINKAGE CXString clang_getDiagnosticOption(CXDiagnostic Diag, 00927 CXString *Disable); 00928 00929 /** 00930 * \brief Retrieve the category number for this diagnostic. 00931 * 00932 * Diagnostics can be categorized into groups along with other, related 00933 * diagnostics (e.g., diagnostics under the same warning flag). This routine 00934 * retrieves the category number for the given diagnostic. 00935 * 00936 * \returns The number of the category that contains this diagnostic, or zero 00937 * if this diagnostic is uncategorized. 00938 */ 00939 CINDEX_LINKAGE unsigned clang_getDiagnosticCategory(CXDiagnostic); 00940 00941 /** 00942 * \brief Retrieve the name of a particular diagnostic category. This 00943 * is now deprecated. Use clang_getDiagnosticCategoryText() 00944 * instead. 00945 * 00946 * \param Category A diagnostic category number, as returned by 00947 * \c clang_getDiagnosticCategory(). 00948 * 00949 * \returns The name of the given diagnostic category. 00950 */ 00951 CINDEX_DEPRECATED CINDEX_LINKAGE 00952 CXString clang_getDiagnosticCategoryName(unsigned Category); 00953 00954 /** 00955 * \brief Retrieve the diagnostic category text for a given diagnostic. 00956 * 00957 * \returns The text of the given diagnostic category. 00958 */ 00959 CINDEX_LINKAGE CXString clang_getDiagnosticCategoryText(CXDiagnostic); 00960 00961 /** 00962 * \brief Determine the number of source ranges associated with the given 00963 * diagnostic. 00964 */ 00965 CINDEX_LINKAGE unsigned clang_getDiagnosticNumRanges(CXDiagnostic); 00966 00967 /** 00968 * \brief Retrieve a source range associated with the diagnostic. 00969 * 00970 * A diagnostic's source ranges highlight important elements in the source 00971 * code. On the command line, Clang displays source ranges by 00972 * underlining them with '~' characters. 00973 * 00974 * \param Diagnostic the diagnostic whose range is being extracted. 00975 * 00976 * \param Range the zero-based index specifying which range to 00977 * 00978 * \returns the requested source range. 00979 */ 00980 CINDEX_LINKAGE CXSourceRange clang_getDiagnosticRange(CXDiagnostic Diagnostic, 00981 unsigned Range); 00982 00983 /** 00984 * \brief Determine the number of fix-it hints associated with the 00985 * given diagnostic. 00986 */ 00987 CINDEX_LINKAGE unsigned clang_getDiagnosticNumFixIts(CXDiagnostic Diagnostic); 00988 00989 /** 00990 * \brief Retrieve the replacement information for a given fix-it. 00991 * 00992 * Fix-its are described in terms of a source range whose contents 00993 * should be replaced by a string. This approach generalizes over 00994 * three kinds of operations: removal of source code (the range covers 00995 * the code to be removed and the replacement string is empty), 00996 * replacement of source code (the range covers the code to be 00997 * replaced and the replacement string provides the new code), and 00998 * insertion (both the start and end of the range point at the 00999 * insertion location, and the replacement string provides the text to 01000 * insert). 01001 * 01002 * \param Diagnostic The diagnostic whose fix-its are being queried. 01003 * 01004 * \param FixIt The zero-based index of the fix-it. 01005 * 01006 * \param ReplacementRange The source range whose contents will be 01007 * replaced with the returned replacement string. Note that source 01008 * ranges are half-open ranges [a, b), so the source code should be 01009 * replaced from a and up to (but not including) b. 01010 * 01011 * \returns A string containing text that should be replace the source 01012 * code indicated by the \c ReplacementRange. 01013 */ 01014 CINDEX_LINKAGE CXString clang_getDiagnosticFixIt(CXDiagnostic Diagnostic, 01015 unsigned FixIt, 01016 CXSourceRange *ReplacementRange); 01017 01018 /** 01019 * @} 01020 */ 01021 01022 /** 01023 * \defgroup CINDEX_TRANSLATION_UNIT Translation unit manipulation 01024 * 01025 * The routines in this group provide the ability to create and destroy 01026 * translation units from files, either by parsing the contents of the files or 01027 * by reading in a serialized representation of a translation unit. 01028 * 01029 * @{ 01030 */ 01031 01032 /** 01033 * \brief Get the original translation unit source file name. 01034 */ 01035 CINDEX_LINKAGE CXString 01036 clang_getTranslationUnitSpelling(CXTranslationUnit CTUnit); 01037 01038 /** 01039 * \brief Return the CXTranslationUnit for a given source file and the provided 01040 * command line arguments one would pass to the compiler. 01041 * 01042 * Note: The 'source_filename' argument is optional. If the caller provides a 01043 * NULL pointer, the name of the source file is expected to reside in the 01044 * specified command line arguments. 01045 * 01046 * Note: When encountered in 'clang_command_line_args', the following options 01047 * are ignored: 01048 * 01049 * '-c' 01050 * '-emit-ast' 01051 * '-fsyntax-only' 01052 * '-o <output file>' (both '-o' and '<output file>' are ignored) 01053 * 01054 * \param CIdx The index object with which the translation unit will be 01055 * associated. 01056 * 01057 * \param source_filename The name of the source file to load, or NULL if the 01058 * source file is included in \p clang_command_line_args. 01059 * 01060 * \param num_clang_command_line_args The number of command-line arguments in 01061 * \p clang_command_line_args. 01062 * 01063 * \param clang_command_line_args The command-line arguments that would be 01064 * passed to the \c clang executable if it were being invoked out-of-process. 01065 * These command-line options will be parsed and will affect how the translation 01066 * unit is parsed. Note that the following options are ignored: '-c', 01067 * '-emit-ast', '-fsyntax-only' (which is the default), and '-o <output file>'. 01068 * 01069 * \param num_unsaved_files the number of unsaved file entries in \p 01070 * unsaved_files. 01071 * 01072 * \param unsaved_files the files that have not yet been saved to disk 01073 * but may be required for code completion, including the contents of 01074 * those files. The contents and name of these files (as specified by 01075 * CXUnsavedFile) are copied when necessary, so the client only needs to 01076 * guarantee their validity until the call to this function returns. 01077 */ 01078 CINDEX_LINKAGE CXTranslationUnit clang_createTranslationUnitFromSourceFile( 01079 CXIndex CIdx, 01080 const char *source_filename, 01081 int num_clang_command_line_args, 01082 const char * const *clang_command_line_args, 01083 unsigned num_unsaved_files, 01084 struct CXUnsavedFile *unsaved_files); 01085 01086 /** 01087 * \brief Same as \c clang_createTranslationUnit2, but returns 01088 * the \c CXTranslationUnit instead of an error code. In case of an error this 01089 * routine returns a \c NULL \c CXTranslationUnit, without further detailed 01090 * error codes. 01091 */ 01092 CINDEX_LINKAGE CXTranslationUnit clang_createTranslationUnit( 01093 CXIndex CIdx, 01094 const char *ast_filename); 01095 01096 /** 01097 * \brief Create a translation unit from an AST file (\c -emit-ast). 01098 * 01099 * \param[out] out_TU A non-NULL pointer to store the created 01100 * \c CXTranslationUnit. 01101 * 01102 * \returns Zero on success, otherwise returns an error code. 01103 */ 01104 CINDEX_LINKAGE enum CXErrorCode clang_createTranslationUnit2( 01105 CXIndex CIdx, 01106 const char *ast_filename, 01107 CXTranslationUnit *out_TU); 01108 01109 /** 01110 * \brief Flags that control the creation of translation units. 01111 * 01112 * The enumerators in this enumeration type are meant to be bitwise 01113 * ORed together to specify which options should be used when 01114 * constructing the translation unit. 01115 */ 01116 enum CXTranslationUnit_Flags { 01117 /** 01118 * \brief Used to indicate that no special translation-unit options are 01119 * needed. 01120 */ 01121 CXTranslationUnit_None = 0x0, 01122 01123 /** 01124 * \brief Used to indicate that the parser should construct a "detailed" 01125 * preprocessing record, including all macro definitions and instantiations. 01126 * 01127 * Constructing a detailed preprocessing record requires more memory 01128 * and time to parse, since the information contained in the record 01129 * is usually not retained. However, it can be useful for 01130 * applications that require more detailed information about the 01131 * behavior of the preprocessor. 01132 */ 01133 CXTranslationUnit_DetailedPreprocessingRecord = 0x01, 01134 01135 /** 01136 * \brief Used to indicate that the translation unit is incomplete. 01137 * 01138 * When a translation unit is considered "incomplete", semantic 01139 * analysis that is typically performed at the end of the 01140 * translation unit will be suppressed. For example, this suppresses 01141 * the completion of tentative declarations in C and of 01142 * instantiation of implicitly-instantiation function templates in 01143 * C++. This option is typically used when parsing a header with the 01144 * intent of producing a precompiled header. 01145 */ 01146 CXTranslationUnit_Incomplete = 0x02, 01147 01148 /** 01149 * \brief Used to indicate that the translation unit should be built with an 01150 * implicit precompiled header for the preamble. 01151 * 01152 * An implicit precompiled header is used as an optimization when a 01153 * particular translation unit is likely to be reparsed many times 01154 * when the sources aren't changing that often. In this case, an 01155 * implicit precompiled header will be built containing all of the 01156 * initial includes at the top of the main file (what we refer to as 01157 * the "preamble" of the file). In subsequent parses, if the 01158 * preamble or the files in it have not changed, \c 01159 * clang_reparseTranslationUnit() will re-use the implicit 01160 * precompiled header to improve parsing performance. 01161 */ 01162 CXTranslationUnit_PrecompiledPreamble = 0x04, 01163 01164 /** 01165 * \brief Used to indicate that the translation unit should cache some 01166 * code-completion results with each reparse of the source file. 01167 * 01168 * Caching of code-completion results is a performance optimization that 01169 * introduces some overhead to reparsing but improves the performance of 01170 * code-completion operations. 01171 */ 01172 CXTranslationUnit_CacheCompletionResults = 0x08, 01173 01174 /** 01175 * \brief Used to indicate that the translation unit will be serialized with 01176 * \c clang_saveTranslationUnit. 01177 * 01178 * This option is typically used when parsing a header with the intent of 01179 * producing a precompiled header. 01180 */ 01181 CXTranslationUnit_ForSerialization = 0x10, 01182 01183 /** 01184 * \brief DEPRECATED: Enabled chained precompiled preambles in C++. 01185 * 01186 * Note: this is a *temporary* option that is available only while 01187 * we are testing C++ precompiled preamble support. It is deprecated. 01188 */ 01189 CXTranslationUnit_CXXChainedPCH = 0x20, 01190 01191 /** 01192 * \brief Used to indicate that function/method bodies should be skipped while 01193 * parsing. 01194 * 01195 * This option can be used to search for declarations/definitions while 01196 * ignoring the usages. 01197 */ 01198 CXTranslationUnit_SkipFunctionBodies = 0x40, 01199 01200 /** 01201 * \brief Used to indicate that brief documentation comments should be 01202 * included into the set of code completions returned from this translation 01203 * unit. 01204 */ 01205 CXTranslationUnit_IncludeBriefCommentsInCodeCompletion = 0x80 01206 }; 01207 01208 /** 01209 * \brief Returns the set of flags that is suitable for parsing a translation 01210 * unit that is being edited. 01211 * 01212 * The set of flags returned provide options for \c clang_parseTranslationUnit() 01213 * to indicate that the translation unit is likely to be reparsed many times, 01214 * either explicitly (via \c clang_reparseTranslationUnit()) or implicitly 01215 * (e.g., by code completion (\c clang_codeCompletionAt())). The returned flag 01216 * set contains an unspecified set of optimizations (e.g., the precompiled 01217 * preamble) geared toward improving the performance of these routines. The 01218 * set of optimizations enabled may change from one version to the next. 01219 */ 01220 CINDEX_LINKAGE unsigned clang_defaultEditingTranslationUnitOptions(void); 01221 01222 /** 01223 * \brief Same as \c clang_parseTranslationUnit2, but returns 01224 * the \c CXTranslationUnit instead of an error code. In case of an error this 01225 * routine returns a \c NULL \c CXTranslationUnit, without further detailed 01226 * error codes. 01227 */ 01228 CINDEX_LINKAGE CXTranslationUnit 01229 clang_parseTranslationUnit(CXIndex CIdx, 01230 const char *source_filename, 01231 const char *const *command_line_args, 01232 int num_command_line_args, 01233 struct CXUnsavedFile *unsaved_files, 01234 unsigned num_unsaved_files, 01235 unsigned options); 01236 01237 /** 01238 * \brief Parse the given source file and the translation unit corresponding 01239 * to that file. 01240 * 01241 * This routine is the main entry point for the Clang C API, providing the 01242 * ability to parse a source file into a translation unit that can then be 01243 * queried by other functions in the API. This routine accepts a set of 01244 * command-line arguments so that the compilation can be configured in the same 01245 * way that the compiler is configured on the command line. 01246 * 01247 * \param CIdx The index object with which the translation unit will be 01248 * associated. 01249 * 01250 * \param source_filename The name of the source file to load, or NULL if the 01251 * source file is included in \c command_line_args. 01252 * 01253 * \param command_line_args The command-line arguments that would be 01254 * passed to the \c clang executable if it were being invoked out-of-process. 01255 * These command-line options will be parsed and will affect how the translation 01256 * unit is parsed. Note that the following options are ignored: '-c', 01257 * '-emit-ast', '-fsyntax-only' (which is the default), and '-o <output file>'. 01258 * 01259 * \param num_command_line_args The number of command-line arguments in 01260 * \c command_line_args. 01261 * 01262 * \param unsaved_files the files that have not yet been saved to disk 01263 * but may be required for parsing, including the contents of 01264 * those files. The contents and name of these files (as specified by 01265 * CXUnsavedFile) are copied when necessary, so the client only needs to 01266 * guarantee their validity until the call to this function returns. 01267 * 01268 * \param num_unsaved_files the number of unsaved file entries in \p 01269 * unsaved_files. 01270 * 01271 * \param options A bitmask of options that affects how the translation unit 01272 * is managed but not its compilation. This should be a bitwise OR of the 01273 * CXTranslationUnit_XXX flags. 01274 * 01275 * \param[out] out_TU A non-NULL pointer to store the created 01276 * \c CXTranslationUnit, describing the parsed code and containing any 01277 * diagnostics produced by the compiler. 01278 * 01279 * \returns Zero on success, otherwise returns an error code. 01280 */ 01281 CINDEX_LINKAGE enum CXErrorCode 01282 clang_parseTranslationUnit2(CXIndex CIdx, 01283 const char *source_filename, 01284 const char *const *command_line_args, 01285 int num_command_line_args, 01286 struct CXUnsavedFile *unsaved_files, 01287 unsigned num_unsaved_files, 01288 unsigned options, 01289 CXTranslationUnit *out_TU); 01290 01291 /** 01292 * \brief Flags that control how translation units are saved. 01293 * 01294 * The enumerators in this enumeration type are meant to be bitwise 01295 * ORed together to specify which options should be used when 01296 * saving the translation unit. 01297 */ 01298 enum CXSaveTranslationUnit_Flags { 01299 /** 01300 * \brief Used to indicate that no special saving options are needed. 01301 */ 01302 CXSaveTranslationUnit_None = 0x0 01303 }; 01304 01305 /** 01306 * \brief Returns the set of flags that is suitable for saving a translation 01307 * unit. 01308 * 01309 * The set of flags returned provide options for 01310 * \c clang_saveTranslationUnit() by default. The returned flag 01311 * set contains an unspecified set of options that save translation units with 01312 * the most commonly-requested data. 01313 */ 01314 CINDEX_LINKAGE unsigned clang_defaultSaveOptions(CXTranslationUnit TU); 01315 01316 /** 01317 * \brief Describes the kind of error that occurred (if any) in a call to 01318 * \c clang_saveTranslationUnit(). 01319 */ 01320 enum CXSaveError { 01321 /** 01322 * \brief Indicates that no error occurred while saving a translation unit. 01323 */ 01324 CXSaveError_None = 0, 01325 01326 /** 01327 * \brief Indicates that an unknown error occurred while attempting to save 01328 * the file. 01329 * 01330 * This error typically indicates that file I/O failed when attempting to 01331 * write the file. 01332 */ 01333 CXSaveError_Unknown = 1, 01334 01335 /** 01336 * \brief Indicates that errors during translation prevented this attempt 01337 * to save the translation unit. 01338 * 01339 * Errors that prevent the translation unit from being saved can be 01340 * extracted using \c clang_getNumDiagnostics() and \c clang_getDiagnostic(). 01341 */ 01342 CXSaveError_TranslationErrors = 2, 01343 01344 /** 01345 * \brief Indicates that the translation unit to be saved was somehow 01346 * invalid (e.g., NULL). 01347 */ 01348 CXSaveError_InvalidTU = 3 01349 }; 01350 01351 /** 01352 * \brief Saves a translation unit into a serialized representation of 01353 * that translation unit on disk. 01354 * 01355 * Any translation unit that was parsed without error can be saved 01356 * into a file. The translation unit can then be deserialized into a 01357 * new \c CXTranslationUnit with \c clang_createTranslationUnit() or, 01358 * if it is an incomplete translation unit that corresponds to a 01359 * header, used as a precompiled header when parsing other translation 01360 * units. 01361 * 01362 * \param TU The translation unit to save. 01363 * 01364 * \param FileName The file to which the translation unit will be saved. 01365 * 01366 * \param options A bitmask of options that affects how the translation unit 01367 * is saved. This should be a bitwise OR of the 01368 * CXSaveTranslationUnit_XXX flags. 01369 * 01370 * \returns A value that will match one of the enumerators of the CXSaveError 01371 * enumeration. Zero (CXSaveError_None) indicates that the translation unit was 01372 * saved successfully, while a non-zero value indicates that a problem occurred. 01373 */ 01374 CINDEX_LINKAGE int clang_saveTranslationUnit(CXTranslationUnit TU, 01375 const char *FileName, 01376 unsigned options); 01377 01378 /** 01379 * \brief Destroy the specified CXTranslationUnit object. 01380 */ 01381 CINDEX_LINKAGE void clang_disposeTranslationUnit(CXTranslationUnit); 01382 01383 /** 01384 * \brief Flags that control the reparsing of translation units. 01385 * 01386 * The enumerators in this enumeration type are meant to be bitwise 01387 * ORed together to specify which options should be used when 01388 * reparsing the translation unit. 01389 */ 01390 enum CXReparse_Flags { 01391 /** 01392 * \brief Used to indicate that no special reparsing options are needed. 01393 */ 01394 CXReparse_None = 0x0 01395 }; 01396 01397 /** 01398 * \brief Returns the set of flags that is suitable for reparsing a translation 01399 * unit. 01400 * 01401 * The set of flags returned provide options for 01402 * \c clang_reparseTranslationUnit() by default. The returned flag 01403 * set contains an unspecified set of optimizations geared toward common uses 01404 * of reparsing. The set of optimizations enabled may change from one version 01405 * to the next. 01406 */ 01407 CINDEX_LINKAGE unsigned clang_defaultReparseOptions(CXTranslationUnit TU); 01408 01409 /** 01410 * \brief Reparse the source files that produced this translation unit. 01411 * 01412 * This routine can be used to re-parse the source files that originally 01413 * created the given translation unit, for example because those source files 01414 * have changed (either on disk or as passed via \p unsaved_files). The 01415 * source code will be reparsed with the same command-line options as it 01416 * was originally parsed. 01417 * 01418 * Reparsing a translation unit invalidates all cursors and source locations 01419 * that refer into that translation unit. This makes reparsing a translation 01420 * unit semantically equivalent to destroying the translation unit and then 01421 * creating a new translation unit with the same command-line arguments. 01422 * However, it may be more efficient to reparse a translation 01423 * unit using this routine. 01424 * 01425 * \param TU The translation unit whose contents will be re-parsed. The 01426 * translation unit must originally have been built with 01427 * \c clang_createTranslationUnitFromSourceFile(). 01428 * 01429 * \param num_unsaved_files The number of unsaved file entries in \p 01430 * unsaved_files. 01431 * 01432 * \param unsaved_files The files that have not yet been saved to disk 01433 * but may be required for parsing, including the contents of 01434 * those files. The contents and name of these files (as specified by 01435 * CXUnsavedFile) are copied when necessary, so the client only needs to 01436 * guarantee their validity until the call to this function returns. 01437 * 01438 * \param options A bitset of options composed of the flags in CXReparse_Flags. 01439 * The function \c clang_defaultReparseOptions() produces a default set of 01440 * options recommended for most uses, based on the translation unit. 01441 * 01442 * \returns 0 if the sources could be reparsed. A non-zero error code will be 01443 * returned if reparsing was impossible, such that the translation unit is 01444 * invalid. In such cases, the only valid call for \c TU is 01445 * \c clang_disposeTranslationUnit(TU). The error codes returned by this 01446 * routine are described by the \c CXErrorCode enum. 01447 */ 01448 CINDEX_LINKAGE int clang_reparseTranslationUnit(CXTranslationUnit TU, 01449 unsigned num_unsaved_files, 01450 struct CXUnsavedFile *unsaved_files, 01451 unsigned options); 01452 01453 /** 01454 * \brief Categorizes how memory is being used by a translation unit. 01455 */ 01456 enum CXTUResourceUsageKind { 01457 CXTUResourceUsage_AST = 1, 01458 CXTUResourceUsage_Identifiers = 2, 01459 CXTUResourceUsage_Selectors = 3, 01460 CXTUResourceUsage_GlobalCompletionResults = 4, 01461 CXTUResourceUsage_SourceManagerContentCache = 5, 01462 CXTUResourceUsage_AST_SideTables = 6, 01463 CXTUResourceUsage_SourceManager_Membuffer_Malloc = 7, 01464 CXTUResourceUsage_SourceManager_Membuffer_MMap = 8, 01465 CXTUResourceUsage_ExternalASTSource_Membuffer_Malloc = 9, 01466 CXTUResourceUsage_ExternalASTSource_Membuffer_MMap = 10, 01467 CXTUResourceUsage_Preprocessor = 11, 01468 CXTUResourceUsage_PreprocessingRecord = 12, 01469 CXTUResourceUsage_SourceManager_DataStructures = 13, 01470 CXTUResourceUsage_Preprocessor_HeaderSearch = 14, 01471 CXTUResourceUsage_MEMORY_IN_BYTES_BEGIN = CXTUResourceUsage_AST, 01472 CXTUResourceUsage_MEMORY_IN_BYTES_END = 01473 CXTUResourceUsage_Preprocessor_HeaderSearch, 01474 01475 CXTUResourceUsage_First = CXTUResourceUsage_AST, 01476 CXTUResourceUsage_Last = CXTUResourceUsage_Preprocessor_HeaderSearch 01477 }; 01478 01479 /** 01480 * \brief Returns the human-readable null-terminated C string that represents 01481 * the name of the memory category. This string should never be freed. 01482 */ 01483 CINDEX_LINKAGE 01484 const char *clang_getTUResourceUsageName(enum CXTUResourceUsageKind kind); 01485 01486 typedef struct CXTUResourceUsageEntry { 01487 /* \brief The memory usage category. */ 01488 enum CXTUResourceUsageKind kind; 01489 /* \brief Amount of resources used. 01490 The units will depend on the resource kind. */ 01491 unsigned long amount; 01492 } CXTUResourceUsageEntry; 01493 01494 /** 01495 * \brief The memory usage of a CXTranslationUnit, broken into categories. 01496 */ 01497 typedef struct CXTUResourceUsage { 01498 /* \brief Private data member, used for queries. */ 01499 void *data; 01500 01501 /* \brief The number of entries in the 'entries' array. */ 01502 unsigned numEntries; 01503 01504 /* \brief An array of key-value pairs, representing the breakdown of memory 01505 usage. */ 01506 CXTUResourceUsageEntry *entries; 01507 01508 } CXTUResourceUsage; 01509 01510 /** 01511 * \brief Return the memory usage of a translation unit. This object 01512 * should be released with clang_disposeCXTUResourceUsage(). 01513 */ 01514 CINDEX_LINKAGE CXTUResourceUsage clang_getCXTUResourceUsage(CXTranslationUnit TU); 01515 01516 CINDEX_LINKAGE void clang_disposeCXTUResourceUsage(CXTUResourceUsage usage); 01517 01518 /** 01519 * @} 01520 */ 01521 01522 /** 01523 * \brief Describes the kind of entity that a cursor refers to. 01524 */ 01525 enum CXCursorKind { 01526 /* Declarations */ 01527 /** 01528 * \brief A declaration whose specific kind is not exposed via this 01529 * interface. 01530 * 01531 * Unexposed declarations have the same operations as any other kind 01532 * of declaration; one can extract their location information, 01533 * spelling, find their definitions, etc. However, the specific kind 01534 * of the declaration is not reported. 01535 */ 01536 CXCursor_UnexposedDecl = 1, 01537 /** \brief A C or C++ struct. */ 01538 CXCursor_StructDecl = 2, 01539 /** \brief A C or C++ union. */ 01540 CXCursor_UnionDecl = 3, 01541 /** \brief A C++ class. */ 01542 CXCursor_ClassDecl = 4, 01543 /** \brief An enumeration. */ 01544 CXCursor_EnumDecl = 5, 01545 /** 01546 * \brief A field (in C) or non-static data member (in C++) in a 01547 * struct, union, or C++ class. 01548 */ 01549 CXCursor_FieldDecl = 6, 01550 /** \brief An enumerator constant. */ 01551 CXCursor_EnumConstantDecl = 7, 01552 /** \brief A function. */ 01553 CXCursor_FunctionDecl = 8, 01554 /** \brief A variable. */ 01555 CXCursor_VarDecl = 9, 01556 /** \brief A function or method parameter. */ 01557 CXCursor_ParmDecl = 10, 01558 /** \brief An Objective-C \@interface. */ 01559 CXCursor_ObjCInterfaceDecl = 11, 01560 /** \brief An Objective-C \@interface for a category. */ 01561 CXCursor_ObjCCategoryDecl = 12, 01562 /** \brief An Objective-C \@protocol declaration. */ 01563 CXCursor_ObjCProtocolDecl = 13, 01564 /** \brief An Objective-C \@property declaration. */ 01565 CXCursor_ObjCPropertyDecl = 14, 01566 /** \brief An Objective-C instance variable. */ 01567 CXCursor_ObjCIvarDecl = 15, 01568 /** \brief An Objective-C instance method. */ 01569 CXCursor_ObjCInstanceMethodDecl = 16, 01570 /** \brief An Objective-C class method. */ 01571 CXCursor_ObjCClassMethodDecl = 17, 01572 /** \brief An Objective-C \@implementation. */ 01573 CXCursor_ObjCImplementationDecl = 18, 01574 /** \brief An Objective-C \@implementation for a category. */ 01575 CXCursor_ObjCCategoryImplDecl = 19, 01576 /** \brief A typedef */ 01577 CXCursor_TypedefDecl = 20, 01578 /** \brief A C++ class method. */ 01579 CXCursor_CXXMethod = 21, 01580 /** \brief A C++ namespace. */ 01581 CXCursor_Namespace = 22, 01582 /** \brief A linkage specification, e.g. 'extern "C"'. */ 01583 CXCursor_LinkageSpec = 23, 01584 /** \brief A C++ constructor. */ 01585 CXCursor_Constructor = 24, 01586 /** \brief A C++ destructor. */ 01587 CXCursor_Destructor = 25, 01588 /** \brief A C++ conversion function. */ 01589 CXCursor_ConversionFunction = 26, 01590 /** \brief A C++ template type parameter. */ 01591 CXCursor_TemplateTypeParameter = 27, 01592 /** \brief A C++ non-type template parameter. */ 01593 CXCursor_NonTypeTemplateParameter = 28, 01594 /** \brief A C++ template template parameter. */ 01595 CXCursor_TemplateTemplateParameter = 29, 01596 /** \brief A C++ function template. */ 01597 CXCursor_FunctionTemplate = 30, 01598 /** \brief A C++ class template. */ 01599 CXCursor_ClassTemplate = 31, 01600 /** \brief A C++ class template partial specialization. */ 01601 CXCursor_ClassTemplatePartialSpecialization = 32, 01602 /** \brief A C++ namespace alias declaration. */ 01603 CXCursor_NamespaceAlias = 33, 01604 /** \brief A C++ using directive. */ 01605 CXCursor_UsingDirective = 34, 01606 /** \brief A C++ using declaration. */ 01607 CXCursor_UsingDeclaration = 35, 01608 /** \brief A C++ alias declaration */ 01609 CXCursor_TypeAliasDecl = 36, 01610 /** \brief An Objective-C \@synthesize definition. */ 01611 CXCursor_ObjCSynthesizeDecl = 37, 01612 /** \brief An Objective-C \@dynamic definition. */ 01613 CXCursor_ObjCDynamicDecl = 38, 01614 /** \brief An access specifier. */ 01615 CXCursor_CXXAccessSpecifier = 39, 01616 01617 CXCursor_FirstDecl = CXCursor_UnexposedDecl, 01618 CXCursor_LastDecl = CXCursor_CXXAccessSpecifier, 01619 01620 /* References */ 01621 CXCursor_FirstRef = 40, /* Decl references */ 01622 CXCursor_ObjCSuperClassRef = 40, 01623 CXCursor_ObjCProtocolRef = 41, 01624 CXCursor_ObjCClassRef = 42, 01625 /** 01626 * \brief A reference to a type declaration. 01627 * 01628 * A type reference occurs anywhere where a type is named but not 01629 * declared. For example, given: 01630 * 01631 * \code 01632 * typedef unsigned size_type; 01633 * size_type size; 01634 * \endcode 01635 * 01636 * The typedef is a declaration of size_type (CXCursor_TypedefDecl), 01637 * while the type of the variable "size" is referenced. The cursor 01638 * referenced by the type of size is the typedef for size_type. 01639 */ 01640 CXCursor_TypeRef = 43, 01641 CXCursor_CXXBaseSpecifier = 44, 01642 /** 01643 * \brief A reference to a class template, function template, template 01644 * template parameter, or class template partial specialization. 01645 */ 01646 CXCursor_TemplateRef = 45, 01647 /** 01648 * \brief A reference to a namespace or namespace alias. 01649 */ 01650 CXCursor_NamespaceRef = 46, 01651 /** 01652 * \brief A reference to a member of a struct, union, or class that occurs in 01653 * some non-expression context, e.g., a designated initializer. 01654 */ 01655 CXCursor_MemberRef = 47, 01656 /** 01657 * \brief A reference to a labeled statement. 01658 * 01659 * This cursor kind is used to describe the jump to "start_over" in the 01660 * goto statement in the following example: 01661 * 01662 * \code 01663 * start_over: 01664 * ++counter; 01665 * 01666 * goto start_over; 01667 * \endcode 01668 * 01669 * A label reference cursor refers to a label statement. 01670 */ 01671 CXCursor_LabelRef = 48, 01672 01673 /** 01674 * \brief A reference to a set of overloaded functions or function templates 01675 * that has not yet been resolved to a specific function or function template. 01676 * 01677 * An overloaded declaration reference cursor occurs in C++ templates where 01678 * a dependent name refers to a function. For example: 01679 * 01680 * \code 01681 * template<typename T> void swap(T&, T&); 01682 * 01683 * struct X { ... }; 01684 * void swap(X&, X&); 01685 * 01686 * template<typename T> 01687 * void reverse(T* first, T* last) { 01688 * while (first < last - 1) { 01689 * swap(*first, *--last); 01690 * ++first; 01691 * } 01692 * } 01693 * 01694 * struct Y { }; 01695 * void swap(Y&, Y&); 01696 * \endcode 01697 * 01698 * Here, the identifier "swap" is associated with an overloaded declaration 01699 * reference. In the template definition, "swap" refers to either of the two 01700 * "swap" functions declared above, so both results will be available. At 01701 * instantiation time, "swap" may also refer to other functions found via 01702 * argument-dependent lookup (e.g., the "swap" function at the end of the 01703 * example). 01704 * 01705 * The functions \c clang_getNumOverloadedDecls() and 01706 * \c clang_getOverloadedDecl() can be used to retrieve the definitions 01707 * referenced by this cursor. 01708 */ 01709 CXCursor_OverloadedDeclRef = 49, 01710 01711 /** 01712 * \brief A reference to a variable that occurs in some non-expression 01713 * context, e.g., a C++ lambda capture list. 01714 */ 01715 CXCursor_VariableRef = 50, 01716 01717 CXCursor_LastRef = CXCursor_VariableRef, 01718 01719 /* Error conditions */ 01720 CXCursor_FirstInvalid = 70, 01721 CXCursor_InvalidFile = 70, 01722 CXCursor_NoDeclFound = 71, 01723 CXCursor_NotImplemented = 72, 01724 CXCursor_InvalidCode = 73, 01725 CXCursor_LastInvalid = CXCursor_InvalidCode, 01726 01727 /* Expressions */ 01728 CXCursor_FirstExpr = 100, 01729 01730 /** 01731 * \brief An expression whose specific kind is not exposed via this 01732 * interface. 01733 * 01734 * Unexposed expressions have the same operations as any other kind 01735 * of expression; one can extract their location information, 01736 * spelling, children, etc. However, the specific kind of the 01737 * expression is not reported. 01738 */ 01739 CXCursor_UnexposedExpr = 100, 01740 01741 /** 01742 * \brief An expression that refers to some value declaration, such 01743 * as a function, variable, or enumerator. 01744 */ 01745 CXCursor_DeclRefExpr = 101, 01746 01747 /** 01748 * \brief An expression that refers to a member of a struct, union, 01749 * class, Objective-C class, etc. 01750 */ 01751 CXCursor_MemberRefExpr = 102, 01752 01753 /** \brief An expression that calls a function. */ 01754 CXCursor_CallExpr = 103, 01755 01756 /** \brief An expression that sends a message to an Objective-C 01757 object or class. */ 01758 CXCursor_ObjCMessageExpr = 104, 01759 01760 /** \brief An expression that represents a block literal. */ 01761 CXCursor_BlockExpr = 105, 01762 01763 /** \brief An integer literal. 01764 */ 01765 CXCursor_IntegerLiteral = 106, 01766 01767 /** \brief A floating point number literal. 01768 */ 01769 CXCursor_FloatingLiteral = 107, 01770 01771 /** \brief An imaginary number literal. 01772 */ 01773 CXCursor_ImaginaryLiteral = 108, 01774 01775 /** \brief A string literal. 01776 */ 01777 CXCursor_StringLiteral = 109, 01778 01779 /** \brief A character literal. 01780 */ 01781 CXCursor_CharacterLiteral = 110, 01782 01783 /** \brief A parenthesized expression, e.g. "(1)". 01784 * 01785 * This AST node is only formed if full location information is requested. 01786 */ 01787 CXCursor_ParenExpr = 111, 01788 01789 /** \brief This represents the unary-expression's (except sizeof and 01790 * alignof). 01791 */ 01792 CXCursor_UnaryOperator = 112, 01793 01794 /** \brief [C99 6.5.2.1] Array Subscripting. 01795 */ 01796 CXCursor_ArraySubscriptExpr = 113, 01797 01798 /** \brief A builtin binary operation expression such as "x + y" or 01799 * "x <= y". 01800 */ 01801 CXCursor_BinaryOperator = 114, 01802 01803 /** \brief Compound assignment such as "+=". 01804 */ 01805 CXCursor_CompoundAssignOperator = 115, 01806 01807 /** \brief The ?: ternary operator. 01808 */ 01809 CXCursor_ConditionalOperator = 116, 01810 01811 /** \brief An explicit cast in C (C99 6.5.4) or a C-style cast in C++ 01812 * (C++ [expr.cast]), which uses the syntax (Type)expr. 01813 * 01814 * For example: (int)f. 01815 */ 01816 CXCursor_CStyleCastExpr = 117, 01817 01818 /** \brief [C99 6.5.2.5] 01819 */ 01820 CXCursor_CompoundLiteralExpr = 118, 01821 01822 /** \brief Describes an C or C++ initializer list. 01823 */ 01824 CXCursor_InitListExpr = 119, 01825 01826 /** \brief The GNU address of label extension, representing &&label. 01827 */ 01828 CXCursor_AddrLabelExpr = 120, 01829 01830 /** \brief This is the GNU Statement Expression extension: ({int X=4; X;}) 01831 */ 01832 CXCursor_StmtExpr = 121, 01833 01834 /** \brief Represents a C11 generic selection. 01835 */ 01836 CXCursor_GenericSelectionExpr = 122, 01837 01838 /** \brief Implements the GNU __null extension, which is a name for a null 01839 * pointer constant that has integral type (e.g., int or long) and is the same 01840 * size and alignment as a pointer. 01841 * 01842 * The __null extension is typically only used by system headers, which define 01843 * NULL as __null in C++ rather than using 0 (which is an integer that may not 01844 * match the size of a pointer). 01845 */ 01846 CXCursor_GNUNullExpr = 123, 01847 01848 /** \brief C++'s static_cast<> expression. 01849 */ 01850 CXCursor_CXXStaticCastExpr = 124, 01851 01852 /** \brief C++'s dynamic_cast<> expression. 01853 */ 01854 CXCursor_CXXDynamicCastExpr = 125, 01855 01856 /** \brief C++'s reinterpret_cast<> expression. 01857 */ 01858 CXCursor_CXXReinterpretCastExpr = 126, 01859 01860 /** \brief C++'s const_cast<> expression. 01861 */ 01862 CXCursor_CXXConstCastExpr = 127, 01863 01864 /** \brief Represents an explicit C++ type conversion that uses "functional" 01865 * notion (C++ [expr.type.conv]). 01866 * 01867 * Example: 01868 * \code 01869 * x = int(0.5); 01870 * \endcode 01871 */ 01872 CXCursor_CXXFunctionalCastExpr = 128, 01873 01874 /** \brief A C++ typeid expression (C++ [expr.typeid]). 01875 */ 01876 CXCursor_CXXTypeidExpr = 129, 01877 01878 /** \brief [C++ 2.13.5] C++ Boolean Literal. 01879 */ 01880 CXCursor_CXXBoolLiteralExpr = 130, 01881 01882 /** \brief [C++0x 2.14.7] C++ Pointer Literal. 01883 */ 01884 CXCursor_CXXNullPtrLiteralExpr = 131, 01885 01886 /** \brief Represents the "this" expression in C++ 01887 */ 01888 CXCursor_CXXThisExpr = 132, 01889 01890 /** \brief [C++ 15] C++ Throw Expression. 01891 * 01892 * This handles 'throw' and 'throw' assignment-expression. When 01893 * assignment-expression isn't present, Op will be null. 01894 */ 01895 CXCursor_CXXThrowExpr = 133, 01896 01897 /** \brief A new expression for memory allocation and constructor calls, e.g: 01898 * "new CXXNewExpr(foo)". 01899 */ 01900 CXCursor_CXXNewExpr = 134, 01901 01902 /** \brief A delete expression for memory deallocation and destructor calls, 01903 * e.g. "delete[] pArray". 01904 */ 01905 CXCursor_CXXDeleteExpr = 135, 01906 01907 /** \brief A unary expression. 01908 */ 01909 CXCursor_UnaryExpr = 136, 01910 01911 /** \brief An Objective-C string literal i.e. @"foo". 01912 */ 01913 CXCursor_ObjCStringLiteral = 137, 01914 01915 /** \brief An Objective-C \@encode expression. 01916 */ 01917 CXCursor_ObjCEncodeExpr = 138, 01918 01919 /** \brief An Objective-C \@selector expression. 01920 */ 01921 CXCursor_ObjCSelectorExpr = 139, 01922 01923 /** \brief An Objective-C \@protocol expression. 01924 */ 01925 CXCursor_ObjCProtocolExpr = 140, 01926 01927 /** \brief An Objective-C "bridged" cast expression, which casts between 01928 * Objective-C pointers and C pointers, transferring ownership in the process. 01929 * 01930 * \code 01931 * NSString *str = (__bridge_transfer NSString *)CFCreateString(); 01932 * \endcode 01933 */ 01934 CXCursor_ObjCBridgedCastExpr = 141, 01935 01936 /** \brief Represents a C++0x pack expansion that produces a sequence of 01937 * expressions. 01938 * 01939 * A pack expansion expression contains a pattern (which itself is an 01940 * expression) followed by an ellipsis. For example: 01941 * 01942 * \code 01943 * template<typename F, typename ...Types> 01944 * void forward(F f, Types &&...args) { 01945 * f(static_cast<Types&&>(args)...); 01946 * } 01947 * \endcode 01948 */ 01949 CXCursor_PackExpansionExpr = 142, 01950 01951 /** \brief Represents an expression that computes the length of a parameter 01952 * pack. 01953 * 01954 * \code 01955 * template<typename ...Types> 01956 * struct count { 01957 * static const unsigned value = sizeof...(Types); 01958 * }; 01959 * \endcode 01960 */ 01961 CXCursor_SizeOfPackExpr = 143, 01962 01963 /* \brief Represents a C++ lambda expression that produces a local function 01964 * object. 01965 * 01966 * \code 01967 * void abssort(float *x, unsigned N) { 01968 * std::sort(x, x + N, 01969 * [](float a, float b) { 01970 * return std::abs(a) < std::abs(b); 01971 * }); 01972 * } 01973 * \endcode 01974 */ 01975 CXCursor_LambdaExpr = 144, 01976 01977 /** \brief Objective-c Boolean Literal. 01978 */ 01979 CXCursor_ObjCBoolLiteralExpr = 145, 01980 01981 /** \brief Represents the "self" expression in an Objective-C method. 01982 */ 01983 CXCursor_ObjCSelfExpr = 146, 01984 01985 CXCursor_LastExpr = CXCursor_ObjCSelfExpr, 01986 01987 /* Statements */ 01988 CXCursor_FirstStmt = 200, 01989 /** 01990 * \brief A statement whose specific kind is not exposed via this 01991 * interface. 01992 * 01993 * Unexposed statements have the same operations as any other kind of 01994 * statement; one can extract their location information, spelling, 01995 * children, etc. However, the specific kind of the statement is not 01996 * reported. 01997 */ 01998 CXCursor_UnexposedStmt = 200, 01999 02000 /** \brief A labelled statement in a function. 02001 * 02002 * This cursor kind is used to describe the "start_over:" label statement in 02003 * the following example: 02004 * 02005 * \code 02006 * start_over: 02007 * ++counter; 02008 * \endcode 02009 * 02010 */ 02011 CXCursor_LabelStmt = 201, 02012 02013 /** \brief A group of statements like { stmt stmt }. 02014 * 02015 * This cursor kind is used to describe compound statements, e.g. function 02016 * bodies. 02017 */ 02018 CXCursor_CompoundStmt = 202, 02019 02020 /** \brief A case statement. 02021 */ 02022 CXCursor_CaseStmt = 203, 02023 02024 /** \brief A default statement. 02025 */ 02026 CXCursor_DefaultStmt = 204, 02027 02028 /** \brief An if statement 02029 */ 02030 CXCursor_IfStmt = 205, 02031 02032 /** \brief A switch statement. 02033 */ 02034 CXCursor_SwitchStmt = 206, 02035 02036 /** \brief A while statement. 02037 */ 02038 CXCursor_WhileStmt = 207, 02039 02040 /** \brief A do statement. 02041 */ 02042 CXCursor_DoStmt = 208, 02043 02044 /** \brief A for statement. 02045 */ 02046 CXCursor_ForStmt = 209, 02047 02048 /** \brief A goto statement. 02049 */ 02050 CXCursor_GotoStmt = 210, 02051 02052 /** \brief An indirect goto statement. 02053 */ 02054 CXCursor_IndirectGotoStmt = 211, 02055 02056 /** \brief A continue statement. 02057 */ 02058 CXCursor_ContinueStmt = 212, 02059 02060 /** \brief A break statement. 02061 */ 02062 CXCursor_BreakStmt = 213, 02063 02064 /** \brief A return statement. 02065 */ 02066 CXCursor_ReturnStmt = 214, 02067 02068 /** \brief A GCC inline assembly statement extension. 02069 */ 02070 CXCursor_GCCAsmStmt = 215, 02071 CXCursor_AsmStmt = CXCursor_GCCAsmStmt, 02072 02073 /** \brief Objective-C's overall \@try-\@catch-\@finally statement. 02074 */ 02075 CXCursor_ObjCAtTryStmt = 216, 02076 02077 /** \brief Objective-C's \@catch statement. 02078 */ 02079 CXCursor_ObjCAtCatchStmt = 217, 02080 02081 /** \brief Objective-C's \@finally statement. 02082 */ 02083 CXCursor_ObjCAtFinallyStmt = 218, 02084 02085 /** \brief Objective-C's \@throw statement. 02086 */ 02087 CXCursor_ObjCAtThrowStmt = 219, 02088 02089 /** \brief Objective-C's \@synchronized statement. 02090 */ 02091 CXCursor_ObjCAtSynchronizedStmt = 220, 02092 02093 /** \brief Objective-C's autorelease pool statement. 02094 */ 02095 CXCursor_ObjCAutoreleasePoolStmt = 221, 02096 02097 /** \brief Objective-C's collection statement. 02098 */ 02099 CXCursor_ObjCForCollectionStmt = 222, 02100 02101 /** \brief C++'s catch statement. 02102 */ 02103 CXCursor_CXXCatchStmt = 223, 02104 02105 /** \brief C++'s try statement. 02106 */ 02107 CXCursor_CXXTryStmt = 224, 02108 02109 /** \brief C++'s for (* : *) statement. 02110 */ 02111 CXCursor_CXXForRangeStmt = 225, 02112 02113 /** \brief Windows Structured Exception Handling's try statement. 02114 */ 02115 CXCursor_SEHTryStmt = 226, 02116 02117 /** \brief Windows Structured Exception Handling's except statement. 02118 */ 02119 CXCursor_SEHExceptStmt = 227, 02120 02121 /** \brief Windows Structured Exception Handling's finally statement. 02122 */ 02123 CXCursor_SEHFinallyStmt = 228, 02124 02125 /** \brief A MS inline assembly statement extension. 02126 */ 02127 CXCursor_MSAsmStmt = 229, 02128 02129 /** \brief The null satement ";": C99 6.8.3p3. 02130 * 02131 * This cursor kind is used to describe the null statement. 02132 */ 02133 CXCursor_NullStmt = 230, 02134 02135 /** \brief Adaptor class for mixing declarations with statements and 02136 * expressions. 02137 */ 02138 CXCursor_DeclStmt = 231, 02139 02140 /** \brief OpenMP parallel directive. 02141 */ 02142 CXCursor_OMPParallelDirective = 232, 02143 02144 /** \brief OpenMP simd directive. 02145 */ 02146 CXCursor_OMPSimdDirective = 233, 02147 02148 /** \brief OpenMP for directive. 02149 */ 02150 CXCursor_OMPForDirective = 234, 02151 02152 /** \brief OpenMP sections directive. 02153 */ 02154 CXCursor_OMPSectionsDirective = 235, 02155 02156 /** \brief OpenMP section directive. 02157 */ 02158 CXCursor_OMPSectionDirective = 236, 02159 02160 /** \brief OpenMP single directive. 02161 */ 02162 CXCursor_OMPSingleDirective = 237, 02163 02164 /** \brief OpenMP parallel for directive. 02165 */ 02166 CXCursor_OMPParallelForDirective = 238, 02167 02168 /** \brief OpenMP parallel sections directive. 02169 */ 02170 CXCursor_OMPParallelSectionsDirective = 239, 02171 02172 /** \brief OpenMP task directive. 02173 */ 02174 CXCursor_OMPTaskDirective = 240, 02175 02176 /** \brief OpenMP master directive. 02177 */ 02178 CXCursor_OMPMasterDirective = 241, 02179 02180 /** \brief OpenMP critical directive. 02181 */ 02182 CXCursor_OMPCriticalDirective = 242, 02183 02184 /** \brief OpenMP taskyield directive. 02185 */ 02186 CXCursor_OMPTaskyieldDirective = 243, 02187 02188 /** \brief OpenMP barrier directive. 02189 */ 02190 CXCursor_OMPBarrierDirective = 244, 02191 02192 /** \brief OpenMP taskwait directive. 02193 */ 02194 CXCursor_OMPTaskwaitDirective = 245, 02195 02196 /** \brief OpenMP flush directive. 02197 */ 02198 CXCursor_OMPFlushDirective = 246, 02199 02200 /** \brief Windows Structured Exception Handling's leave statement. 02201 */ 02202 CXCursor_SEHLeaveStmt = 247, 02203 02204 /** \brief OpenMP ordered directive. 02205 */ 02206 CXCursor_OMPOrderedDirective = 248, 02207 02208 /** \brief OpenMP atomic directive. 02209 */ 02210 CXCursor_OMPAtomicDirective = 249, 02211 02212 /** \brief OpenMP for simd directive. 02213 */ 02214 CXCursor_OMPForSimdDirective = 250, 02215 02216 /** \brief OpenMP parallel for simd directive. 02217 */ 02218 CXCursor_OMPParallelForSimdDirective = 251, 02219 02220 /** \brief OpenMP target directive. 02221 */ 02222 CXCursor_OMPTargetDirective = 252, 02223 02224 /** \brief OpenMP teams directive. 02225 */ 02226 CXCursor_OMPTeamsDirective = 253, 02227 02228 CXCursor_LastStmt = CXCursor_OMPTeamsDirective, 02229 02230 /** 02231 * \brief Cursor that represents the translation unit itself. 02232 * 02233 * The translation unit cursor exists primarily to act as the root 02234 * cursor for traversing the contents of a translation unit. 02235 */ 02236 CXCursor_TranslationUnit = 300, 02237 02238 /* Attributes */ 02239 CXCursor_FirstAttr = 400, 02240 /** 02241 * \brief An attribute whose specific kind is not exposed via this 02242 * interface. 02243 */ 02244 CXCursor_UnexposedAttr = 400, 02245 02246 CXCursor_IBActionAttr = 401, 02247 CXCursor_IBOutletAttr = 402, 02248 CXCursor_IBOutletCollectionAttr = 403, 02249 CXCursor_CXXFinalAttr = 404, 02250 CXCursor_CXXOverrideAttr = 405, 02251 CXCursor_AnnotateAttr = 406, 02252 CXCursor_AsmLabelAttr = 407, 02253 CXCursor_PackedAttr = 408, 02254 CXCursor_PureAttr = 409, 02255 CXCursor_ConstAttr = 410, 02256 CXCursor_NoDuplicateAttr = 411, 02257 CXCursor_CUDAConstantAttr = 412, 02258 CXCursor_CUDADeviceAttr = 413, 02259 CXCursor_CUDAGlobalAttr = 414, 02260 CXCursor_CUDAHostAttr = 415, 02261 CXCursor_CUDASharedAttr = 416, 02262 CXCursor_LastAttr = CXCursor_CUDASharedAttr, 02263 02264 /* Preprocessing */ 02265 CXCursor_PreprocessingDirective = 500, 02266 CXCursor_MacroDefinition = 501, 02267 CXCursor_MacroExpansion = 502, 02268 CXCursor_MacroInstantiation = CXCursor_MacroExpansion, 02269 CXCursor_InclusionDirective = 503, 02270 CXCursor_FirstPreprocessing = CXCursor_PreprocessingDirective, 02271 CXCursor_LastPreprocessing = CXCursor_InclusionDirective, 02272 02273 /* Extra Declarations */ 02274 /** 02275 * \brief A module import declaration. 02276 */ 02277 CXCursor_ModuleImportDecl = 600, 02278 CXCursor_FirstExtraDecl = CXCursor_ModuleImportDecl, 02279 CXCursor_LastExtraDecl = CXCursor_ModuleImportDecl 02280 }; 02281 02282 /** 02283 * \brief A cursor representing some element in the abstract syntax tree for 02284 * a translation unit. 02285 * 02286 * The cursor abstraction unifies the different kinds of entities in a 02287 * program--declaration, statements, expressions, references to declarations, 02288 * etc.--under a single "cursor" abstraction with a common set of operations. 02289 * Common operation for a cursor include: getting the physical location in 02290 * a source file where the cursor points, getting the name associated with a 02291 * cursor, and retrieving cursors for any child nodes of a particular cursor. 02292 * 02293 * Cursors can be produced in two specific ways. 02294 * clang_getTranslationUnitCursor() produces a cursor for a translation unit, 02295 * from which one can use clang_visitChildren() to explore the rest of the 02296 * translation unit. clang_getCursor() maps from a physical source location 02297 * to the entity that resides at that location, allowing one to map from the 02298 * source code into the AST. 02299 */ 02300 typedef struct { 02301 enum CXCursorKind kind; 02302 int xdata; 02303 const void *data[3]; 02304 } CXCursor; 02305 02306 /** 02307 * \defgroup CINDEX_CURSOR_MANIP Cursor manipulations 02308 * 02309 * @{ 02310 */ 02311 02312 /** 02313 * \brief Retrieve the NULL cursor, which represents no entity. 02314 */ 02315 CINDEX_LINKAGE CXCursor clang_getNullCursor(void); 02316 02317 /** 02318 * \brief Retrieve the cursor that represents the given translation unit. 02319 * 02320 * The translation unit cursor can be used to start traversing the 02321 * various declarations within the given translation unit. 02322 */ 02323 CINDEX_LINKAGE CXCursor clang_getTranslationUnitCursor(CXTranslationUnit); 02324 02325 /** 02326 * \brief Determine whether two cursors are equivalent. 02327 */ 02328 CINDEX_LINKAGE unsigned clang_equalCursors(CXCursor, CXCursor); 02329 02330 /** 02331 * \brief Returns non-zero if \p cursor is null. 02332 */ 02333 CINDEX_LINKAGE int clang_Cursor_isNull(CXCursor cursor); 02334 02335 /** 02336 * \brief Compute a hash value for the given cursor. 02337 */ 02338 CINDEX_LINKAGE unsigned clang_hashCursor(CXCursor); 02339 02340 /** 02341 * \brief Retrieve the kind of the given cursor. 02342 */ 02343 CINDEX_LINKAGE enum CXCursorKind clang_getCursorKind(CXCursor); 02344 02345 /** 02346 * \brief Determine whether the given cursor kind represents a declaration. 02347 */ 02348 CINDEX_LINKAGE unsigned clang_isDeclaration(enum CXCursorKind); 02349 02350 /** 02351 * \brief Determine whether the given cursor kind represents a simple 02352 * reference. 02353 * 02354 * Note that other kinds of cursors (such as expressions) can also refer to 02355 * other cursors. Use clang_getCursorReferenced() to determine whether a 02356 * particular cursor refers to another entity. 02357 */ 02358 CINDEX_LINKAGE unsigned clang_isReference(enum CXCursorKind); 02359 02360 /** 02361 * \brief Determine whether the given cursor kind represents an expression. 02362 */ 02363 CINDEX_LINKAGE unsigned clang_isExpression(enum CXCursorKind); 02364 02365 /** 02366 * \brief Determine whether the given cursor kind represents a statement. 02367 */ 02368 CINDEX_LINKAGE unsigned clang_isStatement(enum CXCursorKind); 02369 02370 /** 02371 * \brief Determine whether the given cursor kind represents an attribute. 02372 */ 02373 CINDEX_LINKAGE unsigned clang_isAttribute(enum CXCursorKind); 02374 02375 /** 02376 * \brief Determine whether the given cursor kind represents an invalid 02377 * cursor. 02378 */ 02379 CINDEX_LINKAGE unsigned clang_isInvalid(enum CXCursorKind); 02380 02381 /** 02382 * \brief Determine whether the given cursor kind represents a translation 02383 * unit. 02384 */ 02385 CINDEX_LINKAGE unsigned clang_isTranslationUnit(enum CXCursorKind); 02386 02387 /*** 02388 * \brief Determine whether the given cursor represents a preprocessing 02389 * element, such as a preprocessor directive or macro instantiation. 02390 */ 02391 CINDEX_LINKAGE unsigned clang_isPreprocessing(enum CXCursorKind); 02392 02393 /*** 02394 * \brief Determine whether the given cursor represents a currently 02395 * unexposed piece of the AST (e.g., CXCursor_UnexposedStmt). 02396 */ 02397 CINDEX_LINKAGE unsigned clang_isUnexposed(enum CXCursorKind); 02398 02399 /** 02400 * \brief Describe the linkage of the entity referred to by a cursor. 02401 */ 02402 enum CXLinkageKind { 02403 /** \brief This value indicates that no linkage information is available 02404 * for a provided CXCursor. */ 02405 CXLinkage_Invalid, 02406 /** 02407 * \brief This is the linkage for variables, parameters, and so on that 02408 * have automatic storage. This covers normal (non-extern) local variables. 02409 */ 02410 CXLinkage_NoLinkage, 02411 /** \brief This is the linkage for static variables and static functions. */ 02412 CXLinkage_Internal, 02413 /** \brief This is the linkage for entities with external linkage that live 02414 * in C++ anonymous namespaces.*/ 02415 CXLinkage_UniqueExternal, 02416 /** \brief This is the linkage for entities with true, external linkage. */ 02417 CXLinkage_External 02418 }; 02419 02420 /** 02421 * \brief Determine the linkage of the entity referred to by a given cursor. 02422 */ 02423 CINDEX_LINKAGE enum CXLinkageKind clang_getCursorLinkage(CXCursor cursor); 02424 02425 /** 02426 * \brief Determine the availability of the entity that this cursor refers to, 02427 * taking the current target platform into account. 02428 * 02429 * \param cursor The cursor to query. 02430 * 02431 * \returns The availability of the cursor. 02432 */ 02433 CINDEX_LINKAGE enum CXAvailabilityKind 02434 clang_getCursorAvailability(CXCursor cursor); 02435 02436 /** 02437 * Describes the availability of a given entity on a particular platform, e.g., 02438 * a particular class might only be available on Mac OS 10.7 or newer. 02439 */ 02440 typedef struct CXPlatformAvailability { 02441 /** 02442 * \brief A string that describes the platform for which this structure 02443 * provides availability information. 02444 * 02445 * Possible values are "ios" or "macosx". 02446 */ 02447 CXString Platform; 02448 /** 02449 * \brief The version number in which this entity was introduced. 02450 */ 02451 CXVersion Introduced; 02452 /** 02453 * \brief The version number in which this entity was deprecated (but is 02454 * still available). 02455 */ 02456 CXVersion Deprecated; 02457 /** 02458 * \brief The version number in which this entity was obsoleted, and therefore 02459 * is no longer available. 02460 */ 02461 CXVersion Obsoleted; 02462 /** 02463 * \brief Whether the entity is unconditionally unavailable on this platform. 02464 */ 02465 int Unavailable; 02466 /** 02467 * \brief An optional message to provide to a user of this API, e.g., to 02468 * suggest replacement APIs. 02469 */ 02470 CXString Message; 02471 } CXPlatformAvailability; 02472 02473 /** 02474 * \brief Determine the availability of the entity that this cursor refers to 02475 * on any platforms for which availability information is known. 02476 * 02477 * \param cursor The cursor to query. 02478 * 02479 * \param always_deprecated If non-NULL, will be set to indicate whether the 02480 * entity is deprecated on all platforms. 02481 * 02482 * \param deprecated_message If non-NULL, will be set to the message text 02483 * provided along with the unconditional deprecation of this entity. The client 02484 * is responsible for deallocating this string. 02485 * 02486 * \param always_unavailable If non-NULL, will be set to indicate whether the 02487 * entity is unavailable on all platforms. 02488 * 02489 * \param unavailable_message If non-NULL, will be set to the message text 02490 * provided along with the unconditional unavailability of this entity. The 02491 * client is responsible for deallocating this string. 02492 * 02493 * \param availability If non-NULL, an array of CXPlatformAvailability instances 02494 * that will be populated with platform availability information, up to either 02495 * the number of platforms for which availability information is available (as 02496 * returned by this function) or \c availability_size, whichever is smaller. 02497 * 02498 * \param availability_size The number of elements available in the 02499 * \c availability array. 02500 * 02501 * \returns The number of platforms (N) for which availability information is 02502 * available (which is unrelated to \c availability_size). 02503 * 02504 * Note that the client is responsible for calling 02505 * \c clang_disposeCXPlatformAvailability to free each of the 02506 * platform-availability structures returned. There are 02507 * \c min(N, availability_size) such structures. 02508 */ 02509 CINDEX_LINKAGE int 02510 clang_getCursorPlatformAvailability(CXCursor cursor, 02511 int *always_deprecated, 02512 CXString *deprecated_message, 02513 int *always_unavailable, 02514 CXString *unavailable_message, 02515 CXPlatformAvailability *availability, 02516 int availability_size); 02517 02518 /** 02519 * \brief Free the memory associated with a \c CXPlatformAvailability structure. 02520 */ 02521 CINDEX_LINKAGE void 02522 clang_disposeCXPlatformAvailability(CXPlatformAvailability *availability); 02523 02524 /** 02525 * \brief Describe the "language" of the entity referred to by a cursor. 02526 */ 02527 enum CXLanguageKind { 02528 CXLanguage_Invalid = 0, 02529 CXLanguage_C, 02530 CXLanguage_ObjC, 02531 CXLanguage_CPlusPlus 02532 }; 02533 02534 /** 02535 * \brief Determine the "language" of the entity referred to by a given cursor. 02536 */ 02537 CINDEX_LINKAGE enum CXLanguageKind clang_getCursorLanguage(CXCursor cursor); 02538 02539 /** 02540 * \brief Returns the translation unit that a cursor originated from. 02541 */ 02542 CINDEX_LINKAGE CXTranslationUnit clang_Cursor_getTranslationUnit(CXCursor); 02543 02544 02545 /** 02546 * \brief A fast container representing a set of CXCursors. 02547 */ 02548 typedef struct CXCursorSetImpl *CXCursorSet; 02549 02550 /** 02551 * \brief Creates an empty CXCursorSet. 02552 */ 02553 CINDEX_LINKAGE CXCursorSet clang_createCXCursorSet(void); 02554 02555 /** 02556 * \brief Disposes a CXCursorSet and releases its associated memory. 02557 */ 02558 CINDEX_LINKAGE void clang_disposeCXCursorSet(CXCursorSet cset); 02559 02560 /** 02561 * \brief Queries a CXCursorSet to see if it contains a specific CXCursor. 02562 * 02563 * \returns non-zero if the set contains the specified cursor. 02564 */ 02565 CINDEX_LINKAGE unsigned clang_CXCursorSet_contains(CXCursorSet cset, 02566 CXCursor cursor); 02567 02568 /** 02569 * \brief Inserts a CXCursor into a CXCursorSet. 02570 * 02571 * \returns zero if the CXCursor was already in the set, and non-zero otherwise. 02572 */ 02573 CINDEX_LINKAGE unsigned clang_CXCursorSet_insert(CXCursorSet cset, 02574 CXCursor cursor); 02575 02576 /** 02577 * \brief Determine the semantic parent of the given cursor. 02578 * 02579 * The semantic parent of a cursor is the cursor that semantically contains 02580 * the given \p cursor. For many declarations, the lexical and semantic parents 02581 * are equivalent (the lexical parent is returned by 02582 * \c clang_getCursorLexicalParent()). They diverge when declarations or 02583 * definitions are provided out-of-line. For example: 02584 * 02585 * \code 02586 * class C { 02587 * void f(); 02588 * }; 02589 * 02590 * void C::f() { } 02591 * \endcode 02592 * 02593 * In the out-of-line definition of \c C::f, the semantic parent is 02594 * the class \c C, of which this function is a member. The lexical parent is 02595 * the place where the declaration actually occurs in the source code; in this 02596 * case, the definition occurs in the translation unit. In general, the 02597 * lexical parent for a given entity can change without affecting the semantics 02598 * of the program, and the lexical parent of different declarations of the 02599 * same entity may be different. Changing the semantic parent of a declaration, 02600 * on the other hand, can have a major impact on semantics, and redeclarations 02601 * of a particular entity should all have the same semantic context. 02602 * 02603 * In the example above, both declarations of \c C::f have \c C as their 02604 * semantic context, while the lexical context of the first \c C::f is \c C 02605 * and the lexical context of the second \c C::f is the translation unit. 02606 * 02607 * For global declarations, the semantic parent is the translation unit. 02608 */ 02609 CINDEX_LINKAGE CXCursor clang_getCursorSemanticParent(CXCursor cursor); 02610 02611 /** 02612 * \brief Determine the lexical parent of the given cursor. 02613 * 02614 * The lexical parent of a cursor is the cursor in which the given \p cursor 02615 * was actually written. For many declarations, the lexical and semantic parents 02616 * are equivalent (the semantic parent is returned by 02617 * \c clang_getCursorSemanticParent()). They diverge when declarations or 02618 * definitions are provided out-of-line. For example: 02619 * 02620 * \code 02621 * class C { 02622 * void f(); 02623 * }; 02624 * 02625 * void C::f() { } 02626 * \endcode 02627 * 02628 * In the out-of-line definition of \c C::f, the semantic parent is 02629 * the class \c C, of which this function is a member. The lexical parent is 02630 * the place where the declaration actually occurs in the source code; in this 02631 * case, the definition occurs in the translation unit. In general, the 02632 * lexical parent for a given entity can change without affecting the semantics 02633 * of the program, and the lexical parent of different declarations of the 02634 * same entity may be different. Changing the semantic parent of a declaration, 02635 * on the other hand, can have a major impact on semantics, and redeclarations 02636 * of a particular entity should all have the same semantic context. 02637 * 02638 * In the example above, both declarations of \c C::f have \c C as their 02639 * semantic context, while the lexical context of the first \c C::f is \c C 02640 * and the lexical context of the second \c C::f is the translation unit. 02641 * 02642 * For declarations written in the global scope, the lexical parent is 02643 * the translation unit. 02644 */ 02645 CINDEX_LINKAGE CXCursor clang_getCursorLexicalParent(CXCursor cursor); 02646 02647 /** 02648 * \brief Determine the set of methods that are overridden by the given 02649 * method. 02650 * 02651 * In both Objective-C and C++, a method (aka virtual member function, 02652 * in C++) can override a virtual method in a base class. For 02653 * Objective-C, a method is said to override any method in the class's 02654 * base class, its protocols, or its categories' protocols, that has the same 02655 * selector and is of the same kind (class or instance). 02656 * If no such method exists, the search continues to the class's superclass, 02657 * its protocols, and its categories, and so on. A method from an Objective-C 02658 * implementation is considered to override the same methods as its 02659 * corresponding method in the interface. 02660 * 02661 * For C++, a virtual member function overrides any virtual member 02662 * function with the same signature that occurs in its base 02663 * classes. With multiple inheritance, a virtual member function can 02664 * override several virtual member functions coming from different 02665 * base classes. 02666 * 02667 * In all cases, this function determines the immediate overridden 02668 * method, rather than all of the overridden methods. For example, if 02669 * a method is originally declared in a class A, then overridden in B 02670 * (which in inherits from A) and also in C (which inherited from B), 02671 * then the only overridden method returned from this function when 02672 * invoked on C's method will be B's method. The client may then 02673 * invoke this function again, given the previously-found overridden 02674 * methods, to map out the complete method-override set. 02675 * 02676 * \param cursor A cursor representing an Objective-C or C++ 02677 * method. This routine will compute the set of methods that this 02678 * method overrides. 02679 * 02680 * \param overridden A pointer whose pointee will be replaced with a 02681 * pointer to an array of cursors, representing the set of overridden 02682 * methods. If there are no overridden methods, the pointee will be 02683 * set to NULL. The pointee must be freed via a call to 02684 * \c clang_disposeOverriddenCursors(). 02685 * 02686 * \param num_overridden A pointer to the number of overridden 02687 * functions, will be set to the number of overridden functions in the 02688 * array pointed to by \p overridden. 02689 */ 02690 CINDEX_LINKAGE void clang_getOverriddenCursors(CXCursor cursor, 02691 CXCursor **overridden, 02692 unsigned *num_overridden); 02693 02694 /** 02695 * \brief Free the set of overridden cursors returned by \c 02696 * clang_getOverriddenCursors(). 02697 */ 02698 CINDEX_LINKAGE void clang_disposeOverriddenCursors(CXCursor *overridden); 02699 02700 /** 02701 * \brief Retrieve the file that is included by the given inclusion directive 02702 * cursor. 02703 */ 02704 CINDEX_LINKAGE CXFile clang_getIncludedFile(CXCursor cursor); 02705 02706 /** 02707 * @} 02708 */ 02709 02710 /** 02711 * \defgroup CINDEX_CURSOR_SOURCE Mapping between cursors and source code 02712 * 02713 * Cursors represent a location within the Abstract Syntax Tree (AST). These 02714 * routines help map between cursors and the physical locations where the 02715 * described entities occur in the source code. The mapping is provided in 02716 * both directions, so one can map from source code to the AST and back. 02717 * 02718 * @{ 02719 */ 02720 02721 /** 02722 * \brief Map a source location to the cursor that describes the entity at that 02723 * location in the source code. 02724 * 02725 * clang_getCursor() maps an arbitrary source location within a translation 02726 * unit down to the most specific cursor that describes the entity at that 02727 * location. For example, given an expression \c x + y, invoking 02728 * clang_getCursor() with a source location pointing to "x" will return the 02729 * cursor for "x"; similarly for "y". If the cursor points anywhere between 02730 * "x" or "y" (e.g., on the + or the whitespace around it), clang_getCursor() 02731 * will return a cursor referring to the "+" expression. 02732 * 02733 * \returns a cursor representing the entity at the given source location, or 02734 * a NULL cursor if no such entity can be found. 02735 */ 02736 CINDEX_LINKAGE CXCursor clang_getCursor(CXTranslationUnit, CXSourceLocation); 02737 02738 /** 02739 * \brief Retrieve the physical location of the source constructor referenced 02740 * by the given cursor. 02741 * 02742 * The location of a declaration is typically the location of the name of that 02743 * declaration, where the name of that declaration would occur if it is 02744 * unnamed, or some keyword that introduces that particular declaration. 02745 * The location of a reference is where that reference occurs within the 02746 * source code. 02747 */ 02748 CINDEX_LINKAGE CXSourceLocation clang_getCursorLocation(CXCursor); 02749 02750 /** 02751 * \brief Retrieve the physical extent of the source construct referenced by 02752 * the given cursor. 02753 * 02754 * The extent of a cursor starts with the file/line/column pointing at the 02755 * first character within the source construct that the cursor refers to and 02756 * ends with the last character within that source construct. For a 02757 * declaration, the extent covers the declaration itself. For a reference, 02758 * the extent covers the location of the reference (e.g., where the referenced 02759 * entity was actually used). 02760 */ 02761 CINDEX_LINKAGE CXSourceRange clang_getCursorExtent(CXCursor); 02762 02763 /** 02764 * @} 02765 */ 02766 02767 /** 02768 * \defgroup CINDEX_TYPES Type information for CXCursors 02769 * 02770 * @{ 02771 */ 02772 02773 /** 02774 * \brief Describes the kind of type 02775 */ 02776 enum CXTypeKind { 02777 /** 02778 * \brief Represents an invalid type (e.g., where no type is available). 02779 */ 02780 CXType_Invalid = 0, 02781 02782 /** 02783 * \brief A type whose specific kind is not exposed via this 02784 * interface. 02785 */ 02786 CXType_Unexposed = 1, 02787 02788 /* Builtin types */ 02789 CXType_Void = 2, 02790 CXType_Bool = 3, 02791 CXType_Char_U = 4, 02792 CXType_UChar = 5, 02793 CXType_Char16 = 6, 02794 CXType_Char32 = 7, 02795 CXType_UShort = 8, 02796 CXType_UInt = 9, 02797 CXType_ULong = 10, 02798 CXType_ULongLong = 11, 02799 CXType_UInt128 = 12, 02800 CXType_Char_S = 13, 02801 CXType_SChar = 14, 02802 CXType_WChar = 15, 02803 CXType_Short = 16, 02804 CXType_Int = 17, 02805 CXType_Long = 18, 02806 CXType_LongLong = 19, 02807 CXType_Int128 = 20, 02808 CXType_Float = 21, 02809 CXType_Double = 22, 02810 CXType_LongDouble = 23, 02811 CXType_NullPtr = 24, 02812 CXType_Overload = 25, 02813 CXType_Dependent = 26, 02814 CXType_ObjCId = 27, 02815 CXType_ObjCClass = 28, 02816 CXType_ObjCSel = 29, 02817 CXType_FirstBuiltin = CXType_Void, 02818 CXType_LastBuiltin = CXType_ObjCSel, 02819 02820 CXType_Complex = 100, 02821 CXType_Pointer = 101, 02822 CXType_BlockPointer = 102, 02823 CXType_LValueReference = 103, 02824 CXType_RValueReference = 104, 02825 CXType_Record = 105, 02826 CXType_Enum = 106, 02827 CXType_Typedef = 107, 02828 CXType_ObjCInterface = 108, 02829 CXType_ObjCObjectPointer = 109, 02830 CXType_FunctionNoProto = 110, 02831 CXType_FunctionProto = 111, 02832 CXType_ConstantArray = 112, 02833 CXType_Vector = 113, 02834 CXType_IncompleteArray = 114, 02835 CXType_VariableArray = 115, 02836 CXType_DependentSizedArray = 116, 02837 CXType_MemberPointer = 117 02838 }; 02839 02840 /** 02841 * \brief Describes the calling convention of a function type 02842 */ 02843 enum CXCallingConv { 02844 CXCallingConv_Default = 0, 02845 CXCallingConv_C = 1, 02846 CXCallingConv_X86StdCall = 2, 02847 CXCallingConv_X86FastCall = 3, 02848 CXCallingConv_X86ThisCall = 4, 02849 CXCallingConv_X86Pascal = 5, 02850 CXCallingConv_AAPCS = 6, 02851 CXCallingConv_AAPCS_VFP = 7, 02852 CXCallingConv_PnaclCall = 8, 02853 CXCallingConv_IntelOclBicc = 9, 02854 CXCallingConv_X86_64Win64 = 10, 02855 CXCallingConv_X86_64SysV = 11, 02856 CXCallingConv_X86VectorCall = 12, 02857 02858 CXCallingConv_Invalid = 100, 02859 CXCallingConv_Unexposed = 200 02860 }; 02861 02862 02863 /** 02864 * \brief The type of an element in the abstract syntax tree. 02865 * 02866 */ 02867 typedef struct { 02868 enum CXTypeKind kind; 02869 void *data[2]; 02870 } CXType; 02871 02872 /** 02873 * \brief Retrieve the type of a CXCursor (if any). 02874 */ 02875 CINDEX_LINKAGE CXType clang_getCursorType(CXCursor C); 02876 02877 /** 02878 * \brief Pretty-print the underlying type using the rules of the 02879 * language of the translation unit from which it came. 02880 * 02881 * If the type is invalid, an empty string is returned. 02882 */ 02883 CINDEX_LINKAGE CXString clang_getTypeSpelling(CXType CT); 02884 02885 /** 02886 * \brief Retrieve the underlying type of a typedef declaration. 02887 * 02888 * If the cursor does not reference a typedef declaration, an invalid type is 02889 * returned. 02890 */ 02891 CINDEX_LINKAGE CXType clang_getTypedefDeclUnderlyingType(CXCursor C); 02892 02893 /** 02894 * \brief Retrieve the integer type of an enum declaration. 02895 * 02896 * If the cursor does not reference an enum declaration, an invalid type is 02897 * returned. 02898 */ 02899 CINDEX_LINKAGE CXType clang_getEnumDeclIntegerType(CXCursor C); 02900 02901 /** 02902 * \brief Retrieve the integer value of an enum constant declaration as a signed 02903 * long long. 02904 * 02905 * If the cursor does not reference an enum constant declaration, LLONG_MIN is returned. 02906 * Since this is also potentially a valid constant value, the kind of the cursor 02907 * must be verified before calling this function. 02908 */ 02909 CINDEX_LINKAGE long long clang_getEnumConstantDeclValue(CXCursor C); 02910 02911 /** 02912 * \brief Retrieve the integer value of an enum constant declaration as an unsigned 02913 * long long. 02914 * 02915 * If the cursor does not reference an enum constant declaration, ULLONG_MAX is returned. 02916 * Since this is also potentially a valid constant value, the kind of the cursor 02917 * must be verified before calling this function. 02918 */ 02919 CINDEX_LINKAGE unsigned long long clang_getEnumConstantDeclUnsignedValue(CXCursor C); 02920 02921 /** 02922 * \brief Retrieve the bit width of a bit field declaration as an integer. 02923 * 02924 * If a cursor that is not a bit field declaration is passed in, -1 is returned. 02925 */ 02926 CINDEX_LINKAGE int clang_getFieldDeclBitWidth(CXCursor C); 02927 02928 /** 02929 * \brief Retrieve the number of non-variadic arguments associated with a given 02930 * cursor. 02931 * 02932 * The number of arguments can be determined for calls as well as for 02933 * declarations of functions or methods. For other cursors -1 is returned. 02934 */ 02935 CINDEX_LINKAGE int clang_Cursor_getNumArguments(CXCursor C); 02936 02937 /** 02938 * \brief Retrieve the argument cursor of a function or method. 02939 * 02940 * The argument cursor can be determined for calls as well as for declarations 02941 * of functions or methods. For other cursors and for invalid indices, an 02942 * invalid cursor is returned. 02943 */ 02944 CINDEX_LINKAGE CXCursor clang_Cursor_getArgument(CXCursor C, unsigned i); 02945 02946 /** 02947 * \brief Describes the kind of a template argument. 02948 * 02949 * See the definition of llvm::clang::TemplateArgument::ArgKind for full 02950 * element descriptions. 02951 */ 02952 enum CXTemplateArgumentKind { 02953 CXTemplateArgumentKind_Null, 02954 CXTemplateArgumentKind_Type, 02955 CXTemplateArgumentKind_Declaration, 02956 CXTemplateArgumentKind_NullPtr, 02957 CXTemplateArgumentKind_Integral, 02958 CXTemplateArgumentKind_Template, 02959 CXTemplateArgumentKind_TemplateExpansion, 02960 CXTemplateArgumentKind_Expression, 02961 CXTemplateArgumentKind_Pack, 02962 /* Indicates an error case, preventing the kind from being deduced. */ 02963 CXTemplateArgumentKind_Invalid 02964 }; 02965 02966 /** 02967 *\brief Returns the number of template args of a function decl representing a 02968 * template specialization. 02969 * 02970 * If the argument cursor cannot be converted into a template function 02971 * declaration, -1 is returned. 02972 * 02973 * For example, for the following declaration and specialization: 02974 * template <typename T, int kInt, bool kBool> 02975 * void foo() { ... } 02976 * 02977 * template <> 02978 * void foo<float, -7, true>(); 02979 * 02980 * The value 3 would be returned from this call. 02981 */ 02982 CINDEX_LINKAGE int clang_Cursor_getNumTemplateArguments(CXCursor C); 02983 02984 /** 02985 * \brief Retrieve the kind of the I'th template argument of the CXCursor C. 02986 * 02987 * If the argument CXCursor does not represent a FunctionDecl, an invalid 02988 * template argument kind is returned. 02989 * 02990 * For example, for the following declaration and specialization: 02991 * template <typename T, int kInt, bool kBool> 02992 * void foo() { ... } 02993 * 02994 * template <> 02995 * void foo<float, -7, true>(); 02996 * 02997 * For I = 0, 1, and 2, Type, Integral, and Integral will be returned, 02998 * respectively. 02999 */ 03000 CINDEX_LINKAGE enum CXTemplateArgumentKind clang_Cursor_getTemplateArgumentKind( 03001 CXCursor C, unsigned I); 03002 03003 /** 03004 * \brief Retrieve a CXType representing the type of a TemplateArgument of a 03005 * function decl representing a template specialization. 03006 * 03007 * If the argument CXCursor does not represent a FunctionDecl whose I'th 03008 * template argument has a kind of CXTemplateArgKind_Integral, an invalid type 03009 * is returned. 03010 * 03011 * For example, for the following declaration and specialization: 03012 * template <typename T, int kInt, bool kBool> 03013 * void foo() { ... } 03014 * 03015 * template <> 03016 * void foo<float, -7, true>(); 03017 * 03018 * If called with I = 0, "float", will be returned. 03019 * Invalid types will be returned for I == 1 or 2. 03020 */ 03021 CINDEX_LINKAGE CXType clang_Cursor_getTemplateArgumentType(CXCursor C, 03022 unsigned I); 03023 03024 /** 03025 * \brief Retrieve the value of an Integral TemplateArgument (of a function 03026 * decl representing a template specialization) as a signed long long. 03027 * 03028 * It is undefined to call this function on a CXCursor that does not represent a 03029 * FunctionDecl or whose I'th template argument is not an integral value. 03030 * 03031 * For example, for the following declaration and specialization: 03032 * template <typename T, int kInt, bool kBool> 03033 * void foo() { ... } 03034 * 03035 * template <> 03036 * void foo<float, -7, true>(); 03037 * 03038 * If called with I = 1 or 2, -7 or true will be returned, respectively. 03039 * For I == 0, this function's behavior is undefined. 03040 */ 03041 CINDEX_LINKAGE long long clang_Cursor_getTemplateArgumentValue(CXCursor C, 03042 unsigned I); 03043 03044 /** 03045 * \brief Retrieve the value of an Integral TemplateArgument (of a function 03046 * decl representing a template specialization) as an unsigned long long. 03047 * 03048 * It is undefined to call this function on a CXCursor that does not represent a 03049 * FunctionDecl or whose I'th template argument is not an integral value. 03050 * 03051 * For example, for the following declaration and specialization: 03052 * template <typename T, int kInt, bool kBool> 03053 * void foo() { ... } 03054 * 03055 * template <> 03056 * void foo<float, 2147483649, true>(); 03057 * 03058 * If called with I = 1 or 2, 2147483649 or true will be returned, respectively. 03059 * For I == 0, this function's behavior is undefined. 03060 */ 03061 CINDEX_LINKAGE unsigned long long clang_Cursor_getTemplateArgumentUnsignedValue( 03062 CXCursor C, unsigned I); 03063 03064 /** 03065 * \brief Determine whether two CXTypes represent the same type. 03066 * 03067 * \returns non-zero if the CXTypes represent the same type and 03068 * zero otherwise. 03069 */ 03070 CINDEX_LINKAGE unsigned clang_equalTypes(CXType A, CXType B); 03071 03072 /** 03073 * \brief Return the canonical type for a CXType. 03074 * 03075 * Clang's type system explicitly models typedefs and all the ways 03076 * a specific type can be represented. The canonical type is the underlying 03077 * type with all the "sugar" removed. For example, if 'T' is a typedef 03078 * for 'int', the canonical type for 'T' would be 'int'. 03079 */ 03080 CINDEX_LINKAGE CXType clang_getCanonicalType(CXType T); 03081 03082 /** 03083 * \brief Determine whether a CXType has the "const" qualifier set, 03084 * without looking through typedefs that may have added "const" at a 03085 * different level. 03086 */ 03087 CINDEX_LINKAGE unsigned clang_isConstQualifiedType(CXType T); 03088 03089 /** 03090 * \brief Determine whether a CXType has the "volatile" qualifier set, 03091 * without looking through typedefs that may have added "volatile" at 03092 * a different level. 03093 */ 03094 CINDEX_LINKAGE unsigned clang_isVolatileQualifiedType(CXType T); 03095 03096 /** 03097 * \brief Determine whether a CXType has the "restrict" qualifier set, 03098 * without looking through typedefs that may have added "restrict" at a 03099 * different level. 03100 */ 03101 CINDEX_LINKAGE unsigned clang_isRestrictQualifiedType(CXType T); 03102 03103 /** 03104 * \brief For pointer types, returns the type of the pointee. 03105 */ 03106 CINDEX_LINKAGE CXType clang_getPointeeType(CXType T); 03107 03108 /** 03109 * \brief Return the cursor for the declaration of the given type. 03110 */ 03111 CINDEX_LINKAGE CXCursor clang_getTypeDeclaration(CXType T); 03112 03113 /** 03114 * Returns the Objective-C type encoding for the specified declaration. 03115 */ 03116 CINDEX_LINKAGE CXString clang_getDeclObjCTypeEncoding(CXCursor C); 03117 03118 /** 03119 * \brief Retrieve the spelling of a given CXTypeKind. 03120 */ 03121 CINDEX_LINKAGE CXString clang_getTypeKindSpelling(enum CXTypeKind K); 03122 03123 /** 03124 * \brief Retrieve the calling convention associated with a function type. 03125 * 03126 * If a non-function type is passed in, CXCallingConv_Invalid is returned. 03127 */ 03128 CINDEX_LINKAGE enum CXCallingConv clang_getFunctionTypeCallingConv(CXType T); 03129 03130 /** 03131 * \brief Retrieve the return type associated with a function type. 03132 * 03133 * If a non-function type is passed in, an invalid type is returned. 03134 */ 03135 CINDEX_LINKAGE CXType clang_getResultType(CXType T); 03136 03137 /** 03138 * \brief Retrieve the number of non-variadic parameters associated with a 03139 * function type. 03140 * 03141 * If a non-function type is passed in, -1 is returned. 03142 */ 03143 CINDEX_LINKAGE int clang_getNumArgTypes(CXType T); 03144 03145 /** 03146 * \brief Retrieve the type of a parameter of a function type. 03147 * 03148 * If a non-function type is passed in or the function does not have enough 03149 * parameters, an invalid type is returned. 03150 */ 03151 CINDEX_LINKAGE CXType clang_getArgType(CXType T, unsigned i); 03152 03153 /** 03154 * \brief Return 1 if the CXType is a variadic function type, and 0 otherwise. 03155 */ 03156 CINDEX_LINKAGE unsigned clang_isFunctionTypeVariadic(CXType T); 03157 03158 /** 03159 * \brief Retrieve the return type associated with a given cursor. 03160 * 03161 * This only returns a valid type if the cursor refers to a function or method. 03162 */ 03163 CINDEX_LINKAGE CXType clang_getCursorResultType(CXCursor C); 03164 03165 /** 03166 * \brief Return 1 if the CXType is a POD (plain old data) type, and 0 03167 * otherwise. 03168 */ 03169 CINDEX_LINKAGE unsigned clang_isPODType(CXType T); 03170 03171 /** 03172 * \brief Return the element type of an array, complex, or vector type. 03173 * 03174 * If a type is passed in that is not an array, complex, or vector type, 03175 * an invalid type is returned. 03176 */ 03177 CINDEX_LINKAGE CXType clang_getElementType(CXType T); 03178 03179 /** 03180 * \brief Return the number of elements of an array or vector type. 03181 * 03182 * If a type is passed in that is not an array or vector type, 03183 * -1 is returned. 03184 */ 03185 CINDEX_LINKAGE long long clang_getNumElements(CXType T); 03186 03187 /** 03188 * \brief Return the element type of an array type. 03189 * 03190 * If a non-array type is passed in, an invalid type is returned. 03191 */ 03192 CINDEX_LINKAGE CXType clang_getArrayElementType(CXType T); 03193 03194 /** 03195 * \brief Return the array size of a constant array. 03196 * 03197 * If a non-array type is passed in, -1 is returned. 03198 */ 03199 CINDEX_LINKAGE long long clang_getArraySize(CXType T); 03200 03201 /** 03202 * \brief List the possible error codes for \c clang_Type_getSizeOf, 03203 * \c clang_Type_getAlignOf, \c clang_Type_getOffsetOf and 03204 * \c clang_Cursor_getOffsetOf. 03205 * 03206 * A value of this enumeration type can be returned if the target type is not 03207 * a valid argument to sizeof, alignof or offsetof. 03208 */ 03209 enum CXTypeLayoutError { 03210 /** 03211 * \brief Type is of kind CXType_Invalid. 03212 */ 03213 CXTypeLayoutError_Invalid = -1, 03214 /** 03215 * \brief The type is an incomplete Type. 03216 */ 03217 CXTypeLayoutError_Incomplete = -2, 03218 /** 03219 * \brief The type is a dependent Type. 03220 */ 03221 CXTypeLayoutError_Dependent = -3, 03222 /** 03223 * \brief The type is not a constant size type. 03224 */ 03225 CXTypeLayoutError_NotConstantSize = -4, 03226 /** 03227 * \brief The Field name is not valid for this record. 03228 */ 03229 CXTypeLayoutError_InvalidFieldName = -5 03230 }; 03231 03232 /** 03233 * \brief Return the alignment of a type in bytes as per C++[expr.alignof] 03234 * standard. 03235 * 03236 * If the type declaration is invalid, CXTypeLayoutError_Invalid is returned. 03237 * If the type declaration is an incomplete type, CXTypeLayoutError_Incomplete 03238 * is returned. 03239 * If the type declaration is a dependent type, CXTypeLayoutError_Dependent is 03240 * returned. 03241 * If the type declaration is not a constant size type, 03242 * CXTypeLayoutError_NotConstantSize is returned. 03243 */ 03244 CINDEX_LINKAGE long long clang_Type_getAlignOf(CXType T); 03245 03246 /** 03247 * \brief Return the class type of an member pointer type. 03248 * 03249 * If a non-member-pointer type is passed in, an invalid type is returned. 03250 */ 03251 CINDEX_LINKAGE CXType clang_Type_getClassType(CXType T); 03252 03253 /** 03254 * \brief Return the size of a type in bytes as per C++[expr.sizeof] standard. 03255 * 03256 * If the type declaration is invalid, CXTypeLayoutError_Invalid is returned. 03257 * If the type declaration is an incomplete type, CXTypeLayoutError_Incomplete 03258 * is returned. 03259 * If the type declaration is a dependent type, CXTypeLayoutError_Dependent is 03260 * returned. 03261 */ 03262 CINDEX_LINKAGE long long clang_Type_getSizeOf(CXType T); 03263 03264 /** 03265 * \brief Return the offset of a field named S in a record of type T in bits 03266 * as it would be returned by __offsetof__ as per C++11[18.2p4] 03267 * 03268 * If the cursor is not a record field declaration, CXTypeLayoutError_Invalid 03269 * is returned. 03270 * If the field's type declaration is an incomplete type, 03271 * CXTypeLayoutError_Incomplete is returned. 03272 * If the field's type declaration is a dependent type, 03273 * CXTypeLayoutError_Dependent is returned. 03274 * If the field's name S is not found, 03275 * CXTypeLayoutError_InvalidFieldName is returned. 03276 */ 03277 CINDEX_LINKAGE long long clang_Type_getOffsetOf(CXType T, const char *S); 03278 03279 enum CXRefQualifierKind { 03280 /** \brief No ref-qualifier was provided. */ 03281 CXRefQualifier_None = 0, 03282 /** \brief An lvalue ref-qualifier was provided (\c &). */ 03283 CXRefQualifier_LValue, 03284 /** \brief An rvalue ref-qualifier was provided (\c &&). */ 03285 CXRefQualifier_RValue 03286 }; 03287 03288 /** 03289 * \brief Returns the number of template arguments for given class template 03290 * specialization, or -1 if type \c T is not a class template specialization. 03291 * 03292 * Variadic argument packs count as only one argument, and can not be inspected 03293 * further. 03294 */ 03295 CINDEX_LINKAGE int clang_Type_getNumTemplateArguments(CXType T); 03296 03297 /** 03298 * \brief Returns the type template argument of a template class specialization 03299 * at given index. 03300 * 03301 * This function only returns template type arguments and does not handle 03302 * template template arguments or variadic packs. 03303 */ 03304 CINDEX_LINKAGE CXType clang_Type_getTemplateArgumentAsType(CXType T, unsigned i); 03305 03306 /** 03307 * \brief Retrieve the ref-qualifier kind of a function or method. 03308 * 03309 * The ref-qualifier is returned for C++ functions or methods. For other types 03310 * or non-C++ declarations, CXRefQualifier_None is returned. 03311 */ 03312 CINDEX_LINKAGE enum CXRefQualifierKind clang_Type_getCXXRefQualifier(CXType T); 03313 03314 /** 03315 * \brief Returns non-zero if the cursor specifies a Record member that is a 03316 * bitfield. 03317 */ 03318 CINDEX_LINKAGE unsigned clang_Cursor_isBitField(CXCursor C); 03319 03320 /** 03321 * \brief Returns 1 if the base class specified by the cursor with kind 03322 * CX_CXXBaseSpecifier is virtual. 03323 */ 03324 CINDEX_LINKAGE unsigned clang_isVirtualBase(CXCursor); 03325 03326 /** 03327 * \brief Represents the C++ access control level to a base class for a 03328 * cursor with kind CX_CXXBaseSpecifier. 03329 */ 03330 enum CX_CXXAccessSpecifier { 03331 CX_CXXInvalidAccessSpecifier, 03332 CX_CXXPublic, 03333 CX_CXXProtected, 03334 CX_CXXPrivate 03335 }; 03336 03337 /** 03338 * \brief Returns the access control level for the referenced object. 03339 * 03340 * If the cursor refers to a C++ declaration, its access control level within its 03341 * parent scope is returned. Otherwise, if the cursor refers to a base specifier or 03342 * access specifier, the specifier itself is returned. 03343 */ 03344 CINDEX_LINKAGE enum CX_CXXAccessSpecifier clang_getCXXAccessSpecifier(CXCursor); 03345 03346 /** 03347 * \brief Represents the storage classes as declared in the source. CX_SC_Invalid 03348 * was added for the clase that the passed cursor in not a declaration. 03349 */ 03350 enum CX_StorageClass { 03351 CX_SC_Invalid, 03352 CX_SC_None, 03353 CX_SC_Extern, 03354 CX_SC_Static, 03355 CX_SC_PrivateExtern, 03356 CX_SC_OpenCLWorkGroupLocal, 03357 CX_SC_Auto, 03358 CX_SC_Register 03359 }; 03360 03361 /** 03362 * \brief Returns the storage class for a function or variable declaration. 03363 * 03364 * If the passed in Cursor is not a function or variable declaration, 03365 * CX_SC_Invalid is returned else the storage class. 03366 */ 03367 CINDEX_LINKAGE enum CX_StorageClass clang_Cursor_getStorageClass(CXCursor); 03368 03369 /** 03370 * \brief Determine the number of overloaded declarations referenced by a 03371 * \c CXCursor_OverloadedDeclRef cursor. 03372 * 03373 * \param cursor The cursor whose overloaded declarations are being queried. 03374 * 03375 * \returns The number of overloaded declarations referenced by \c cursor. If it 03376 * is not a \c CXCursor_OverloadedDeclRef cursor, returns 0. 03377 */ 03378 CINDEX_LINKAGE unsigned clang_getNumOverloadedDecls(CXCursor cursor); 03379 03380 /** 03381 * \brief Retrieve a cursor for one of the overloaded declarations referenced 03382 * by a \c CXCursor_OverloadedDeclRef cursor. 03383 * 03384 * \param cursor The cursor whose overloaded declarations are being queried. 03385 * 03386 * \param index The zero-based index into the set of overloaded declarations in 03387 * the cursor. 03388 * 03389 * \returns A cursor representing the declaration referenced by the given 03390 * \c cursor at the specified \c index. If the cursor does not have an 03391 * associated set of overloaded declarations, or if the index is out of bounds, 03392 * returns \c clang_getNullCursor(); 03393 */ 03394 CINDEX_LINKAGE CXCursor clang_getOverloadedDecl(CXCursor cursor, 03395 unsigned index); 03396 03397 /** 03398 * @} 03399 */ 03400 03401 /** 03402 * \defgroup CINDEX_ATTRIBUTES Information for attributes 03403 * 03404 * @{ 03405 */ 03406 03407 03408 /** 03409 * \brief For cursors representing an iboutletcollection attribute, 03410 * this function returns the collection element type. 03411 * 03412 */ 03413 CINDEX_LINKAGE CXType clang_getIBOutletCollectionType(CXCursor); 03414 03415 /** 03416 * @} 03417 */ 03418 03419 /** 03420 * \defgroup CINDEX_CURSOR_TRAVERSAL Traversing the AST with cursors 03421 * 03422 * These routines provide the ability to traverse the abstract syntax tree 03423 * using cursors. 03424 * 03425 * @{ 03426 */ 03427 03428 /** 03429 * \brief Describes how the traversal of the children of a particular 03430 * cursor should proceed after visiting a particular child cursor. 03431 * 03432 * A value of this enumeration type should be returned by each 03433 * \c CXCursorVisitor to indicate how clang_visitChildren() proceed. 03434 */ 03435 enum CXChildVisitResult { 03436 /** 03437 * \brief Terminates the cursor traversal. 03438 */ 03439 CXChildVisit_Break, 03440 /** 03441 * \brief Continues the cursor traversal with the next sibling of 03442 * the cursor just visited, without visiting its children. 03443 */ 03444 CXChildVisit_Continue, 03445 /** 03446 * \brief Recursively traverse the children of this cursor, using 03447 * the same visitor and client data. 03448 */ 03449 CXChildVisit_Recurse 03450 }; 03451 03452 /** 03453 * \brief Visitor invoked for each cursor found by a traversal. 03454 * 03455 * This visitor function will be invoked for each cursor found by 03456 * clang_visitCursorChildren(). Its first argument is the cursor being 03457 * visited, its second argument is the parent visitor for that cursor, 03458 * and its third argument is the client data provided to 03459 * clang_visitCursorChildren(). 03460 * 03461 * The visitor should return one of the \c CXChildVisitResult values 03462 * to direct clang_visitCursorChildren(). 03463 */ 03464 typedef enum CXChildVisitResult (*CXCursorVisitor)(CXCursor cursor, 03465 CXCursor parent, 03466 CXClientData client_data); 03467 03468 /** 03469 * \brief Visit the children of a particular cursor. 03470 * 03471 * This function visits all the direct children of the given cursor, 03472 * invoking the given \p visitor function with the cursors of each 03473 * visited child. The traversal may be recursive, if the visitor returns 03474 * \c CXChildVisit_Recurse. The traversal may also be ended prematurely, if 03475 * the visitor returns \c CXChildVisit_Break. 03476 * 03477 * \param parent the cursor whose child may be visited. All kinds of 03478 * cursors can be visited, including invalid cursors (which, by 03479 * definition, have no children). 03480 * 03481 * \param visitor the visitor function that will be invoked for each 03482 * child of \p parent. 03483 * 03484 * \param client_data pointer data supplied by the client, which will 03485 * be passed to the visitor each time it is invoked. 03486 * 03487 * \returns a non-zero value if the traversal was terminated 03488 * prematurely by the visitor returning \c CXChildVisit_Break. 03489 */ 03490 CINDEX_LINKAGE unsigned clang_visitChildren(CXCursor parent, 03491 CXCursorVisitor visitor, 03492 CXClientData client_data); 03493 #ifdef __has_feature 03494 # if __has_feature(blocks) 03495 /** 03496 * \brief Visitor invoked for each cursor found by a traversal. 03497 * 03498 * This visitor block will be invoked for each cursor found by 03499 * clang_visitChildrenWithBlock(). Its first argument is the cursor being 03500 * visited, its second argument is the parent visitor for that cursor. 03501 * 03502 * The visitor should return one of the \c CXChildVisitResult values 03503 * to direct clang_visitChildrenWithBlock(). 03504 */ 03505 typedef enum CXChildVisitResult 03506 (^CXCursorVisitorBlock)(CXCursor cursor, CXCursor parent); 03507 03508 /** 03509 * Visits the children of a cursor using the specified block. Behaves 03510 * identically to clang_visitChildren() in all other respects. 03511 */ 03512 unsigned clang_visitChildrenWithBlock(CXCursor parent, 03513 CXCursorVisitorBlock block); 03514 # endif 03515 #endif 03516 03517 /** 03518 * @} 03519 */ 03520 03521 /** 03522 * \defgroup CINDEX_CURSOR_XREF Cross-referencing in the AST 03523 * 03524 * These routines provide the ability to determine references within and 03525 * across translation units, by providing the names of the entities referenced 03526 * by cursors, follow reference cursors to the declarations they reference, 03527 * and associate declarations with their definitions. 03528 * 03529 * @{ 03530 */ 03531 03532 /** 03533 * \brief Retrieve a Unified Symbol Resolution (USR) for the entity referenced 03534 * by the given cursor. 03535 * 03536 * A Unified Symbol Resolution (USR) is a string that identifies a particular 03537 * entity (function, class, variable, etc.) within a program. USRs can be 03538 * compared across translation units to determine, e.g., when references in 03539 * one translation refer to an entity defined in another translation unit. 03540 */ 03541 CINDEX_LINKAGE CXString clang_getCursorUSR(CXCursor); 03542 03543 /** 03544 * \brief Construct a USR for a specified Objective-C class. 03545 */ 03546 CINDEX_LINKAGE CXString clang_constructUSR_ObjCClass(const char *class_name); 03547 03548 /** 03549 * \brief Construct a USR for a specified Objective-C category. 03550 */ 03551 CINDEX_LINKAGE CXString 03552 clang_constructUSR_ObjCCategory(const char *class_name, 03553 const char *category_name); 03554 03555 /** 03556 * \brief Construct a USR for a specified Objective-C protocol. 03557 */ 03558 CINDEX_LINKAGE CXString 03559 clang_constructUSR_ObjCProtocol(const char *protocol_name); 03560 03561 03562 /** 03563 * \brief Construct a USR for a specified Objective-C instance variable and 03564 * the USR for its containing class. 03565 */ 03566 CINDEX_LINKAGE CXString clang_constructUSR_ObjCIvar(const char *name, 03567 CXString classUSR); 03568 03569 /** 03570 * \brief Construct a USR for a specified Objective-C method and 03571 * the USR for its containing class. 03572 */ 03573 CINDEX_LINKAGE CXString clang_constructUSR_ObjCMethod(const char *name, 03574 unsigned isInstanceMethod, 03575 CXString classUSR); 03576 03577 /** 03578 * \brief Construct a USR for a specified Objective-C property and the USR 03579 * for its containing class. 03580 */ 03581 CINDEX_LINKAGE CXString clang_constructUSR_ObjCProperty(const char *property, 03582 CXString classUSR); 03583 03584 /** 03585 * \brief Retrieve a name for the entity referenced by this cursor. 03586 */ 03587 CINDEX_LINKAGE CXString clang_getCursorSpelling(CXCursor); 03588 03589 /** 03590 * \brief Retrieve a range for a piece that forms the cursors spelling name. 03591 * Most of the times there is only one range for the complete spelling but for 03592 * Objective-C methods and Objective-C message expressions, there are multiple 03593 * pieces for each selector identifier. 03594 * 03595 * \param pieceIndex the index of the spelling name piece. If this is greater 03596 * than the actual number of pieces, it will return a NULL (invalid) range. 03597 * 03598 * \param options Reserved. 03599 */ 03600 CINDEX_LINKAGE CXSourceRange clang_Cursor_getSpellingNameRange(CXCursor, 03601 unsigned pieceIndex, 03602 unsigned options); 03603 03604 /** 03605 * \brief Retrieve the display name for the entity referenced by this cursor. 03606 * 03607 * The display name contains extra information that helps identify the cursor, 03608 * such as the parameters of a function or template or the arguments of a 03609 * class template specialization. 03610 */ 03611 CINDEX_LINKAGE CXString clang_getCursorDisplayName(CXCursor); 03612 03613 /** \brief For a cursor that is a reference, retrieve a cursor representing the 03614 * entity that it references. 03615 * 03616 * Reference cursors refer to other entities in the AST. For example, an 03617 * Objective-C superclass reference cursor refers to an Objective-C class. 03618 * This function produces the cursor for the Objective-C class from the 03619 * cursor for the superclass reference. If the input cursor is a declaration or 03620 * definition, it returns that declaration or definition unchanged. 03621 * Otherwise, returns the NULL cursor. 03622 */ 03623 CINDEX_LINKAGE CXCursor clang_getCursorReferenced(CXCursor); 03624 03625 /** 03626 * \brief For a cursor that is either a reference to or a declaration 03627 * of some entity, retrieve a cursor that describes the definition of 03628 * that entity. 03629 * 03630 * Some entities can be declared multiple times within a translation 03631 * unit, but only one of those declarations can also be a 03632 * definition. For example, given: 03633 * 03634 * \code 03635 * int f(int, int); 03636 * int g(int x, int y) { return f(x, y); } 03637 * int f(int a, int b) { return a + b; } 03638 * int f(int, int); 03639 * \endcode 03640 * 03641 * there are three declarations of the function "f", but only the 03642 * second one is a definition. The clang_getCursorDefinition() 03643 * function will take any cursor pointing to a declaration of "f" 03644 * (the first or fourth lines of the example) or a cursor referenced 03645 * that uses "f" (the call to "f' inside "g") and will return a 03646 * declaration cursor pointing to the definition (the second "f" 03647 * declaration). 03648 * 03649 * If given a cursor for which there is no corresponding definition, 03650 * e.g., because there is no definition of that entity within this 03651 * translation unit, returns a NULL cursor. 03652 */ 03653 CINDEX_LINKAGE CXCursor clang_getCursorDefinition(CXCursor); 03654 03655 /** 03656 * \brief Determine whether the declaration pointed to by this cursor 03657 * is also a definition of that entity. 03658 */ 03659 CINDEX_LINKAGE unsigned clang_isCursorDefinition(CXCursor); 03660 03661 /** 03662 * \brief Retrieve the canonical cursor corresponding to the given cursor. 03663 * 03664 * In the C family of languages, many kinds of entities can be declared several 03665 * times within a single translation unit. For example, a structure type can 03666 * be forward-declared (possibly multiple times) and later defined: 03667 * 03668 * \code 03669 * struct X; 03670 * struct X; 03671 * struct X { 03672 * int member; 03673 * }; 03674 * \endcode 03675 * 03676 * The declarations and the definition of \c X are represented by three 03677 * different cursors, all of which are declarations of the same underlying 03678 * entity. One of these cursor is considered the "canonical" cursor, which 03679 * is effectively the representative for the underlying entity. One can 03680 * determine if two cursors are declarations of the same underlying entity by 03681 * comparing their canonical cursors. 03682 * 03683 * \returns The canonical cursor for the entity referred to by the given cursor. 03684 */ 03685 CINDEX_LINKAGE CXCursor clang_getCanonicalCursor(CXCursor); 03686 03687 03688 /** 03689 * \brief If the cursor points to a selector identifier in an Objective-C 03690 * method or message expression, this returns the selector index. 03691 * 03692 * After getting a cursor with #clang_getCursor, this can be called to 03693 * determine if the location points to a selector identifier. 03694 * 03695 * \returns The selector index if the cursor is an Objective-C method or message 03696 * expression and the cursor is pointing to a selector identifier, or -1 03697 * otherwise. 03698 */ 03699 CINDEX_LINKAGE int clang_Cursor_getObjCSelectorIndex(CXCursor); 03700 03701 /** 03702 * \brief Given a cursor pointing to a C++ method call or an Objective-C 03703 * message, returns non-zero if the method/message is "dynamic", meaning: 03704 * 03705 * For a C++ method: the call is virtual. 03706 * For an Objective-C message: the receiver is an object instance, not 'super' 03707 * or a specific class. 03708 * 03709 * If the method/message is "static" or the cursor does not point to a 03710 * method/message, it will return zero. 03711 */ 03712 CINDEX_LINKAGE int clang_Cursor_isDynamicCall(CXCursor C); 03713 03714 /** 03715 * \brief Given a cursor pointing to an Objective-C message, returns the CXType 03716 * of the receiver. 03717 */ 03718 CINDEX_LINKAGE CXType clang_Cursor_getReceiverType(CXCursor C); 03719 03720 /** 03721 * \brief Property attributes for a \c CXCursor_ObjCPropertyDecl. 03722 */ 03723 typedef enum { 03724 CXObjCPropertyAttr_noattr = 0x00, 03725 CXObjCPropertyAttr_readonly = 0x01, 03726 CXObjCPropertyAttr_getter = 0x02, 03727 CXObjCPropertyAttr_assign = 0x04, 03728 CXObjCPropertyAttr_readwrite = 0x08, 03729 CXObjCPropertyAttr_retain = 0x10, 03730 CXObjCPropertyAttr_copy = 0x20, 03731 CXObjCPropertyAttr_nonatomic = 0x40, 03732 CXObjCPropertyAttr_setter = 0x80, 03733 CXObjCPropertyAttr_atomic = 0x100, 03734 CXObjCPropertyAttr_weak = 0x200, 03735 CXObjCPropertyAttr_strong = 0x400, 03736 CXObjCPropertyAttr_unsafe_unretained = 0x800 03737 } CXObjCPropertyAttrKind; 03738 03739 /** 03740 * \brief Given a cursor that represents a property declaration, return the 03741 * associated property attributes. The bits are formed from 03742 * \c CXObjCPropertyAttrKind. 03743 * 03744 * \param reserved Reserved for future use, pass 0. 03745 */ 03746 CINDEX_LINKAGE unsigned clang_Cursor_getObjCPropertyAttributes(CXCursor C, 03747 unsigned reserved); 03748 03749 /** 03750 * \brief 'Qualifiers' written next to the return and parameter types in 03751 * Objective-C method declarations. 03752 */ 03753 typedef enum { 03754 CXObjCDeclQualifier_None = 0x0, 03755 CXObjCDeclQualifier_In = 0x1, 03756 CXObjCDeclQualifier_Inout = 0x2, 03757 CXObjCDeclQualifier_Out = 0x4, 03758 CXObjCDeclQualifier_Bycopy = 0x8, 03759 CXObjCDeclQualifier_Byref = 0x10, 03760 CXObjCDeclQualifier_Oneway = 0x20 03761 } CXObjCDeclQualifierKind; 03762 03763 /** 03764 * \brief Given a cursor that represents an Objective-C method or parameter 03765 * declaration, return the associated Objective-C qualifiers for the return 03766 * type or the parameter respectively. The bits are formed from 03767 * CXObjCDeclQualifierKind. 03768 */ 03769 CINDEX_LINKAGE unsigned clang_Cursor_getObjCDeclQualifiers(CXCursor C); 03770 03771 /** 03772 * \brief Given a cursor that represents an Objective-C method or property 03773 * declaration, return non-zero if the declaration was affected by "@optional". 03774 * Returns zero if the cursor is not such a declaration or it is "@required". 03775 */ 03776 CINDEX_LINKAGE unsigned clang_Cursor_isObjCOptional(CXCursor C); 03777 03778 /** 03779 * \brief Returns non-zero if the given cursor is a variadic function or method. 03780 */ 03781 CINDEX_LINKAGE unsigned clang_Cursor_isVariadic(CXCursor C); 03782 03783 /** 03784 * \brief Given a cursor that represents a declaration, return the associated 03785 * comment's source range. The range may include multiple consecutive comments 03786 * with whitespace in between. 03787 */ 03788 CINDEX_LINKAGE CXSourceRange clang_Cursor_getCommentRange(CXCursor C); 03789 03790 /** 03791 * \brief Given a cursor that represents a declaration, return the associated 03792 * comment text, including comment markers. 03793 */ 03794 CINDEX_LINKAGE CXString clang_Cursor_getRawCommentText(CXCursor C); 03795 03796 /** 03797 * \brief Given a cursor that represents a documentable entity (e.g., 03798 * declaration), return the associated \\brief paragraph; otherwise return the 03799 * first paragraph. 03800 */ 03801 CINDEX_LINKAGE CXString clang_Cursor_getBriefCommentText(CXCursor C); 03802 03803 /** 03804 * @} 03805 */ 03806 03807 /** \defgroup CINDEX_MANGLE Name Mangling API Functions 03808 * 03809 * @{ 03810 */ 03811 03812 /** 03813 * \brief Retrieve the CXString representing the mangled name of the cursor. 03814 */ 03815 CINDEX_LINKAGE CXString clang_Cursor_getMangling(CXCursor); 03816 03817 /** 03818 * @} 03819 */ 03820 03821 /** 03822 * \defgroup CINDEX_MODULE Module introspection 03823 * 03824 * The functions in this group provide access to information about modules. 03825 * 03826 * @{ 03827 */ 03828 03829 typedef void *CXModule; 03830 03831 /** 03832 * \brief Given a CXCursor_ModuleImportDecl cursor, return the associated module. 03833 */ 03834 CINDEX_LINKAGE CXModule clang_Cursor_getModule(CXCursor C); 03835 03836 /** 03837 * \brief Given a CXFile header file, return the module that contains it, if one 03838 * exists. 03839 */ 03840 CINDEX_LINKAGE CXModule clang_getModuleForFile(CXTranslationUnit, CXFile); 03841 03842 /** 03843 * \param Module a module object. 03844 * 03845 * \returns the module file where the provided module object came from. 03846 */ 03847 CINDEX_LINKAGE CXFile clang_Module_getASTFile(CXModule Module); 03848 03849 /** 03850 * \param Module a module object. 03851 * 03852 * \returns the parent of a sub-module or NULL if the given module is top-level, 03853 * e.g. for 'std.vector' it will return the 'std' module. 03854 */ 03855 CINDEX_LINKAGE CXModule clang_Module_getParent(CXModule Module); 03856 03857 /** 03858 * \param Module a module object. 03859 * 03860 * \returns the name of the module, e.g. for the 'std.vector' sub-module it 03861 * will return "vector". 03862 */ 03863 CINDEX_LINKAGE CXString clang_Module_getName(CXModule Module); 03864 03865 /** 03866 * \param Module a module object. 03867 * 03868 * \returns the full name of the module, e.g. "std.vector". 03869 */ 03870 CINDEX_LINKAGE CXString clang_Module_getFullName(CXModule Module); 03871 03872 /** 03873 * \param Module a module object. 03874 * 03875 * \returns non-zero if the module is a system one. 03876 */ 03877 CINDEX_LINKAGE int clang_Module_isSystem(CXModule Module); 03878 03879 /** 03880 * \param Module a module object. 03881 * 03882 * \returns the number of top level headers associated with this module. 03883 */ 03884 CINDEX_LINKAGE unsigned clang_Module_getNumTopLevelHeaders(CXTranslationUnit, 03885 CXModule Module); 03886 03887 /** 03888 * \param Module a module object. 03889 * 03890 * \param Index top level header index (zero-based). 03891 * 03892 * \returns the specified top level header associated with the module. 03893 */ 03894 CINDEX_LINKAGE 03895 CXFile clang_Module_getTopLevelHeader(CXTranslationUnit, 03896 CXModule Module, unsigned Index); 03897 03898 /** 03899 * @} 03900 */ 03901 03902 /** 03903 * \defgroup CINDEX_CPP C++ AST introspection 03904 * 03905 * The routines in this group provide access information in the ASTs specific 03906 * to C++ language features. 03907 * 03908 * @{ 03909 */ 03910 03911 /** 03912 * \brief Determine if a C++ member function or member function template is 03913 * pure virtual. 03914 */ 03915 CINDEX_LINKAGE unsigned clang_CXXMethod_isPureVirtual(CXCursor C); 03916 03917 /** 03918 * \brief Determine if a C++ member function or member function template is 03919 * declared 'static'. 03920 */ 03921 CINDEX_LINKAGE unsigned clang_CXXMethod_isStatic(CXCursor C); 03922 03923 /** 03924 * \brief Determine if a C++ member function or member function template is 03925 * explicitly declared 'virtual' or if it overrides a virtual method from 03926 * one of the base classes. 03927 */ 03928 CINDEX_LINKAGE unsigned clang_CXXMethod_isVirtual(CXCursor C); 03929 03930 /** 03931 * \brief Determine if a C++ member function or member function template is 03932 * declared 'const'. 03933 */ 03934 CINDEX_LINKAGE unsigned clang_CXXMethod_isConst(CXCursor C); 03935 03936 /** 03937 * \brief Given a cursor that represents a template, determine 03938 * the cursor kind of the specializations would be generated by instantiating 03939 * the template. 03940 * 03941 * This routine can be used to determine what flavor of function template, 03942 * class template, or class template partial specialization is stored in the 03943 * cursor. For example, it can describe whether a class template cursor is 03944 * declared with "struct", "class" or "union". 03945 * 03946 * \param C The cursor to query. This cursor should represent a template 03947 * declaration. 03948 * 03949 * \returns The cursor kind of the specializations that would be generated 03950 * by instantiating the template \p C. If \p C is not a template, returns 03951 * \c CXCursor_NoDeclFound. 03952 */ 03953 CINDEX_LINKAGE enum CXCursorKind clang_getTemplateCursorKind(CXCursor C); 03954 03955 /** 03956 * \brief Given a cursor that may represent a specialization or instantiation 03957 * of a template, retrieve the cursor that represents the template that it 03958 * specializes or from which it was instantiated. 03959 * 03960 * This routine determines the template involved both for explicit 03961 * specializations of templates and for implicit instantiations of the template, 03962 * both of which are referred to as "specializations". For a class template 03963 * specialization (e.g., \c std::vector<bool>), this routine will return 03964 * either the primary template (\c std::vector) or, if the specialization was 03965 * instantiated from a class template partial specialization, the class template 03966 * partial specialization. For a class template partial specialization and a 03967 * function template specialization (including instantiations), this 03968 * this routine will return the specialized template. 03969 * 03970 * For members of a class template (e.g., member functions, member classes, or 03971 * static data members), returns the specialized or instantiated member. 03972 * Although not strictly "templates" in the C++ language, members of class 03973 * templates have the same notions of specializations and instantiations that 03974 * templates do, so this routine treats them similarly. 03975 * 03976 * \param C A cursor that may be a specialization of a template or a member 03977 * of a template. 03978 * 03979 * \returns If the given cursor is a specialization or instantiation of a 03980 * template or a member thereof, the template or member that it specializes or 03981 * from which it was instantiated. Otherwise, returns a NULL cursor. 03982 */ 03983 CINDEX_LINKAGE CXCursor clang_getSpecializedCursorTemplate(CXCursor C); 03984 03985 /** 03986 * \brief Given a cursor that references something else, return the source range 03987 * covering that reference. 03988 * 03989 * \param C A cursor pointing to a member reference, a declaration reference, or 03990 * an operator call. 03991 * \param NameFlags A bitset with three independent flags: 03992 * CXNameRange_WantQualifier, CXNameRange_WantTemplateArgs, and 03993 * CXNameRange_WantSinglePiece. 03994 * \param PieceIndex For contiguous names or when passing the flag 03995 * CXNameRange_WantSinglePiece, only one piece with index 0 is 03996 * available. When the CXNameRange_WantSinglePiece flag is not passed for a 03997 * non-contiguous names, this index can be used to retrieve the individual 03998 * pieces of the name. See also CXNameRange_WantSinglePiece. 03999 * 04000 * \returns The piece of the name pointed to by the given cursor. If there is no 04001 * name, or if the PieceIndex is out-of-range, a null-cursor will be returned. 04002 */ 04003 CINDEX_LINKAGE CXSourceRange clang_getCursorReferenceNameRange(CXCursor C, 04004 unsigned NameFlags, 04005 unsigned PieceIndex); 04006 04007 enum CXNameRefFlags { 04008 /** 04009 * \brief Include the nested-name-specifier, e.g. Foo:: in x.Foo::y, in the 04010 * range. 04011 */ 04012 CXNameRange_WantQualifier = 0x1, 04013 04014 /** 04015 * \brief Include the explicit template arguments, e.g. <int> in x.f<int>, 04016 * in the range. 04017 */ 04018 CXNameRange_WantTemplateArgs = 0x2, 04019 04020 /** 04021 * \brief If the name is non-contiguous, return the full spanning range. 04022 * 04023 * Non-contiguous names occur in Objective-C when a selector with two or more 04024 * parameters is used, or in C++ when using an operator: 04025 * \code 04026 * [object doSomething:here withValue:there]; // Objective-C 04027 * return some_vector[1]; // C++ 04028 * \endcode 04029 */ 04030 CXNameRange_WantSinglePiece = 0x4 04031 }; 04032 04033 /** 04034 * @} 04035 */ 04036 04037 /** 04038 * \defgroup CINDEX_LEX Token extraction and manipulation 04039 * 04040 * The routines in this group provide access to the tokens within a 04041 * translation unit, along with a semantic mapping of those tokens to 04042 * their corresponding cursors. 04043 * 04044 * @{ 04045 */ 04046 04047 /** 04048 * \brief Describes a kind of token. 04049 */ 04050 typedef enum CXTokenKind { 04051 /** 04052 * \brief A token that contains some kind of punctuation. 04053 */ 04054 CXToken_Punctuation, 04055 04056 /** 04057 * \brief A language keyword. 04058 */ 04059 CXToken_Keyword, 04060 04061 /** 04062 * \brief An identifier (that is not a keyword). 04063 */ 04064 CXToken_Identifier, 04065 04066 /** 04067 * \brief A numeric, string, or character literal. 04068 */ 04069 CXToken_Literal, 04070 04071 /** 04072 * \brief A comment. 04073 */ 04074 CXToken_Comment 04075 } CXTokenKind; 04076 04077 /** 04078 * \brief Describes a single preprocessing token. 04079 */ 04080 typedef struct { 04081 unsigned int_data[4]; 04082 void *ptr_data; 04083 } CXToken; 04084 04085 /** 04086 * \brief Determine the kind of the given token. 04087 */ 04088 CINDEX_LINKAGE CXTokenKind clang_getTokenKind(CXToken); 04089 04090 /** 04091 * \brief Determine the spelling of the given token. 04092 * 04093 * The spelling of a token is the textual representation of that token, e.g., 04094 * the text of an identifier or keyword. 04095 */ 04096 CINDEX_LINKAGE CXString clang_getTokenSpelling(CXTranslationUnit, CXToken); 04097 04098 /** 04099 * \brief Retrieve the source location of the given token. 04100 */ 04101 CINDEX_LINKAGE CXSourceLocation clang_getTokenLocation(CXTranslationUnit, 04102 CXToken); 04103 04104 /** 04105 * \brief Retrieve a source range that covers the given token. 04106 */ 04107 CINDEX_LINKAGE CXSourceRange clang_getTokenExtent(CXTranslationUnit, CXToken); 04108 04109 /** 04110 * \brief Tokenize the source code described by the given range into raw 04111 * lexical tokens. 04112 * 04113 * \param TU the translation unit whose text is being tokenized. 04114 * 04115 * \param Range the source range in which text should be tokenized. All of the 04116 * tokens produced by tokenization will fall within this source range, 04117 * 04118 * \param Tokens this pointer will be set to point to the array of tokens 04119 * that occur within the given source range. The returned pointer must be 04120 * freed with clang_disposeTokens() before the translation unit is destroyed. 04121 * 04122 * \param NumTokens will be set to the number of tokens in the \c *Tokens 04123 * array. 04124 * 04125 */ 04126 CINDEX_LINKAGE void clang_tokenize(CXTranslationUnit TU, CXSourceRange Range, 04127 CXToken **Tokens, unsigned *NumTokens); 04128 04129 /** 04130 * \brief Annotate the given set of tokens by providing cursors for each token 04131 * that can be mapped to a specific entity within the abstract syntax tree. 04132 * 04133 * This token-annotation routine is equivalent to invoking 04134 * clang_getCursor() for the source locations of each of the 04135 * tokens. The cursors provided are filtered, so that only those 04136 * cursors that have a direct correspondence to the token are 04137 * accepted. For example, given a function call \c f(x), 04138 * clang_getCursor() would provide the following cursors: 04139 * 04140 * * when the cursor is over the 'f', a DeclRefExpr cursor referring to 'f'. 04141 * * when the cursor is over the '(' or the ')', a CallExpr referring to 'f'. 04142 * * when the cursor is over the 'x', a DeclRefExpr cursor referring to 'x'. 04143 * 04144 * Only the first and last of these cursors will occur within the 04145 * annotate, since the tokens "f" and "x' directly refer to a function 04146 * and a variable, respectively, but the parentheses are just a small 04147 * part of the full syntax of the function call expression, which is 04148 * not provided as an annotation. 04149 * 04150 * \param TU the translation unit that owns the given tokens. 04151 * 04152 * \param Tokens the set of tokens to annotate. 04153 * 04154 * \param NumTokens the number of tokens in \p Tokens. 04155 * 04156 * \param Cursors an array of \p NumTokens cursors, whose contents will be 04157 * replaced with the cursors corresponding to each token. 04158 */ 04159 CINDEX_LINKAGE void clang_annotateTokens(CXTranslationUnit TU, 04160 CXToken *Tokens, unsigned NumTokens, 04161 CXCursor *Cursors); 04162 04163 /** 04164 * \brief Free the given set of tokens. 04165 */ 04166 CINDEX_LINKAGE void clang_disposeTokens(CXTranslationUnit TU, 04167 CXToken *Tokens, unsigned NumTokens); 04168 04169 /** 04170 * @} 04171 */ 04172 04173 /** 04174 * \defgroup CINDEX_DEBUG Debugging facilities 04175 * 04176 * These routines are used for testing and debugging, only, and should not 04177 * be relied upon. 04178 * 04179 * @{ 04180 */ 04181 04182 /* for debug/testing */ 04183 CINDEX_LINKAGE CXString clang_getCursorKindSpelling(enum CXCursorKind Kind); 04184 CINDEX_LINKAGE void clang_getDefinitionSpellingAndExtent(CXCursor, 04185 const char **startBuf, 04186 const char **endBuf, 04187 unsigned *startLine, 04188 unsigned *startColumn, 04189 unsigned *endLine, 04190 unsigned *endColumn); 04191 CINDEX_LINKAGE void clang_enableStackTraces(void); 04192 CINDEX_LINKAGE void clang_executeOnThread(void (*fn)(void*), void *user_data, 04193 unsigned stack_size); 04194 04195 /** 04196 * @} 04197 */ 04198 04199 /** 04200 * \defgroup CINDEX_CODE_COMPLET Code completion 04201 * 04202 * Code completion involves taking an (incomplete) source file, along with 04203 * knowledge of where the user is actively editing that file, and suggesting 04204 * syntactically- and semantically-valid constructs that the user might want to 04205 * use at that particular point in the source code. These data structures and 04206 * routines provide support for code completion. 04207 * 04208 * @{ 04209 */ 04210 04211 /** 04212 * \brief A semantic string that describes a code-completion result. 04213 * 04214 * A semantic string that describes the formatting of a code-completion 04215 * result as a single "template" of text that should be inserted into the 04216 * source buffer when a particular code-completion result is selected. 04217 * Each semantic string is made up of some number of "chunks", each of which 04218 * contains some text along with a description of what that text means, e.g., 04219 * the name of the entity being referenced, whether the text chunk is part of 04220 * the template, or whether it is a "placeholder" that the user should replace 04221 * with actual code,of a specific kind. See \c CXCompletionChunkKind for a 04222 * description of the different kinds of chunks. 04223 */ 04224 typedef void *CXCompletionString; 04225 04226 /** 04227 * \brief A single result of code completion. 04228 */ 04229 typedef struct { 04230 /** 04231 * \brief The kind of entity that this completion refers to. 04232 * 04233 * The cursor kind will be a macro, keyword, or a declaration (one of the 04234 * *Decl cursor kinds), describing the entity that the completion is 04235 * referring to. 04236 * 04237 * \todo In the future, we would like to provide a full cursor, to allow 04238 * the client to extract additional information from declaration. 04239 */ 04240 enum CXCursorKind CursorKind; 04241 04242 /** 04243 * \brief The code-completion string that describes how to insert this 04244 * code-completion result into the editing buffer. 04245 */ 04246 CXCompletionString CompletionString; 04247 } CXCompletionResult; 04248 04249 /** 04250 * \brief Describes a single piece of text within a code-completion string. 04251 * 04252 * Each "chunk" within a code-completion string (\c CXCompletionString) is 04253 * either a piece of text with a specific "kind" that describes how that text 04254 * should be interpreted by the client or is another completion string. 04255 */ 04256 enum CXCompletionChunkKind { 04257 /** 04258 * \brief A code-completion string that describes "optional" text that 04259 * could be a part of the template (but is not required). 04260 * 04261 * The Optional chunk is the only kind of chunk that has a code-completion 04262 * string for its representation, which is accessible via 04263 * \c clang_getCompletionChunkCompletionString(). The code-completion string 04264 * describes an additional part of the template that is completely optional. 04265 * For example, optional chunks can be used to describe the placeholders for 04266 * arguments that match up with defaulted function parameters, e.g. given: 04267 * 04268 * \code 04269 * void f(int x, float y = 3.14, double z = 2.71828); 04270 * \endcode 04271 * 04272 * The code-completion string for this function would contain: 04273 * - a TypedText chunk for "f". 04274 * - a LeftParen chunk for "(". 04275 * - a Placeholder chunk for "int x" 04276 * - an Optional chunk containing the remaining defaulted arguments, e.g., 04277 * - a Comma chunk for "," 04278 * - a Placeholder chunk for "float y" 04279 * - an Optional chunk containing the last defaulted argument: 04280 * - a Comma chunk for "," 04281 * - a Placeholder chunk for "double z" 04282 * - a RightParen chunk for ")" 04283 * 04284 * There are many ways to handle Optional chunks. Two simple approaches are: 04285 * - Completely ignore optional chunks, in which case the template for the 04286 * function "f" would only include the first parameter ("int x"). 04287 * - Fully expand all optional chunks, in which case the template for the 04288 * function "f" would have all of the parameters. 04289 */ 04290 CXCompletionChunk_Optional, 04291 /** 04292 * \brief Text that a user would be expected to type to get this 04293 * code-completion result. 04294 * 04295 * There will be exactly one "typed text" chunk in a semantic string, which 04296 * will typically provide the spelling of a keyword or the name of a 04297 * declaration that could be used at the current code point. Clients are 04298 * expected to filter the code-completion results based on the text in this 04299 * chunk. 04300 */ 04301 CXCompletionChunk_TypedText, 04302 /** 04303 * \brief Text that should be inserted as part of a code-completion result. 04304 * 04305 * A "text" chunk represents text that is part of the template to be 04306 * inserted into user code should this particular code-completion result 04307 * be selected. 04308 */ 04309 CXCompletionChunk_Text, 04310 /** 04311 * \brief Placeholder text that should be replaced by the user. 04312 * 04313 * A "placeholder" chunk marks a place where the user should insert text 04314 * into the code-completion template. For example, placeholders might mark 04315 * the function parameters for a function declaration, to indicate that the 04316 * user should provide arguments for each of those parameters. The actual 04317 * text in a placeholder is a suggestion for the text to display before 04318 * the user replaces the placeholder with real code. 04319 */ 04320 CXCompletionChunk_Placeholder, 04321 /** 04322 * \brief Informative text that should be displayed but never inserted as 04323 * part of the template. 04324 * 04325 * An "informative" chunk contains annotations that can be displayed to 04326 * help the user decide whether a particular code-completion result is the 04327 * right option, but which is not part of the actual template to be inserted 04328 * by code completion. 04329 */ 04330 CXCompletionChunk_Informative, 04331 /** 04332 * \brief Text that describes the current parameter when code-completion is 04333 * referring to function call, message send, or template specialization. 04334 * 04335 * A "current parameter" chunk occurs when code-completion is providing 04336 * information about a parameter corresponding to the argument at the 04337 * code-completion point. For example, given a function 04338 * 04339 * \code 04340 * int add(int x, int y); 04341 * \endcode 04342 * 04343 * and the source code \c add(, where the code-completion point is after the 04344 * "(", the code-completion string will contain a "current parameter" chunk 04345 * for "int x", indicating that the current argument will initialize that 04346 * parameter. After typing further, to \c add(17, (where the code-completion 04347 * point is after the ","), the code-completion string will contain a 04348 * "current paremeter" chunk to "int y". 04349 */ 04350 CXCompletionChunk_CurrentParameter, 04351 /** 04352 * \brief A left parenthesis ('('), used to initiate a function call or 04353 * signal the beginning of a function parameter list. 04354 */ 04355 CXCompletionChunk_LeftParen, 04356 /** 04357 * \brief A right parenthesis (')'), used to finish a function call or 04358 * signal the end of a function parameter list. 04359 */ 04360 CXCompletionChunk_RightParen, 04361 /** 04362 * \brief A left bracket ('['). 04363 */ 04364 CXCompletionChunk_LeftBracket, 04365 /** 04366 * \brief A right bracket (']'). 04367 */ 04368 CXCompletionChunk_RightBracket, 04369 /** 04370 * \brief A left brace ('{'). 04371 */ 04372 CXCompletionChunk_LeftBrace, 04373 /** 04374 * \brief A right brace ('}'). 04375 */ 04376 CXCompletionChunk_RightBrace, 04377 /** 04378 * \brief A left angle bracket ('<'). 04379 */ 04380 CXCompletionChunk_LeftAngle, 04381 /** 04382 * \brief A right angle bracket ('>'). 04383 */ 04384 CXCompletionChunk_RightAngle, 04385 /** 04386 * \brief A comma separator (','). 04387 */ 04388 CXCompletionChunk_Comma, 04389 /** 04390 * \brief Text that specifies the result type of a given result. 04391 * 04392 * This special kind of informative chunk is not meant to be inserted into 04393 * the text buffer. Rather, it is meant to illustrate the type that an 04394 * expression using the given completion string would have. 04395 */ 04396 CXCompletionChunk_ResultType, 04397 /** 04398 * \brief A colon (':'). 04399 */ 04400 CXCompletionChunk_Colon, 04401 /** 04402 * \brief A semicolon (';'). 04403 */ 04404 CXCompletionChunk_SemiColon, 04405 /** 04406 * \brief An '=' sign. 04407 */ 04408 CXCompletionChunk_Equal, 04409 /** 04410 * Horizontal space (' '). 04411 */ 04412 CXCompletionChunk_HorizontalSpace, 04413 /** 04414 * Vertical space ('\n'), after which it is generally a good idea to 04415 * perform indentation. 04416 */ 04417 CXCompletionChunk_VerticalSpace 04418 }; 04419 04420 /** 04421 * \brief Determine the kind of a particular chunk within a completion string. 04422 * 04423 * \param completion_string the completion string to query. 04424 * 04425 * \param chunk_number the 0-based index of the chunk in the completion string. 04426 * 04427 * \returns the kind of the chunk at the index \c chunk_number. 04428 */ 04429 CINDEX_LINKAGE enum CXCompletionChunkKind 04430 clang_getCompletionChunkKind(CXCompletionString completion_string, 04431 unsigned chunk_number); 04432 04433 /** 04434 * \brief Retrieve the text associated with a particular chunk within a 04435 * completion string. 04436 * 04437 * \param completion_string the completion string to query. 04438 * 04439 * \param chunk_number the 0-based index of the chunk in the completion string. 04440 * 04441 * \returns the text associated with the chunk at index \c chunk_number. 04442 */ 04443 CINDEX_LINKAGE CXString 04444 clang_getCompletionChunkText(CXCompletionString completion_string, 04445 unsigned chunk_number); 04446 04447 /** 04448 * \brief Retrieve the completion string associated with a particular chunk 04449 * within a completion string. 04450 * 04451 * \param completion_string the completion string to query. 04452 * 04453 * \param chunk_number the 0-based index of the chunk in the completion string. 04454 * 04455 * \returns the completion string associated with the chunk at index 04456 * \c chunk_number. 04457 */ 04458 CINDEX_LINKAGE CXCompletionString 04459 clang_getCompletionChunkCompletionString(CXCompletionString completion_string, 04460 unsigned chunk_number); 04461 04462 /** 04463 * \brief Retrieve the number of chunks in the given code-completion string. 04464 */ 04465 CINDEX_LINKAGE unsigned 04466 clang_getNumCompletionChunks(CXCompletionString completion_string); 04467 04468 /** 04469 * \brief Determine the priority of this code completion. 04470 * 04471 * The priority of a code completion indicates how likely it is that this 04472 * particular completion is the completion that the user will select. The 04473 * priority is selected by various internal heuristics. 04474 * 04475 * \param completion_string The completion string to query. 04476 * 04477 * \returns The priority of this completion string. Smaller values indicate 04478 * higher-priority (more likely) completions. 04479 */ 04480 CINDEX_LINKAGE unsigned 04481 clang_getCompletionPriority(CXCompletionString completion_string); 04482 04483 /** 04484 * \brief Determine the availability of the entity that this code-completion 04485 * string refers to. 04486 * 04487 * \param completion_string The completion string to query. 04488 * 04489 * \returns The availability of the completion string. 04490 */ 04491 CINDEX_LINKAGE enum CXAvailabilityKind 04492 clang_getCompletionAvailability(CXCompletionString completion_string); 04493 04494 /** 04495 * \brief Retrieve the number of annotations associated with the given 04496 * completion string. 04497 * 04498 * \param completion_string the completion string to query. 04499 * 04500 * \returns the number of annotations associated with the given completion 04501 * string. 04502 */ 04503 CINDEX_LINKAGE unsigned 04504 clang_getCompletionNumAnnotations(CXCompletionString completion_string); 04505 04506 /** 04507 * \brief Retrieve the annotation associated with the given completion string. 04508 * 04509 * \param completion_string the completion string to query. 04510 * 04511 * \param annotation_number the 0-based index of the annotation of the 04512 * completion string. 04513 * 04514 * \returns annotation string associated with the completion at index 04515 * \c annotation_number, or a NULL string if that annotation is not available. 04516 */ 04517 CINDEX_LINKAGE CXString 04518 clang_getCompletionAnnotation(CXCompletionString completion_string, 04519 unsigned annotation_number); 04520 04521 /** 04522 * \brief Retrieve the parent context of the given completion string. 04523 * 04524 * The parent context of a completion string is the semantic parent of 04525 * the declaration (if any) that the code completion represents. For example, 04526 * a code completion for an Objective-C method would have the method's class 04527 * or protocol as its context. 04528 * 04529 * \param completion_string The code completion string whose parent is 04530 * being queried. 04531 * 04532 * \param kind DEPRECATED: always set to CXCursor_NotImplemented if non-NULL. 04533 * 04534 * \returns The name of the completion parent, e.g., "NSObject" if 04535 * the completion string represents a method in the NSObject class. 04536 */ 04537 CINDEX_LINKAGE CXString 04538 clang_getCompletionParent(CXCompletionString completion_string, 04539 enum CXCursorKind *kind); 04540 04541 /** 04542 * \brief Retrieve the brief documentation comment attached to the declaration 04543 * that corresponds to the given completion string. 04544 */ 04545 CINDEX_LINKAGE CXString 04546 clang_getCompletionBriefComment(CXCompletionString completion_string); 04547 04548 /** 04549 * \brief Retrieve a completion string for an arbitrary declaration or macro 04550 * definition cursor. 04551 * 04552 * \param cursor The cursor to query. 04553 * 04554 * \returns A non-context-sensitive completion string for declaration and macro 04555 * definition cursors, or NULL for other kinds of cursors. 04556 */ 04557 CINDEX_LINKAGE CXCompletionString 04558 clang_getCursorCompletionString(CXCursor cursor); 04559 04560 /** 04561 * \brief Contains the results of code-completion. 04562 * 04563 * This data structure contains the results of code completion, as 04564 * produced by \c clang_codeCompleteAt(). Its contents must be freed by 04565 * \c clang_disposeCodeCompleteResults. 04566 */ 04567 typedef struct { 04568 /** 04569 * \brief The code-completion results. 04570 */ 04571 CXCompletionResult *Results; 04572 04573 /** 04574 * \brief The number of code-completion results stored in the 04575 * \c Results array. 04576 */ 04577 unsigned NumResults; 04578 } CXCodeCompleteResults; 04579 04580 /** 04581 * \brief Flags that can be passed to \c clang_codeCompleteAt() to 04582 * modify its behavior. 04583 * 04584 * The enumerators in this enumeration can be bitwise-OR'd together to 04585 * provide multiple options to \c clang_codeCompleteAt(). 04586 */ 04587 enum CXCodeComplete_Flags { 04588 /** 04589 * \brief Whether to include macros within the set of code 04590 * completions returned. 04591 */ 04592 CXCodeComplete_IncludeMacros = 0x01, 04593 04594 /** 04595 * \brief Whether to include code patterns for language constructs 04596 * within the set of code completions, e.g., for loops. 04597 */ 04598 CXCodeComplete_IncludeCodePatterns = 0x02, 04599 04600 /** 04601 * \brief Whether to include brief documentation within the set of code 04602 * completions returned. 04603 */ 04604 CXCodeComplete_IncludeBriefComments = 0x04 04605 }; 04606 04607 /** 04608 * \brief Bits that represent the context under which completion is occurring. 04609 * 04610 * The enumerators in this enumeration may be bitwise-OR'd together if multiple 04611 * contexts are occurring simultaneously. 04612 */ 04613 enum CXCompletionContext { 04614 /** 04615 * \brief The context for completions is unexposed, as only Clang results 04616 * should be included. (This is equivalent to having no context bits set.) 04617 */ 04618 CXCompletionContext_Unexposed = 0, 04619 04620 /** 04621 * \brief Completions for any possible type should be included in the results. 04622 */ 04623 CXCompletionContext_AnyType = 1 << 0, 04624 04625 /** 04626 * \brief Completions for any possible value (variables, function calls, etc.) 04627 * should be included in the results. 04628 */ 04629 CXCompletionContext_AnyValue = 1 << 1, 04630 /** 04631 * \brief Completions for values that resolve to an Objective-C object should 04632 * be included in the results. 04633 */ 04634 CXCompletionContext_ObjCObjectValue = 1 << 2, 04635 /** 04636 * \brief Completions for values that resolve to an Objective-C selector 04637 * should be included in the results. 04638 */ 04639 CXCompletionContext_ObjCSelectorValue = 1 << 3, 04640 /** 04641 * \brief Completions for values that resolve to a C++ class type should be 04642 * included in the results. 04643 */ 04644 CXCompletionContext_CXXClassTypeValue = 1 << 4, 04645 04646 /** 04647 * \brief Completions for fields of the member being accessed using the dot 04648 * operator should be included in the results. 04649 */ 04650 CXCompletionContext_DotMemberAccess = 1 << 5, 04651 /** 04652 * \brief Completions for fields of the member being accessed using the arrow 04653 * operator should be included in the results. 04654 */ 04655 CXCompletionContext_ArrowMemberAccess = 1 << 6, 04656 /** 04657 * \brief Completions for properties of the Objective-C object being accessed 04658 * using the dot operator should be included in the results. 04659 */ 04660 CXCompletionContext_ObjCPropertyAccess = 1 << 7, 04661 04662 /** 04663 * \brief Completions for enum tags should be included in the results. 04664 */ 04665 CXCompletionContext_EnumTag = 1 << 8, 04666 /** 04667 * \brief Completions for union tags should be included in the results. 04668 */ 04669 CXCompletionContext_UnionTag = 1 << 9, 04670 /** 04671 * \brief Completions for struct tags should be included in the results. 04672 */ 04673 CXCompletionContext_StructTag = 1 << 10, 04674 04675 /** 04676 * \brief Completions for C++ class names should be included in the results. 04677 */ 04678 CXCompletionContext_ClassTag = 1 << 11, 04679 /** 04680 * \brief Completions for C++ namespaces and namespace aliases should be 04681 * included in the results. 04682 */ 04683 CXCompletionContext_Namespace = 1 << 12, 04684 /** 04685 * \brief Completions for C++ nested name specifiers should be included in 04686 * the results. 04687 */ 04688 CXCompletionContext_NestedNameSpecifier = 1 << 13, 04689 04690 /** 04691 * \brief Completions for Objective-C interfaces (classes) should be included 04692 * in the results. 04693 */ 04694 CXCompletionContext_ObjCInterface = 1 << 14, 04695 /** 04696 * \brief Completions for Objective-C protocols should be included in 04697 * the results. 04698 */ 04699 CXCompletionContext_ObjCProtocol = 1 << 15, 04700 /** 04701 * \brief Completions for Objective-C categories should be included in 04702 * the results. 04703 */ 04704 CXCompletionContext_ObjCCategory = 1 << 16, 04705 /** 04706 * \brief Completions for Objective-C instance messages should be included 04707 * in the results. 04708 */ 04709 CXCompletionContext_ObjCInstanceMessage = 1 << 17, 04710 /** 04711 * \brief Completions for Objective-C class messages should be included in 04712 * the results. 04713 */ 04714 CXCompletionContext_ObjCClassMessage = 1 << 18, 04715 /** 04716 * \brief Completions for Objective-C selector names should be included in 04717 * the results. 04718 */ 04719 CXCompletionContext_ObjCSelectorName = 1 << 19, 04720 04721 /** 04722 * \brief Completions for preprocessor macro names should be included in 04723 * the results. 04724 */ 04725 CXCompletionContext_MacroName = 1 << 20, 04726 04727 /** 04728 * \brief Natural language completions should be included in the results. 04729 */ 04730 CXCompletionContext_NaturalLanguage = 1 << 21, 04731 04732 /** 04733 * \brief The current context is unknown, so set all contexts. 04734 */ 04735 CXCompletionContext_Unknown = ((1 << 22) - 1) 04736 }; 04737 04738 /** 04739 * \brief Returns a default set of code-completion options that can be 04740 * passed to\c clang_codeCompleteAt(). 04741 */ 04742 CINDEX_LINKAGE unsigned clang_defaultCodeCompleteOptions(void); 04743 04744 /** 04745 * \brief Perform code completion at a given location in a translation unit. 04746 * 04747 * This function performs code completion at a particular file, line, and 04748 * column within source code, providing results that suggest potential 04749 * code snippets based on the context of the completion. The basic model 04750 * for code completion is that Clang will parse a complete source file, 04751 * performing syntax checking up to the location where code-completion has 04752 * been requested. At that point, a special code-completion token is passed 04753 * to the parser, which recognizes this token and determines, based on the 04754 * current location in the C/Objective-C/C++ grammar and the state of 04755 * semantic analysis, what completions to provide. These completions are 04756 * returned via a new \c CXCodeCompleteResults structure. 04757 * 04758 * Code completion itself is meant to be triggered by the client when the 04759 * user types punctuation characters or whitespace, at which point the 04760 * code-completion location will coincide with the cursor. For example, if \c p 04761 * is a pointer, code-completion might be triggered after the "-" and then 04762 * after the ">" in \c p->. When the code-completion location is afer the ">", 04763 * the completion results will provide, e.g., the members of the struct that 04764 * "p" points to. The client is responsible for placing the cursor at the 04765 * beginning of the token currently being typed, then filtering the results 04766 * based on the contents of the token. For example, when code-completing for 04767 * the expression \c p->get, the client should provide the location just after 04768 * the ">" (e.g., pointing at the "g") to this code-completion hook. Then, the 04769 * client can filter the results based on the current token text ("get"), only 04770 * showing those results that start with "get". The intent of this interface 04771 * is to separate the relatively high-latency acquisition of code-completion 04772 * results from the filtering of results on a per-character basis, which must 04773 * have a lower latency. 04774 * 04775 * \param TU The translation unit in which code-completion should 04776 * occur. The source files for this translation unit need not be 04777 * completely up-to-date (and the contents of those source files may 04778 * be overridden via \p unsaved_files). Cursors referring into the 04779 * translation unit may be invalidated by this invocation. 04780 * 04781 * \param complete_filename The name of the source file where code 04782 * completion should be performed. This filename may be any file 04783 * included in the translation unit. 04784 * 04785 * \param complete_line The line at which code-completion should occur. 04786 * 04787 * \param complete_column The column at which code-completion should occur. 04788 * Note that the column should point just after the syntactic construct that 04789 * initiated code completion, and not in the middle of a lexical token. 04790 * 04791 * \param unsaved_files the Tiles that have not yet been saved to disk 04792 * but may be required for parsing or code completion, including the 04793 * contents of those files. The contents and name of these files (as 04794 * specified by CXUnsavedFile) are copied when necessary, so the 04795 * client only needs to guarantee their validity until the call to 04796 * this function returns. 04797 * 04798 * \param num_unsaved_files The number of unsaved file entries in \p 04799 * unsaved_files. 04800 * 04801 * \param options Extra options that control the behavior of code 04802 * completion, expressed as a bitwise OR of the enumerators of the 04803 * CXCodeComplete_Flags enumeration. The 04804 * \c clang_defaultCodeCompleteOptions() function returns a default set 04805 * of code-completion options. 04806 * 04807 * \returns If successful, a new \c CXCodeCompleteResults structure 04808 * containing code-completion results, which should eventually be 04809 * freed with \c clang_disposeCodeCompleteResults(). If code 04810 * completion fails, returns NULL. 04811 */ 04812 CINDEX_LINKAGE 04813 CXCodeCompleteResults *clang_codeCompleteAt(CXTranslationUnit TU, 04814 const char *complete_filename, 04815 unsigned complete_line, 04816 unsigned complete_column, 04817 struct CXUnsavedFile *unsaved_files, 04818 unsigned num_unsaved_files, 04819 unsigned options); 04820 04821 /** 04822 * \brief Sort the code-completion results in case-insensitive alphabetical 04823 * order. 04824 * 04825 * \param Results The set of results to sort. 04826 * \param NumResults The number of results in \p Results. 04827 */ 04828 CINDEX_LINKAGE 04829 void clang_sortCodeCompletionResults(CXCompletionResult *Results, 04830 unsigned NumResults); 04831 04832 /** 04833 * \brief Free the given set of code-completion results. 04834 */ 04835 CINDEX_LINKAGE 04836 void clang_disposeCodeCompleteResults(CXCodeCompleteResults *Results); 04837 04838 /** 04839 * \brief Determine the number of diagnostics produced prior to the 04840 * location where code completion was performed. 04841 */ 04842 CINDEX_LINKAGE 04843 unsigned clang_codeCompleteGetNumDiagnostics(CXCodeCompleteResults *Results); 04844 04845 /** 04846 * \brief Retrieve a diagnostic associated with the given code completion. 04847 * 04848 * \param Results the code completion results to query. 04849 * \param Index the zero-based diagnostic number to retrieve. 04850 * 04851 * \returns the requested diagnostic. This diagnostic must be freed 04852 * via a call to \c clang_disposeDiagnostic(). 04853 */ 04854 CINDEX_LINKAGE 04855 CXDiagnostic clang_codeCompleteGetDiagnostic(CXCodeCompleteResults *Results, 04856 unsigned Index); 04857 04858 /** 04859 * \brief Determines what completions are appropriate for the context 04860 * the given code completion. 04861 * 04862 * \param Results the code completion results to query 04863 * 04864 * \returns the kinds of completions that are appropriate for use 04865 * along with the given code completion results. 04866 */ 04867 CINDEX_LINKAGE 04868 unsigned long long clang_codeCompleteGetContexts( 04869 CXCodeCompleteResults *Results); 04870 04871 /** 04872 * \brief Returns the cursor kind for the container for the current code 04873 * completion context. The container is only guaranteed to be set for 04874 * contexts where a container exists (i.e. member accesses or Objective-C 04875 * message sends); if there is not a container, this function will return 04876 * CXCursor_InvalidCode. 04877 * 04878 * \param Results the code completion results to query 04879 * 04880 * \param IsIncomplete on return, this value will be false if Clang has complete 04881 * information about the container. If Clang does not have complete 04882 * information, this value will be true. 04883 * 04884 * \returns the container kind, or CXCursor_InvalidCode if there is not a 04885 * container 04886 */ 04887 CINDEX_LINKAGE 04888 enum CXCursorKind clang_codeCompleteGetContainerKind( 04889 CXCodeCompleteResults *Results, 04890 unsigned *IsIncomplete); 04891 04892 /** 04893 * \brief Returns the USR for the container for the current code completion 04894 * context. If there is not a container for the current context, this 04895 * function will return the empty string. 04896 * 04897 * \param Results the code completion results to query 04898 * 04899 * \returns the USR for the container 04900 */ 04901 CINDEX_LINKAGE 04902 CXString clang_codeCompleteGetContainerUSR(CXCodeCompleteResults *Results); 04903 04904 04905 /** 04906 * \brief Returns the currently-entered selector for an Objective-C message 04907 * send, formatted like "initWithFoo:bar:". Only guaranteed to return a 04908 * non-empty string for CXCompletionContext_ObjCInstanceMessage and 04909 * CXCompletionContext_ObjCClassMessage. 04910 * 04911 * \param Results the code completion results to query 04912 * 04913 * \returns the selector (or partial selector) that has been entered thus far 04914 * for an Objective-C message send. 04915 */ 04916 CINDEX_LINKAGE 04917 CXString clang_codeCompleteGetObjCSelector(CXCodeCompleteResults *Results); 04918 04919 /** 04920 * @} 04921 */ 04922 04923 04924 /** 04925 * \defgroup CINDEX_MISC Miscellaneous utility functions 04926 * 04927 * @{ 04928 */ 04929 04930 /** 04931 * \brief Return a version string, suitable for showing to a user, but not 04932 * intended to be parsed (the format is not guaranteed to be stable). 04933 */ 04934 CINDEX_LINKAGE CXString clang_getClangVersion(void); 04935 04936 04937 /** 04938 * \brief Enable/disable crash recovery. 04939 * 04940 * \param isEnabled Flag to indicate if crash recovery is enabled. A non-zero 04941 * value enables crash recovery, while 0 disables it. 04942 */ 04943 CINDEX_LINKAGE void clang_toggleCrashRecovery(unsigned isEnabled); 04944 04945 /** 04946 * \brief Visitor invoked for each file in a translation unit 04947 * (used with clang_getInclusions()). 04948 * 04949 * This visitor function will be invoked by clang_getInclusions() for each 04950 * file included (either at the top-level or by \#include directives) within 04951 * a translation unit. The first argument is the file being included, and 04952 * the second and third arguments provide the inclusion stack. The 04953 * array is sorted in order of immediate inclusion. For example, 04954 * the first element refers to the location that included 'included_file'. 04955 */ 04956 typedef void (*CXInclusionVisitor)(CXFile included_file, 04957 CXSourceLocation* inclusion_stack, 04958 unsigned include_len, 04959 CXClientData client_data); 04960 04961 /** 04962 * \brief Visit the set of preprocessor inclusions in a translation unit. 04963 * The visitor function is called with the provided data for every included 04964 * file. This does not include headers included by the PCH file (unless one 04965 * is inspecting the inclusions in the PCH file itself). 04966 */ 04967 CINDEX_LINKAGE void clang_getInclusions(CXTranslationUnit tu, 04968 CXInclusionVisitor visitor, 04969 CXClientData client_data); 04970 04971 /** 04972 * @} 04973 */ 04974 04975 /** \defgroup CINDEX_REMAPPING Remapping functions 04976 * 04977 * @{ 04978 */ 04979 04980 /** 04981 * \brief A remapping of original source files and their translated files. 04982 */ 04983 typedef void *CXRemapping; 04984 04985 /** 04986 * \brief Retrieve a remapping. 04987 * 04988 * \param path the path that contains metadata about remappings. 04989 * 04990 * \returns the requested remapping. This remapping must be freed 04991 * via a call to \c clang_remap_dispose(). Can return NULL if an error occurred. 04992 */ 04993 CINDEX_LINKAGE CXRemapping clang_getRemappings(const char *path); 04994 04995 /** 04996 * \brief Retrieve a remapping. 04997 * 04998 * \param filePaths pointer to an array of file paths containing remapping info. 04999 * 05000 * \param numFiles number of file paths. 05001 * 05002 * \returns the requested remapping. This remapping must be freed 05003 * via a call to \c clang_remap_dispose(). Can return NULL if an error occurred. 05004 */ 05005 CINDEX_LINKAGE 05006 CXRemapping clang_getRemappingsFromFileList(const char **filePaths, 05007 unsigned numFiles); 05008 05009 /** 05010 * \brief Determine the number of remappings. 05011 */ 05012 CINDEX_LINKAGE unsigned clang_remap_getNumFiles(CXRemapping); 05013 05014 /** 05015 * \brief Get the original and the associated filename from the remapping. 05016 * 05017 * \param original If non-NULL, will be set to the original filename. 05018 * 05019 * \param transformed If non-NULL, will be set to the filename that the original 05020 * is associated with. 05021 */ 05022 CINDEX_LINKAGE void clang_remap_getFilenames(CXRemapping, unsigned index, 05023 CXString *original, CXString *transformed); 05024 05025 /** 05026 * \brief Dispose the remapping. 05027 */ 05028 CINDEX_LINKAGE void clang_remap_dispose(CXRemapping); 05029 05030 /** 05031 * @} 05032 */ 05033 05034 /** \defgroup CINDEX_HIGH Higher level API functions 05035 * 05036 * @{ 05037 */ 05038 05039 enum CXVisitorResult { 05040 CXVisit_Break, 05041 CXVisit_Continue 05042 }; 05043 05044 typedef struct { 05045 void *context; 05046 enum CXVisitorResult (*visit)(void *context, CXCursor, CXSourceRange); 05047 } CXCursorAndRangeVisitor; 05048 05049 typedef enum { 05050 /** 05051 * \brief Function returned successfully. 05052 */ 05053 CXResult_Success = 0, 05054 /** 05055 * \brief One of the parameters was invalid for the function. 05056 */ 05057 CXResult_Invalid = 1, 05058 /** 05059 * \brief The function was terminated by a callback (e.g. it returned 05060 * CXVisit_Break) 05061 */ 05062 CXResult_VisitBreak = 2 05063 05064 } CXResult; 05065 05066 /** 05067 * \brief Find references of a declaration in a specific file. 05068 * 05069 * \param cursor pointing to a declaration or a reference of one. 05070 * 05071 * \param file to search for references. 05072 * 05073 * \param visitor callback that will receive pairs of CXCursor/CXSourceRange for 05074 * each reference found. 05075 * The CXSourceRange will point inside the file; if the reference is inside 05076 * a macro (and not a macro argument) the CXSourceRange will be invalid. 05077 * 05078 * \returns one of the CXResult enumerators. 05079 */ 05080 CINDEX_LINKAGE CXResult clang_findReferencesInFile(CXCursor cursor, CXFile file, 05081 CXCursorAndRangeVisitor visitor); 05082 05083 /** 05084 * \brief Find #import/#include directives in a specific file. 05085 * 05086 * \param TU translation unit containing the file to query. 05087 * 05088 * \param file to search for #import/#include directives. 05089 * 05090 * \param visitor callback that will receive pairs of CXCursor/CXSourceRange for 05091 * each directive found. 05092 * 05093 * \returns one of the CXResult enumerators. 05094 */ 05095 CINDEX_LINKAGE CXResult clang_findIncludesInFile(CXTranslationUnit TU, 05096 CXFile file, 05097 CXCursorAndRangeVisitor visitor); 05098 05099 #ifdef __has_feature 05100 # if __has_feature(blocks) 05101 05102 typedef enum CXVisitorResult 05103 (^CXCursorAndRangeVisitorBlock)(CXCursor, CXSourceRange); 05104 05105 CINDEX_LINKAGE 05106 CXResult clang_findReferencesInFileWithBlock(CXCursor, CXFile, 05107 CXCursorAndRangeVisitorBlock); 05108 05109 CINDEX_LINKAGE 05110 CXResult clang_findIncludesInFileWithBlock(CXTranslationUnit, CXFile, 05111 CXCursorAndRangeVisitorBlock); 05112 05113 # endif 05114 #endif 05115 05116 /** 05117 * \brief The client's data object that is associated with a CXFile. 05118 */ 05119 typedef void *CXIdxClientFile; 05120 05121 /** 05122 * \brief The client's data object that is associated with a semantic entity. 05123 */ 05124 typedef void *CXIdxClientEntity; 05125 05126 /** 05127 * \brief The client's data object that is associated with a semantic container 05128 * of entities. 05129 */ 05130 typedef void *CXIdxClientContainer; 05131 05132 /** 05133 * \brief The client's data object that is associated with an AST file (PCH 05134 * or module). 05135 */ 05136 typedef void *CXIdxClientASTFile; 05137 05138 /** 05139 * \brief Source location passed to index callbacks. 05140 */ 05141 typedef struct { 05142 void *ptr_data[2]; 05143 unsigned int_data; 05144 } CXIdxLoc; 05145 05146 /** 05147 * \brief Data for ppIncludedFile callback. 05148 */ 05149 typedef struct { 05150 /** 05151 * \brief Location of '#' in the \#include/\#import directive. 05152 */ 05153 CXIdxLoc hashLoc; 05154 /** 05155 * \brief Filename as written in the \#include/\#import directive. 05156 */ 05157 const char *filename; 05158 /** 05159 * \brief The actual file that the \#include/\#import directive resolved to. 05160 */ 05161 CXFile file; 05162 int isImport; 05163 int isAngled; 05164 /** 05165 * \brief Non-zero if the directive was automatically turned into a module 05166 * import. 05167 */ 05168 int isModuleImport; 05169 } CXIdxIncludedFileInfo; 05170 05171 /** 05172 * \brief Data for IndexerCallbacks#importedASTFile. 05173 */ 05174 typedef struct { 05175 /** 05176 * \brief Top level AST file containing the imported PCH, module or submodule. 05177 */ 05178 CXFile file; 05179 /** 05180 * \brief The imported module or NULL if the AST file is a PCH. 05181 */ 05182 CXModule module; 05183 /** 05184 * \brief Location where the file is imported. Applicable only for modules. 05185 */ 05186 CXIdxLoc loc; 05187 /** 05188 * \brief Non-zero if an inclusion directive was automatically turned into 05189 * a module import. Applicable only for modules. 05190 */ 05191 int isImplicit; 05192 05193 } CXIdxImportedASTFileInfo; 05194 05195 typedef enum { 05196 CXIdxEntity_Unexposed = 0, 05197 CXIdxEntity_Typedef = 1, 05198 CXIdxEntity_Function = 2, 05199 CXIdxEntity_Variable = 3, 05200 CXIdxEntity_Field = 4, 05201 CXIdxEntity_EnumConstant = 5, 05202 05203 CXIdxEntity_ObjCClass = 6, 05204 CXIdxEntity_ObjCProtocol = 7, 05205 CXIdxEntity_ObjCCategory = 8, 05206 05207 CXIdxEntity_ObjCInstanceMethod = 9, 05208 CXIdxEntity_ObjCClassMethod = 10, 05209 CXIdxEntity_ObjCProperty = 11, 05210 CXIdxEntity_ObjCIvar = 12, 05211 05212 CXIdxEntity_Enum = 13, 05213 CXIdxEntity_Struct = 14, 05214 CXIdxEntity_Union = 15, 05215 05216 CXIdxEntity_CXXClass = 16, 05217 CXIdxEntity_CXXNamespace = 17, 05218 CXIdxEntity_CXXNamespaceAlias = 18, 05219 CXIdxEntity_CXXStaticVariable = 19, 05220 CXIdxEntity_CXXStaticMethod = 20, 05221 CXIdxEntity_CXXInstanceMethod = 21, 05222 CXIdxEntity_CXXConstructor = 22, 05223 CXIdxEntity_CXXDestructor = 23, 05224 CXIdxEntity_CXXConversionFunction = 24, 05225 CXIdxEntity_CXXTypeAlias = 25, 05226 CXIdxEntity_CXXInterface = 26 05227 05228 } CXIdxEntityKind; 05229 05230 typedef enum { 05231 CXIdxEntityLang_None = 0, 05232 CXIdxEntityLang_C = 1, 05233 CXIdxEntityLang_ObjC = 2, 05234 CXIdxEntityLang_CXX = 3 05235 } CXIdxEntityLanguage; 05236 05237 /** 05238 * \brief Extra C++ template information for an entity. This can apply to: 05239 * CXIdxEntity_Function 05240 * CXIdxEntity_CXXClass 05241 * CXIdxEntity_CXXStaticMethod 05242 * CXIdxEntity_CXXInstanceMethod 05243 * CXIdxEntity_CXXConstructor 05244 * CXIdxEntity_CXXConversionFunction 05245 * CXIdxEntity_CXXTypeAlias 05246 */ 05247 typedef enum { 05248 CXIdxEntity_NonTemplate = 0, 05249 CXIdxEntity_Template = 1, 05250 CXIdxEntity_TemplatePartialSpecialization = 2, 05251 CXIdxEntity_TemplateSpecialization = 3 05252 } CXIdxEntityCXXTemplateKind; 05253 05254 typedef enum { 05255 CXIdxAttr_Unexposed = 0, 05256 CXIdxAttr_IBAction = 1, 05257 CXIdxAttr_IBOutlet = 2, 05258 CXIdxAttr_IBOutletCollection = 3 05259 } CXIdxAttrKind; 05260 05261 typedef struct { 05262 CXIdxAttrKind kind; 05263 CXCursor cursor; 05264 CXIdxLoc loc; 05265 } CXIdxAttrInfo; 05266 05267 typedef struct { 05268 CXIdxEntityKind kind; 05269 CXIdxEntityCXXTemplateKind templateKind; 05270 CXIdxEntityLanguage lang; 05271 const char *name; 05272 const char *USR; 05273 CXCursor cursor; 05274 const CXIdxAttrInfo *const *attributes; 05275 unsigned numAttributes; 05276 } CXIdxEntityInfo; 05277 05278 typedef struct { 05279 CXCursor cursor; 05280 } CXIdxContainerInfo; 05281 05282 typedef struct { 05283 const CXIdxAttrInfo *attrInfo; 05284 const CXIdxEntityInfo *objcClass; 05285 CXCursor classCursor; 05286 CXIdxLoc classLoc; 05287 } CXIdxIBOutletCollectionAttrInfo; 05288 05289 typedef enum { 05290 CXIdxDeclFlag_Skipped = 0x1 05291 } CXIdxDeclInfoFlags; 05292 05293 typedef struct { 05294 const CXIdxEntityInfo *entityInfo; 05295 CXCursor cursor; 05296 CXIdxLoc loc; 05297 const CXIdxContainerInfo *semanticContainer; 05298 /** 05299 * \brief Generally same as #semanticContainer but can be different in 05300 * cases like out-of-line C++ member functions. 05301 */ 05302 const CXIdxContainerInfo *lexicalContainer; 05303 int isRedeclaration; 05304 int isDefinition; 05305 int isContainer; 05306 const CXIdxContainerInfo *declAsContainer; 05307 /** 05308 * \brief Whether the declaration exists in code or was created implicitly 05309 * by the compiler, e.g. implicit Objective-C methods for properties. 05310 */ 05311 int isImplicit; 05312 const CXIdxAttrInfo *const *attributes; 05313 unsigned numAttributes; 05314 05315 unsigned flags; 05316 05317 } CXIdxDeclInfo; 05318 05319 typedef enum { 05320 CXIdxObjCContainer_ForwardRef = 0, 05321 CXIdxObjCContainer_Interface = 1, 05322 CXIdxObjCContainer_Implementation = 2 05323 } CXIdxObjCContainerKind; 05324 05325 typedef struct { 05326 const CXIdxDeclInfo *declInfo; 05327 CXIdxObjCContainerKind kind; 05328 } CXIdxObjCContainerDeclInfo; 05329 05330 typedef struct { 05331 const CXIdxEntityInfo *base; 05332 CXCursor cursor; 05333 CXIdxLoc loc; 05334 } CXIdxBaseClassInfo; 05335 05336 typedef struct { 05337 const CXIdxEntityInfo *protocol; 05338 CXCursor cursor; 05339 CXIdxLoc loc; 05340 } CXIdxObjCProtocolRefInfo; 05341 05342 typedef struct { 05343 const CXIdxObjCProtocolRefInfo *const *protocols; 05344 unsigned numProtocols; 05345 } CXIdxObjCProtocolRefListInfo; 05346 05347 typedef struct { 05348 const CXIdxObjCContainerDeclInfo *containerInfo; 05349 const CXIdxBaseClassInfo *superInfo; 05350 const CXIdxObjCProtocolRefListInfo *protocols; 05351 } CXIdxObjCInterfaceDeclInfo; 05352 05353 typedef struct { 05354 const CXIdxObjCContainerDeclInfo *containerInfo; 05355 const CXIdxEntityInfo *objcClass; 05356 CXCursor classCursor; 05357 CXIdxLoc classLoc; 05358 const CXIdxObjCProtocolRefListInfo *protocols; 05359 } CXIdxObjCCategoryDeclInfo; 05360 05361 typedef struct { 05362 const CXIdxDeclInfo *declInfo; 05363 const CXIdxEntityInfo *getter; 05364 const CXIdxEntityInfo *setter; 05365 } CXIdxObjCPropertyDeclInfo; 05366 05367 typedef struct { 05368 const CXIdxDeclInfo *declInfo; 05369 const CXIdxBaseClassInfo *const *bases; 05370 unsigned numBases; 05371 } CXIdxCXXClassDeclInfo; 05372 05373 /** 05374 * \brief Data for IndexerCallbacks#indexEntityReference. 05375 */ 05376 typedef enum { 05377 /** 05378 * \brief The entity is referenced directly in user's code. 05379 */ 05380 CXIdxEntityRef_Direct = 1, 05381 /** 05382 * \brief An implicit reference, e.g. a reference of an Objective-C method 05383 * via the dot syntax. 05384 */ 05385 CXIdxEntityRef_Implicit = 2 05386 } CXIdxEntityRefKind; 05387 05388 /** 05389 * \brief Data for IndexerCallbacks#indexEntityReference. 05390 */ 05391 typedef struct { 05392 CXIdxEntityRefKind kind; 05393 /** 05394 * \brief Reference cursor. 05395 */ 05396 CXCursor cursor; 05397 CXIdxLoc loc; 05398 /** 05399 * \brief The entity that gets referenced. 05400 */ 05401 const CXIdxEntityInfo *referencedEntity; 05402 /** 05403 * \brief Immediate "parent" of the reference. For example: 05404 * 05405 * \code 05406 * Foo *var; 05407 * \endcode 05408 * 05409 * The parent of reference of type 'Foo' is the variable 'var'. 05410 * For references inside statement bodies of functions/methods, 05411 * the parentEntity will be the function/method. 05412 */ 05413 const CXIdxEntityInfo *parentEntity; 05414 /** 05415 * \brief Lexical container context of the reference. 05416 */ 05417 const CXIdxContainerInfo *container; 05418 } CXIdxEntityRefInfo; 05419 05420 /** 05421 * \brief A group of callbacks used by #clang_indexSourceFile and 05422 * #clang_indexTranslationUnit. 05423 */ 05424 typedef struct { 05425 /** 05426 * \brief Called periodically to check whether indexing should be aborted. 05427 * Should return 0 to continue, and non-zero to abort. 05428 */ 05429 int (*abortQuery)(CXClientData client_data, void *reserved); 05430 05431 /** 05432 * \brief Called at the end of indexing; passes the complete diagnostic set. 05433 */ 05434 void (*diagnostic)(CXClientData client_data, 05435 CXDiagnosticSet, void *reserved); 05436 05437 CXIdxClientFile (*enteredMainFile)(CXClientData client_data, 05438 CXFile mainFile, void *reserved); 05439 05440 /** 05441 * \brief Called when a file gets \#included/\#imported. 05442 */ 05443 CXIdxClientFile (*ppIncludedFile)(CXClientData client_data, 05444 const CXIdxIncludedFileInfo *); 05445 05446 /** 05447 * \brief Called when a AST file (PCH or module) gets imported. 05448 * 05449 * AST files will not get indexed (there will not be callbacks to index all 05450 * the entities in an AST file). The recommended action is that, if the AST 05451 * file is not already indexed, to initiate a new indexing job specific to 05452 * the AST file. 05453 */ 05454 CXIdxClientASTFile (*importedASTFile)(CXClientData client_data, 05455 const CXIdxImportedASTFileInfo *); 05456 05457 /** 05458 * \brief Called at the beginning of indexing a translation unit. 05459 */ 05460 CXIdxClientContainer (*startedTranslationUnit)(CXClientData client_data, 05461 void *reserved); 05462 05463 void (*indexDeclaration)(CXClientData client_data, 05464 const CXIdxDeclInfo *); 05465 05466 /** 05467 * \brief Called to index a reference of an entity. 05468 */ 05469 void (*indexEntityReference)(CXClientData client_data, 05470 const CXIdxEntityRefInfo *); 05471 05472 } IndexerCallbacks; 05473 05474 CINDEX_LINKAGE int clang_index_isEntityObjCContainerKind(CXIdxEntityKind); 05475 CINDEX_LINKAGE const CXIdxObjCContainerDeclInfo * 05476 clang_index_getObjCContainerDeclInfo(const CXIdxDeclInfo *); 05477 05478 CINDEX_LINKAGE const CXIdxObjCInterfaceDeclInfo * 05479 clang_index_getObjCInterfaceDeclInfo(const CXIdxDeclInfo *); 05480 05481 CINDEX_LINKAGE 05482 const CXIdxObjCCategoryDeclInfo * 05483 clang_index_getObjCCategoryDeclInfo(const CXIdxDeclInfo *); 05484 05485 CINDEX_LINKAGE const CXIdxObjCProtocolRefListInfo * 05486 clang_index_getObjCProtocolRefListInfo(const CXIdxDeclInfo *); 05487 05488 CINDEX_LINKAGE const CXIdxObjCPropertyDeclInfo * 05489 clang_index_getObjCPropertyDeclInfo(const CXIdxDeclInfo *); 05490 05491 CINDEX_LINKAGE const CXIdxIBOutletCollectionAttrInfo * 05492 clang_index_getIBOutletCollectionAttrInfo(const CXIdxAttrInfo *); 05493 05494 CINDEX_LINKAGE const CXIdxCXXClassDeclInfo * 05495 clang_index_getCXXClassDeclInfo(const CXIdxDeclInfo *); 05496 05497 /** 05498 * \brief For retrieving a custom CXIdxClientContainer attached to a 05499 * container. 05500 */ 05501 CINDEX_LINKAGE CXIdxClientContainer 05502 clang_index_getClientContainer(const CXIdxContainerInfo *); 05503 05504 /** 05505 * \brief For setting a custom CXIdxClientContainer attached to a 05506 * container. 05507 */ 05508 CINDEX_LINKAGE void 05509 clang_index_setClientContainer(const CXIdxContainerInfo *,CXIdxClientContainer); 05510 05511 /** 05512 * \brief For retrieving a custom CXIdxClientEntity attached to an entity. 05513 */ 05514 CINDEX_LINKAGE CXIdxClientEntity 05515 clang_index_getClientEntity(const CXIdxEntityInfo *); 05516 05517 /** 05518 * \brief For setting a custom CXIdxClientEntity attached to an entity. 05519 */ 05520 CINDEX_LINKAGE void 05521 clang_index_setClientEntity(const CXIdxEntityInfo *, CXIdxClientEntity); 05522 05523 /** 05524 * \brief An indexing action/session, to be applied to one or multiple 05525 * translation units. 05526 */ 05527 typedef void *CXIndexAction; 05528 05529 /** 05530 * \brief An indexing action/session, to be applied to one or multiple 05531 * translation units. 05532 * 05533 * \param CIdx The index object with which the index action will be associated. 05534 */ 05535 CINDEX_LINKAGE CXIndexAction clang_IndexAction_create(CXIndex CIdx); 05536 05537 /** 05538 * \brief Destroy the given index action. 05539 * 05540 * The index action must not be destroyed until all of the translation units 05541 * created within that index action have been destroyed. 05542 */ 05543 CINDEX_LINKAGE void clang_IndexAction_dispose(CXIndexAction); 05544 05545 typedef enum { 05546 /** 05547 * \brief Used to indicate that no special indexing options are needed. 05548 */ 05549 CXIndexOpt_None = 0x0, 05550 05551 /** 05552 * \brief Used to indicate that IndexerCallbacks#indexEntityReference should 05553 * be invoked for only one reference of an entity per source file that does 05554 * not also include a declaration/definition of the entity. 05555 */ 05556 CXIndexOpt_SuppressRedundantRefs = 0x1, 05557 05558 /** 05559 * \brief Function-local symbols should be indexed. If this is not set 05560 * function-local symbols will be ignored. 05561 */ 05562 CXIndexOpt_IndexFunctionLocalSymbols = 0x2, 05563 05564 /** 05565 * \brief Implicit function/class template instantiations should be indexed. 05566 * If this is not set, implicit instantiations will be ignored. 05567 */ 05568 CXIndexOpt_IndexImplicitTemplateInstantiations = 0x4, 05569 05570 /** 05571 * \brief Suppress all compiler warnings when parsing for indexing. 05572 */ 05573 CXIndexOpt_SuppressWarnings = 0x8, 05574 05575 /** 05576 * \brief Skip a function/method body that was already parsed during an 05577 * indexing session associated with a \c CXIndexAction object. 05578 * Bodies in system headers are always skipped. 05579 */ 05580 CXIndexOpt_SkipParsedBodiesInSession = 0x10 05581 05582 } CXIndexOptFlags; 05583 05584 /** 05585 * \brief Index the given source file and the translation unit corresponding 05586 * to that file via callbacks implemented through #IndexerCallbacks. 05587 * 05588 * \param client_data pointer data supplied by the client, which will 05589 * be passed to the invoked callbacks. 05590 * 05591 * \param index_callbacks Pointer to indexing callbacks that the client 05592 * implements. 05593 * 05594 * \param index_callbacks_size Size of #IndexerCallbacks structure that gets 05595 * passed in index_callbacks. 05596 * 05597 * \param index_options A bitmask of options that affects how indexing is 05598 * performed. This should be a bitwise OR of the CXIndexOpt_XXX flags. 05599 * 05600 * \param[out] out_TU pointer to store a \c CXTranslationUnit that can be 05601 * reused after indexing is finished. Set to \c NULL if you do not require it. 05602 * 05603 * \returns 0 on success or if there were errors from which the compiler could 05604 * recover. If there is a failure from which the there is no recovery, returns 05605 * a non-zero \c CXErrorCode. 05606 * 05607 * The rest of the parameters are the same as #clang_parseTranslationUnit. 05608 */ 05609 CINDEX_LINKAGE int clang_indexSourceFile(CXIndexAction, 05610 CXClientData client_data, 05611 IndexerCallbacks *index_callbacks, 05612 unsigned index_callbacks_size, 05613 unsigned index_options, 05614 const char *source_filename, 05615 const char * const *command_line_args, 05616 int num_command_line_args, 05617 struct CXUnsavedFile *unsaved_files, 05618 unsigned num_unsaved_files, 05619 CXTranslationUnit *out_TU, 05620 unsigned TU_options); 05621 05622 /** 05623 * \brief Index the given translation unit via callbacks implemented through 05624 * #IndexerCallbacks. 05625 * 05626 * The order of callback invocations is not guaranteed to be the same as 05627 * when indexing a source file. The high level order will be: 05628 * 05629 * -Preprocessor callbacks invocations 05630 * -Declaration/reference callbacks invocations 05631 * -Diagnostic callback invocations 05632 * 05633 * The parameters are the same as #clang_indexSourceFile. 05634 * 05635 * \returns If there is a failure from which the there is no recovery, returns 05636 * non-zero, otherwise returns 0. 05637 */ 05638 CINDEX_LINKAGE int clang_indexTranslationUnit(CXIndexAction, 05639 CXClientData client_data, 05640 IndexerCallbacks *index_callbacks, 05641 unsigned index_callbacks_size, 05642 unsigned index_options, 05643 CXTranslationUnit); 05644 05645 /** 05646 * \brief Retrieve the CXIdxFile, file, line, column, and offset represented by 05647 * the given CXIdxLoc. 05648 * 05649 * If the location refers into a macro expansion, retrieves the 05650 * location of the macro expansion and if it refers into a macro argument 05651 * retrieves the location of the argument. 05652 */ 05653 CINDEX_LINKAGE void clang_indexLoc_getFileLocation(CXIdxLoc loc, 05654 CXIdxClientFile *indexFile, 05655 CXFile *file, 05656 unsigned *line, 05657 unsigned *column, 05658 unsigned *offset); 05659 05660 /** 05661 * \brief Retrieve the CXSourceLocation represented by the given CXIdxLoc. 05662 */ 05663 CINDEX_LINKAGE 05664 CXSourceLocation clang_indexLoc_getCXSourceLocation(CXIdxLoc loc); 05665 05666 /** 05667 * @} 05668 */ 05669 05670 /** 05671 * @} 05672 */ 05673 05674 /* Include the comment API for compatibility. This will eventually go away. */ 05675 #include "clang-c/Documentation.h" 05676 05677 #ifdef __cplusplus 05678 } 05679 #endif 05680 #endif 05681