| //===- CXString.h - Routines for manipulating CXStrings -------------------===// |
| // |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
| // See https://llvm.org/LICENSE.txt for license information. |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
| // |
| //===----------------------------------------------------------------------===// |
| // |
| // 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) |
| |
| /// The result of comparing two source ranges. |
| enum RangeComparisonResult { |
| /// Either the ranges overlap or one of the ranges is invalid. |
| RangeOverlap, |
| |
| /// The first range ends before the second range starts. |
| RangeBefore, |
| |
| /// The first range starts after the second range ends. |
| RangeAfter |
| }; |
| |
| #endif |