Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. /*===-- clang-c/CXSourceLocation.h - C Index Source Location ------*- C -*-===*\
  2. |*                                                                            *|
  3. |* Part of the LLVM Project, under the Apache License v2.0 with LLVM          *|
  4. |* Exceptions.                                                                *|
  5. |* See https://llvm.org/LICENSE.txt for license information.                  *|
  6. |* SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception                    *|
  7. |*                                                                            *|
  8. |*===----------------------------------------------------------------------===*|
  9. |*                                                                            *|
  10. |* This header provides the interface to C Index source locations.            *|
  11. |*                                                                            *|
  12. \*===----------------------------------------------------------------------===*/
  13.  
  14. #ifndef LLVM_CLANG_C_CXSOURCE_LOCATION_H
  15. #define LLVM_CLANG_C_CXSOURCE_LOCATION_H
  16.  
  17. #include "clang-c/CXFile.h"
  18. #include "clang-c/CXString.h"
  19. #include "clang-c/ExternC.h"
  20. #include "clang-c/Platform.h"
  21.  
  22. LLVM_CLANG_C_EXTERN_C_BEGIN
  23.  
  24. /**
  25.  * \defgroup CINDEX_LOCATIONS Physical source locations
  26.  *
  27.  * Clang represents physical source locations in its abstract syntax tree in
  28.  * great detail, with file, line, and column information for the majority of
  29.  * the tokens parsed in the source code. These data types and functions are
  30.  * used to represent source location information, either for a particular
  31.  * point in the program or for a range of points in the program, and extract
  32.  * specific location information from those data types.
  33.  *
  34.  * @{
  35.  */
  36.  
  37. /**
  38.  * Identifies a specific source location within a translation
  39.  * unit.
  40.  *
  41.  * Use clang_getExpansionLocation() or clang_getSpellingLocation()
  42.  * to map a source location to a particular file, line, and column.
  43.  */
  44. typedef struct {
  45.   const void *ptr_data[2];
  46.   unsigned int_data;
  47. } CXSourceLocation;
  48.  
  49. /**
  50.  * Identifies a half-open character range in the source code.
  51.  *
  52.  * Use clang_getRangeStart() and clang_getRangeEnd() to retrieve the
  53.  * starting and end locations from a source range, respectively.
  54.  */
  55. typedef struct {
  56.   const void *ptr_data[2];
  57.   unsigned begin_int_data;
  58.   unsigned end_int_data;
  59. } CXSourceRange;
  60.  
  61. /**
  62.  * Retrieve a NULL (invalid) source location.
  63.  */
  64. CINDEX_LINKAGE CXSourceLocation clang_getNullLocation(void);
  65.  
  66. /**
  67.  * Determine whether two source locations, which must refer into
  68.  * the same translation unit, refer to exactly the same point in the source
  69.  * code.
  70.  *
  71.  * \returns non-zero if the source locations refer to the same location, zero
  72.  * if they refer to different locations.
  73.  */
  74. CINDEX_LINKAGE unsigned clang_equalLocations(CXSourceLocation loc1,
  75.                                              CXSourceLocation loc2);
  76.  
  77. /**
  78.  * Returns non-zero if the given source location is in a system header.
  79.  */
  80. CINDEX_LINKAGE int clang_Location_isInSystemHeader(CXSourceLocation location);
  81.  
  82. /**
  83.  * Returns non-zero if the given source location is in the main file of
  84.  * the corresponding translation unit.
  85.  */
  86. CINDEX_LINKAGE int clang_Location_isFromMainFile(CXSourceLocation location);
  87.  
  88. /**
  89.  * Retrieve a NULL (invalid) source range.
  90.  */
  91. CINDEX_LINKAGE CXSourceRange clang_getNullRange(void);
  92.  
  93. /**
  94.  * Retrieve a source range given the beginning and ending source
  95.  * locations.
  96.  */
  97. CINDEX_LINKAGE CXSourceRange clang_getRange(CXSourceLocation begin,
  98.                                             CXSourceLocation end);
  99.  
  100. /**
  101.  * Determine whether two ranges are equivalent.
  102.  *
  103.  * \returns non-zero if the ranges are the same, zero if they differ.
  104.  */
  105. CINDEX_LINKAGE unsigned clang_equalRanges(CXSourceRange range1,
  106.                                           CXSourceRange range2);
  107.  
  108. /**
  109.  * Returns non-zero if \p range is null.
  110.  */
  111. CINDEX_LINKAGE int clang_Range_isNull(CXSourceRange range);
  112.  
  113. /**
  114.  * Retrieve the file, line, column, and offset represented by
  115.  * the given source location.
  116.  *
  117.  * If the location refers into a macro expansion, retrieves the
  118.  * location of the macro expansion.
  119.  *
  120.  * \param location the location within a source file that will be decomposed
  121.  * into its parts.
  122.  *
  123.  * \param file [out] if non-NULL, will be set to the file to which the given
  124.  * source location points.
  125.  *
  126.  * \param line [out] if non-NULL, will be set to the line to which the given
  127.  * source location points.
  128.  *
  129.  * \param column [out] if non-NULL, will be set to the column to which the given
  130.  * source location points.
  131.  *
  132.  * \param offset [out] if non-NULL, will be set to the offset into the
  133.  * buffer to which the given source location points.
  134.  */
  135. CINDEX_LINKAGE void clang_getExpansionLocation(CXSourceLocation location,
  136.                                                CXFile *file, unsigned *line,
  137.                                                unsigned *column,
  138.                                                unsigned *offset);
  139.  
  140. /**
  141.  * Retrieve the file, line and column represented by the given source
  142.  * location, as specified in a # line directive.
  143.  *
  144.  * Example: given the following source code in a file somefile.c
  145.  *
  146.  * \code
  147.  * #123 "dummy.c" 1
  148.  *
  149.  * static int func(void)
  150.  * {
  151.  *     return 0;
  152.  * }
  153.  * \endcode
  154.  *
  155.  * the location information returned by this function would be
  156.  *
  157.  * File: dummy.c Line: 124 Column: 12
  158.  *
  159.  * whereas clang_getExpansionLocation would have returned
  160.  *
  161.  * File: somefile.c Line: 3 Column: 12
  162.  *
  163.  * \param location the location within a source file that will be decomposed
  164.  * into its parts.
  165.  *
  166.  * \param filename [out] if non-NULL, will be set to the filename of the
  167.  * source location. Note that filenames returned will be for "virtual" files,
  168.  * which don't necessarily exist on the machine running clang - e.g. when
  169.  * parsing preprocessed output obtained from a different environment. If
  170.  * a non-NULL value is passed in, remember to dispose of the returned value
  171.  * using \c clang_disposeString() once you've finished with it. For an invalid
  172.  * source location, an empty string is returned.
  173.  *
  174.  * \param line [out] if non-NULL, will be set to the line number of the
  175.  * source location. For an invalid source location, zero is returned.
  176.  *
  177.  * \param column [out] if non-NULL, will be set to the column number of the
  178.  * source location. For an invalid source location, zero is returned.
  179.  */
  180. CINDEX_LINKAGE void clang_getPresumedLocation(CXSourceLocation location,
  181.                                               CXString *filename,
  182.                                               unsigned *line, unsigned *column);
  183.  
  184. /**
  185.  * Legacy API to retrieve the file, line, column, and offset represented
  186.  * by the given source location.
  187.  *
  188.  * This interface has been replaced by the newer interface
  189.  * #clang_getExpansionLocation(). See that interface's documentation for
  190.  * details.
  191.  */
  192. CINDEX_LINKAGE void clang_getInstantiationLocation(CXSourceLocation location,
  193.                                                    CXFile *file, unsigned *line,
  194.                                                    unsigned *column,
  195.                                                    unsigned *offset);
  196.  
  197. /**
  198.  * Retrieve the file, line, column, and offset represented by
  199.  * the given source location.
  200.  *
  201.  * If the location refers into a macro instantiation, return where the
  202.  * location was originally spelled in the source file.
  203.  *
  204.  * \param location the location within a source file that will be decomposed
  205.  * into its parts.
  206.  *
  207.  * \param file [out] if non-NULL, will be set to the file to which the given
  208.  * source location points.
  209.  *
  210.  * \param line [out] if non-NULL, will be set to the line to which the given
  211.  * source location points.
  212.  *
  213.  * \param column [out] if non-NULL, will be set to the column to which the given
  214.  * source location points.
  215.  *
  216.  * \param offset [out] if non-NULL, will be set to the offset into the
  217.  * buffer to which the given source location points.
  218.  */
  219. CINDEX_LINKAGE void clang_getSpellingLocation(CXSourceLocation location,
  220.                                               CXFile *file, unsigned *line,
  221.                                               unsigned *column,
  222.                                               unsigned *offset);
  223.  
  224. /**
  225.  * Retrieve the file, line, column, and offset represented by
  226.  * the given source location.
  227.  *
  228.  * If the location refers into a macro expansion, return where the macro was
  229.  * expanded or where the macro argument was written, if the location points at
  230.  * a macro argument.
  231.  *
  232.  * \param location the location within a source file that will be decomposed
  233.  * into its parts.
  234.  *
  235.  * \param file [out] if non-NULL, will be set to the file to which the given
  236.  * source location points.
  237.  *
  238.  * \param line [out] if non-NULL, will be set to the line to which the given
  239.  * source location points.
  240.  *
  241.  * \param column [out] if non-NULL, will be set to the column to which the given
  242.  * source location points.
  243.  *
  244.  * \param offset [out] if non-NULL, will be set to the offset into the
  245.  * buffer to which the given source location points.
  246.  */
  247. CINDEX_LINKAGE void clang_getFileLocation(CXSourceLocation location,
  248.                                           CXFile *file, unsigned *line,
  249.                                           unsigned *column, unsigned *offset);
  250.  
  251. /**
  252.  * Retrieve a source location representing the first character within a
  253.  * source range.
  254.  */
  255. CINDEX_LINKAGE CXSourceLocation clang_getRangeStart(CXSourceRange range);
  256.  
  257. /**
  258.  * Retrieve a source location representing the last character within a
  259.  * source range.
  260.  */
  261. CINDEX_LINKAGE CXSourceLocation clang_getRangeEnd(CXSourceRange range);
  262.  
  263. /**
  264.  * Identifies an array of ranges.
  265.  */
  266. typedef struct {
  267.   /** The number of ranges in the \c ranges array. */
  268.   unsigned count;
  269.   /**
  270.    * An array of \c CXSourceRanges.
  271.    */
  272.   CXSourceRange *ranges;
  273. } CXSourceRangeList;
  274.  
  275. /**
  276.  * Destroy the given \c CXSourceRangeList.
  277.  */
  278. CINDEX_LINKAGE void clang_disposeSourceRangeList(CXSourceRangeList *ranges);
  279.  
  280. /**
  281.  * @}
  282.  */
  283.  
  284. LLVM_CLANG_C_EXTERN_C_END
  285.  
  286. #endif
  287.