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