From 4522f63e00fa6f1276b1d29763a9a4f46f46b6a1 Mon Sep 17 00:00:00 2001 From: Argyrios Kyrtzidis Date: Fri, 12 Apr 2013 17:06:51 +0000 Subject: [PATCH] [libclang] Introduce clang_Location_isInSystemHeader to check if a location resides in a system header. MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit This is a modified patch provided from Mikołaj Siedlarek! git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@179384 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/clang-c/Index.h | 7 ++++++- tools/libclang/CXSourceLocation.cpp | 11 +++++++++++ tools/libclang/libclang.exports | 1 + 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/include/clang-c/Index.h b/include/clang-c/Index.h index 42641df110..3da42ab6b5 100644 --- a/include/clang-c/Index.h +++ b/include/clang-c/Index.h @@ -32,7 +32,7 @@ * compatible, thus CINDEX_VERSION_MAJOR is expected to remain stable. */ #define CINDEX_VERSION_MAJOR 0 -#define CINDEX_VERSION_MINOR 16 +#define CINDEX_VERSION_MINOR 17 #define CINDEX_VERSION_ENCODE(major, minor) ( \ ((major) * 10000) \ @@ -408,6 +408,11 @@ CINDEX_LINKAGE CXSourceLocation clang_getLocationForOffset(CXTranslationUnit tu, CXFile file, unsigned offset); +/** + * \brief Returns non-zero if the given source location is in a system header. + */ +CINDEX_LINKAGE int clang_Location_isInSystemHeader(CXSourceLocation location); + /** * \brief Retrieve a NULL (invalid) source range. */ diff --git a/tools/libclang/CXSourceLocation.cpp b/tools/libclang/CXSourceLocation.cpp index bc8d575190..b7c7622c66 100644 --- a/tools/libclang/CXSourceLocation.cpp +++ b/tools/libclang/CXSourceLocation.cpp @@ -198,6 +198,17 @@ static void createNullLocation(CXString *filename, unsigned *line, extern "C" { +int clang_Location_isInSystemHeader(CXSourceLocation location) { + const SourceLocation Loc = + SourceLocation::getFromRawEncoding(location.int_data); + if (Loc.isInvalid()) + return 0; + + const SourceManager &SM = + *static_cast(location.ptr_data[0]); + return SM.isInSystemHeader(Loc); +} + void clang_getExpansionLocation(CXSourceLocation location, CXFile *file, unsigned *line, diff --git a/tools/libclang/libclang.exports b/tools/libclang/libclang.exports index 1f179f13bd..16932a5100 100644 --- a/tools/libclang/libclang.exports +++ b/tools/libclang/libclang.exports @@ -248,6 +248,7 @@ clang_isUnexposed clang_isVirtualBase clang_isVolatileQualifiedType clang_loadDiagnostics +clang_Location_isInSystemHeader clang_parseTranslationUnit clang_remap_dispose clang_remap_getFilenames -- 2.40.0