diff options
author | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2011-09-13 21:49:08 +0000 |
---|---|---|
committer | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2011-09-13 21:49:08 +0000 |
commit | 91672b3c0306bde8b44f38c541d59cd8422e3f93 (patch) | |
tree | a690c9045ffa828ff23f466bae35aa09db6dac1c /clang/tools | |
parent | eaa7433c850c5c71ce9708cd3e62e1e65bb05db9 (diff) | |
download | bcm5719-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.cpp | 28 | ||||
-rw-r--r-- | clang/tools/libclang/libclang.darwin.exports | 1 | ||||
-rw-r--r-- | clang/tools/libclang/libclang.exports | 1 |
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 |