|  | //===- CXString.h - Routines for manipulating CXStrings -------------------===// | 
|  | // | 
|  | //                     The LLVM Compiler Infrastructure | 
|  | // | 
|  | // This file is distributed under the University of Illinois Open Source | 
|  | // License. See LICENSE.TXT for details. | 
|  | // | 
|  | //===----------------------------------------------------------------------===// | 
|  | // | 
|  | // This file defines routines for manipulating CXStrings. | 
|  | // | 
|  | //===----------------------------------------------------------------------===// | 
|  |  | 
|  | #ifndef LLVM_CLANG_TOOLS_LIBCLANG_INDEX_INTERNAL_H | 
|  | #define LLVM_CLANG_TOOLS_LIBCLANG_INDEX_INTERNAL_H | 
|  |  | 
|  | #include "clang-c/Index.h" | 
|  |  | 
|  | #ifndef __has_feature | 
|  | #define __has_feature(x) 0 | 
|  | #endif | 
|  |  | 
|  | #if __has_feature(blocks) | 
|  |  | 
|  | #define INVOKE_BLOCK2(block, arg1, arg2) block(arg1, arg2) | 
|  |  | 
|  | #else | 
|  | // If we are compiled with a compiler that doesn't have native blocks support, | 
|  | // define and call the block manually. | 
|  |  | 
|  | #define INVOKE_BLOCK2(block, arg1, arg2) block->invoke(block, arg1, arg2) | 
|  |  | 
|  | typedef struct _CXCursorAndRangeVisitorBlock { | 
|  | void *isa; | 
|  | int flags; | 
|  | int reserved; | 
|  | enum CXVisitorResult (*invoke)(_CXCursorAndRangeVisitorBlock *, | 
|  | CXCursor, CXSourceRange); | 
|  | } *CXCursorAndRangeVisitorBlock; | 
|  |  | 
|  | #endif // !__has_feature(blocks) | 
|  |  | 
|  | /// \brief The result of comparing two source ranges. | 
|  | enum RangeComparisonResult { | 
|  | /// \brief Either the ranges overlap or one of the ranges is invalid. | 
|  | RangeOverlap, | 
|  |  | 
|  | /// \brief The first range ends before the second range starts. | 
|  | RangeBefore, | 
|  |  | 
|  | /// \brief The first range starts after the second range ends. | 
|  | RangeAfter | 
|  | }; | 
|  |  | 
|  | #endif |