1aed123ec3cc37e457fe20a6158fdadf8849ad916Argyrios Kyrtzidis//===- CXString.h - Routines for manipulating CXStrings -------------------===// 2aed123ec3cc37e457fe20a6158fdadf8849ad916Argyrios Kyrtzidis// 3aed123ec3cc37e457fe20a6158fdadf8849ad916Argyrios Kyrtzidis// The LLVM Compiler Infrastructure 4aed123ec3cc37e457fe20a6158fdadf8849ad916Argyrios Kyrtzidis// 5aed123ec3cc37e457fe20a6158fdadf8849ad916Argyrios Kyrtzidis// This file is distributed under the University of Illinois Open Source 6aed123ec3cc37e457fe20a6158fdadf8849ad916Argyrios Kyrtzidis// License. See LICENSE.TXT for details. 7aed123ec3cc37e457fe20a6158fdadf8849ad916Argyrios Kyrtzidis// 8aed123ec3cc37e457fe20a6158fdadf8849ad916Argyrios Kyrtzidis//===----------------------------------------------------------------------===// 9aed123ec3cc37e457fe20a6158fdadf8849ad916Argyrios Kyrtzidis// 10aed123ec3cc37e457fe20a6158fdadf8849ad916Argyrios Kyrtzidis// This file defines routines for manipulating CXStrings. 11aed123ec3cc37e457fe20a6158fdadf8849ad916Argyrios Kyrtzidis// 12aed123ec3cc37e457fe20a6158fdadf8849ad916Argyrios Kyrtzidis//===----------------------------------------------------------------------===// 13aed123ec3cc37e457fe20a6158fdadf8849ad916Argyrios Kyrtzidis 14aed123ec3cc37e457fe20a6158fdadf8849ad916Argyrios Kyrtzidis#ifndef LLVM_LIBCLANG_INDEX_INTERNAL_H 15aed123ec3cc37e457fe20a6158fdadf8849ad916Argyrios Kyrtzidis#define LLVM_LIBCLANG_INDEX_INTERNAL_H 16aed123ec3cc37e457fe20a6158fdadf8849ad916Argyrios Kyrtzidis 17aed123ec3cc37e457fe20a6158fdadf8849ad916Argyrios Kyrtzidis#include "clang-c/Index.h" 18aed123ec3cc37e457fe20a6158fdadf8849ad916Argyrios Kyrtzidis 19aed123ec3cc37e457fe20a6158fdadf8849ad916Argyrios Kyrtzidis#ifndef __has_feature 20aed123ec3cc37e457fe20a6158fdadf8849ad916Argyrios Kyrtzidis#define __has_feature(x) 0 21aed123ec3cc37e457fe20a6158fdadf8849ad916Argyrios Kyrtzidis#endif 22aed123ec3cc37e457fe20a6158fdadf8849ad916Argyrios Kyrtzidis 23aed123ec3cc37e457fe20a6158fdadf8849ad916Argyrios Kyrtzidis#if __has_feature(blocks) 24aed123ec3cc37e457fe20a6158fdadf8849ad916Argyrios Kyrtzidis 25aed123ec3cc37e457fe20a6158fdadf8849ad916Argyrios Kyrtzidis#define INVOKE_BLOCK2(block, arg1, arg2) block(arg1, arg2) 26aed123ec3cc37e457fe20a6158fdadf8849ad916Argyrios Kyrtzidis 27aed123ec3cc37e457fe20a6158fdadf8849ad916Argyrios Kyrtzidis#else 28aed123ec3cc37e457fe20a6158fdadf8849ad916Argyrios Kyrtzidis// If we are compiled with a compiler that doesn't have native blocks support, 29aed123ec3cc37e457fe20a6158fdadf8849ad916Argyrios Kyrtzidis// define and call the block manually. 30aed123ec3cc37e457fe20a6158fdadf8849ad916Argyrios Kyrtzidis 31aed123ec3cc37e457fe20a6158fdadf8849ad916Argyrios Kyrtzidis#define INVOKE_BLOCK2(block, arg1, arg2) block->invoke(block, arg1, arg2) 32aed123ec3cc37e457fe20a6158fdadf8849ad916Argyrios Kyrtzidis 33aed123ec3cc37e457fe20a6158fdadf8849ad916Argyrios Kyrtzidistypedef struct _CXCursorAndRangeVisitorBlock { 34aed123ec3cc37e457fe20a6158fdadf8849ad916Argyrios Kyrtzidis void *isa; 35aed123ec3cc37e457fe20a6158fdadf8849ad916Argyrios Kyrtzidis int flags; 36aed123ec3cc37e457fe20a6158fdadf8849ad916Argyrios Kyrtzidis int reserved; 37aed123ec3cc37e457fe20a6158fdadf8849ad916Argyrios Kyrtzidis enum CXVisitorResult (*invoke)(_CXCursorAndRangeVisitorBlock *, 38aed123ec3cc37e457fe20a6158fdadf8849ad916Argyrios Kyrtzidis CXCursor, CXSourceRange); 39aed123ec3cc37e457fe20a6158fdadf8849ad916Argyrios Kyrtzidis} *CXCursorAndRangeVisitorBlock; 40aed123ec3cc37e457fe20a6158fdadf8849ad916Argyrios Kyrtzidis 41aed123ec3cc37e457fe20a6158fdadf8849ad916Argyrios Kyrtzidis#endif // !__has_feature(blocks) 42aed123ec3cc37e457fe20a6158fdadf8849ad916Argyrios Kyrtzidis 4300096f1d285135a17dfb1564177567805a2e5fcbArgyrios Kyrtzidis/// \brief The result of comparing two source ranges. 4400096f1d285135a17dfb1564177567805a2e5fcbArgyrios Kyrtzidisenum RangeComparisonResult { 4500096f1d285135a17dfb1564177567805a2e5fcbArgyrios Kyrtzidis /// \brief Either the ranges overlap or one of the ranges is invalid. 4600096f1d285135a17dfb1564177567805a2e5fcbArgyrios Kyrtzidis RangeOverlap, 4700096f1d285135a17dfb1564177567805a2e5fcbArgyrios Kyrtzidis 4800096f1d285135a17dfb1564177567805a2e5fcbArgyrios Kyrtzidis /// \brief The first range ends before the second range starts. 4900096f1d285135a17dfb1564177567805a2e5fcbArgyrios Kyrtzidis RangeBefore, 5000096f1d285135a17dfb1564177567805a2e5fcbArgyrios Kyrtzidis 5100096f1d285135a17dfb1564177567805a2e5fcbArgyrios Kyrtzidis /// \brief The first range starts after the second range ends. 5200096f1d285135a17dfb1564177567805a2e5fcbArgyrios Kyrtzidis RangeAfter 5300096f1d285135a17dfb1564177567805a2e5fcbArgyrios Kyrtzidis}; 5400096f1d285135a17dfb1564177567805a2e5fcbArgyrios Kyrtzidis 55aed123ec3cc37e457fe20a6158fdadf8849ad916Argyrios Kyrtzidis#endif 56