123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- //===- CXSourceLocation.h - CXSourceLocations Utilities ---------*- C++ -*-===//
- //
- // 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 CXSourceLocations.
- //
- //===----------------------------------------------------------------------===//
- #ifndef LLVM_CLANG_TOOLS_LIBCLANG_CXSOURCELOCATION_H
- #define LLVM_CLANG_TOOLS_LIBCLANG_CXSOURCELOCATION_H
- #include "clang-c/Index.h"
- #include "clang/AST/ASTContext.h"
- #include "clang/Basic/LangOptions.h"
- #include "clang/Basic/SourceLocation.h"
- namespace clang {
- class SourceManager;
- namespace cxloc {
- /// Translate a Clang source location into a CIndex source location.
- static inline CXSourceLocation
- translateSourceLocation(const SourceManager &SM, const LangOptions &LangOpts,
- SourceLocation Loc) {
- if (Loc.isInvalid())
- return clang_getNullLocation();
- CXSourceLocation Result = { { &SM, &LangOpts, },
- Loc.getRawEncoding() };
- return Result;
- }
-
- /// Translate a Clang source location into a CIndex source location.
- static inline CXSourceLocation translateSourceLocation(ASTContext &Context,
- SourceLocation Loc) {
- return translateSourceLocation(Context.getSourceManager(),
- Context.getLangOpts(),
- Loc);
- }
- /// Translate a Clang source range into a CIndex source range.
- ///
- /// Clang internally represents ranges where the end location points to the
- /// start of the token at the end. However, for external clients it is more
- /// useful to have a CXSourceRange be a proper half-open interval. This routine
- /// does the appropriate translation.
- CXSourceRange translateSourceRange(const SourceManager &SM,
- const LangOptions &LangOpts,
- const CharSourceRange &R);
-
- /// Translate a Clang source range into a CIndex source range.
- static inline CXSourceRange translateSourceRange(ASTContext &Context,
- SourceRange R) {
- return translateSourceRange(Context.getSourceManager(),
- Context.getLangOpts(),
- CharSourceRange::getTokenRange(R));
- }
- static inline SourceLocation translateSourceLocation(CXSourceLocation L) {
- return SourceLocation::getFromRawEncoding(L.int_data);
- }
- static inline SourceRange translateCXSourceRange(CXSourceRange R) {
- return SourceRange(SourceLocation::getFromRawEncoding(R.begin_int_data),
- SourceLocation::getFromRawEncoding(R.end_int_data));
- }
- /// Translates CXSourceRange to CharSourceRange.
- /// The semantics of \p R are:
- /// R.begin_int_data is first character of the range.
- /// R.end_int_data is one character past the end of the range.
- CharSourceRange translateCXRangeToCharRange(CXSourceRange R);
- }} // end namespace: clang::cxloc
- #endif
|