summaryrefslogtreecommitdiffstats
path: root/clang/tools
diff options
context:
space:
mode:
authorArgyrios Kyrtzidis <akyrtzi@gmail.com>2011-09-13 21:49:08 +0000
committerArgyrios Kyrtzidis <akyrtzi@gmail.com>2011-09-13 21:49:08 +0000
commit91672b3c0306bde8b44f38c541d59cd8422e3f93 (patch)
treea690c9045ffa828ff23f466bae35aa09db6dac1c /clang/tools
parenteaa7433c850c5c71ce9708cd3e62e1e65bb05db9 (diff)
downloadbcm5719-llvm-91672b3c0306bde8b44f38c541d59cd8422e3f93.tar.gz
bcm5719-llvm-91672b3c0306bde8b44f38c541d59cd8422e3f93.zip
[libclang] Introduce clang_getPresumedLocation which works like clang_getExpansionLocation
but takes into account #line directives coming from preprocessed files. Patch by Vinay Sajip! llvm-svn: 139647
Diffstat (limited to 'clang/tools')
-rw-r--r--clang/tools/libclang/CIndex.cpp28
-rw-r--r--clang/tools/libclang/libclang.darwin.exports1
-rw-r--r--clang/tools/libclang/libclang.exports1
3 files changed, 30 insertions, 0 deletions
diff --git a/clang/tools/libclang/CIndex.cpp b/clang/tools/libclang/CIndex.cpp
index 2f8db5dfcef..51749d7849b 100644
--- a/clang/tools/libclang/CIndex.cpp
+++ b/clang/tools/libclang/CIndex.cpp
@@ -2861,6 +2861,34 @@ void clang_getExpansionLocation(CXSourceLocation location,
*offset = SM.getDecomposedLoc(ExpansionLoc).second;
}
+void clang_getPresumedLocation(CXSourceLocation location,
+ CXString *filename,
+ unsigned *line,
+ unsigned *column) {
+ SourceLocation Loc = SourceLocation::getFromRawEncoding(location.int_data);
+
+ if (!location.ptr_data[0] || Loc.isInvalid()) {
+ if (filename)
+ *filename = createCXString("");
+ if (line)
+ *line = 0;
+ if (column)
+ *column = 0;
+ }
+ else {
+ const SourceManager &SM =
+ *static_cast<const SourceManager*>(location.ptr_data[0]);
+ PresumedLoc PreLoc = SM.getPresumedLoc(Loc);
+
+ if (filename)
+ *filename = createCXString(PreLoc.getFilename());
+ if (line)
+ *line = PreLoc.getLine();
+ if (column)
+ *column = PreLoc.getColumn();
+ }
+}
+
void clang_getInstantiationLocation(CXSourceLocation location,
CXFile *file,
unsigned *line,
diff --git a/clang/tools/libclang/libclang.darwin.exports b/clang/tools/libclang/libclang.darwin.exports
index a858f624c88..21ef35b4572 100644
--- a/clang/tools/libclang/libclang.darwin.exports
+++ b/clang/tools/libclang/libclang.darwin.exports
@@ -102,6 +102,7 @@ _clang_getNumOverloadedDecls
_clang_getOverloadedDecl
_clang_getOverriddenCursors
_clang_getPointeeType
+_clang_getPresumedLocation
_clang_getRange
_clang_getRangeEnd
_clang_getRangeStart
diff --git a/clang/tools/libclang/libclang.exports b/clang/tools/libclang/libclang.exports
index 85e9f026950..ea7aaf00c89 100644
--- a/clang/tools/libclang/libclang.exports
+++ b/clang/tools/libclang/libclang.exports
@@ -102,6 +102,7 @@ clang_getNumOverloadedDecls
clang_getOverloadedDecl
clang_getOverriddenCursors
clang_getPointeeType
+clang_getPresumedLocation
clang_getRange
clang_getRangeEnd
clang_getRangeStart
OpenPOWER on IntegriCloud