Eliminate clang_getInstantiationLocationOffset(), and instead add an
offset parameter to clang_getInstantiationLocation().
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@94573 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/tools/CIndex/CIndex.cpp b/tools/CIndex/CIndex.cpp
index 3a59779..10099ef 100644
--- a/tools/CIndex/CIndex.cpp
+++ b/tools/CIndex/CIndex.cpp
@@ -1123,11 +1123,27 @@
return Result;
}
-static SourceLocation getAdjustedSourceLocation(CXSourceLocation location) {
+void clang_getInstantiationLocation(CXSourceLocation location,
+ CXFile *file,
+ unsigned *line,
+ unsigned *column,
+ unsigned *offset) {
cxloc::CXSourceLocationPtr Ptr
= cxloc::CXSourceLocationPtr::getFromOpaqueValue(location.ptr_data);
SourceLocation Loc = SourceLocation::getFromRawEncoding(location.int_data);
+ if (!Ptr.getPointer() || Loc.isInvalid()) {
+ if (file)
+ *file = 0;
+ if (line)
+ *line = 0;
+ if (column)
+ *column = 0;
+ if (offset)
+ *offset = 0;
+ return;
+ }
+
// FIXME: This is largely copy-paste from
///TextDiagnosticPrinter::HighlightRange. When it is clear that this is
// what we want the two routines should be refactored.
@@ -1159,53 +1175,14 @@
InstLoc = InstLoc.getFileLocWithOffset(Length - 1);
}
- return InstLoc;
-}
-
-void clang_getInstantiationLocation(CXSourceLocation location,
- CXFile *file,
- unsigned *line,
- unsigned *column) {
- cxloc::CXSourceLocationPtr Ptr
- = cxloc::CXSourceLocationPtr::getFromOpaqueValue(location.ptr_data);
- SourceLocation Loc = SourceLocation::getFromRawEncoding(location.int_data);
-
- if (!Ptr.getPointer() || Loc.isInvalid()) {
- if (file)
- *file = 0;
- if (line)
- *line = 0;
- if (column)
- *column = 0;
- return;
- }
-
- SourceLocation InstLoc = getAdjustedSourceLocation(location);
- ASTContext &Context = *Ptr.getPointer();
- SourceManager &SM = Context.getSourceManager();
if (file)
*file = (void *)SM.getFileEntryForID(SM.getFileID(InstLoc));
if (line)
*line = SM.getInstantiationLineNumber(InstLoc);
if (column)
*column = SM.getInstantiationColumnNumber(InstLoc);
-}
-
-void clang_getInstantiationLocationOffset(CXSourceLocation location,
- CXFile *file,
- unsigned *offset) {
- cxloc::CXSourceLocationPtr Ptr
- = cxloc::CXSourceLocationPtr::getFromOpaqueValue(location.ptr_data);
- SourceLocation Loc = SourceLocation::getFromRawEncoding(location.int_data);
-
- ASTContext &Context = *Ptr.getPointer();
- SourceManager &SM = Context.getSourceManager();
- SourceLocation InstLoc = getAdjustedSourceLocation(location);
- std::pair<FileID, unsigned> Decomposed = SM.getDecomposedLoc(InstLoc);
- if (file)
- *file = (void *)SM.getFileEntryForID(Decomposed.first);
if (offset)
- *offset = Decomposed.second;
+ *offset = SM.getDecomposedLoc(InstLoc).second;
}
CXSourceLocation clang_getRangeStart(CXSourceRange range) {
diff --git a/tools/CIndex/CIndex.exports b/tools/CIndex/CIndex.exports
index fa141fc..ef77fed 100644
--- a/tools/CIndex/CIndex.exports
+++ b/tools/CIndex/CIndex.exports
@@ -29,7 +29,6 @@
_clang_getFileName
_clang_getFileTime
_clang_getInstantiationLocation
-_clang_getInstantiationLocationOffset
_clang_getLocation
_clang_getNullCursor
_clang_getNullLocation
diff --git a/tools/c-index-test/c-index-test.c b/tools/c-index-test/c-index-test.c
index 243b873..7250cc7 100644
--- a/tools/c-index-test/c-index-test.c
+++ b/tools/c-index-test/c-index-test.c
@@ -151,7 +151,7 @@
Referenced = clang_getCursorReferenced(Cursor);
if (!clang_equalCursors(Referenced, clang_getNullCursor())) {
CXSourceLocation Loc = clang_getCursorLocation(Referenced);
- clang_getInstantiationLocation(Loc, 0, &line, &column);
+ clang_getInstantiationLocation(Loc, 0, &line, &column, 0);
printf(":%d:%d", line, column);
}
@@ -164,7 +164,7 @@
CXSourceLocation Loc = clang_getCursorLocation(Cursor);
const char *source;
CXFile file;
- clang_getInstantiationLocation(Loc, &file, 0, 0);
+ clang_getInstantiationLocation(Loc, &file, 0, 0, 0);
source = clang_getFileName(file);
if (!source)
return "<invalid loc>";
@@ -189,9 +189,9 @@
unsigned begin_line, begin_column, end_line, end_column;
clang_getInstantiationLocation(clang_getRangeStart(extent),
- &begin_file, &begin_line, &begin_column);
+ &begin_file, &begin_line, &begin_column, 0);
clang_getInstantiationLocation(clang_getRangeEnd(extent),
- &end_file, &end_line, &end_column);
+ &end_file, &end_line, &end_column, 0);
if (!begin_file || !end_file)
return;
@@ -213,7 +213,7 @@
if (!Data->Filter || (Cursor.kind == *(enum CXCursorKind *)Data->Filter)) {
CXSourceLocation Loc = clang_getCursorLocation(Cursor);
unsigned line, column;
- clang_getInstantiationLocation(Loc, 0, &line, &column);
+ clang_getInstantiationLocation(Loc, 0, &line, &column, 0);
printf("// %s: %s:%d:%d: ", FileCheckPrefix,
GetCursorSource(Cursor), line, column);
PrintCursor(Cursor);
@@ -257,7 +257,7 @@
curColumn++;
Loc = clang_getCursorLocation(Cursor);
- clang_getInstantiationLocation(Loc, &file, 0, 0);
+ clang_getInstantiationLocation(Loc, &file, 0, 0, 0);
source = clang_getFileName(file);
if (source) {
CXSourceLocation RefLoc
@@ -807,9 +807,9 @@
case CXToken_Comment: kind = "Comment"; break;
}
clang_getInstantiationLocation(clang_getRangeStart(extent),
- 0, &start_line, &start_column);
+ 0, &start_line, &start_column, 0);
clang_getInstantiationLocation(clang_getRangeEnd(extent),
- 0, &end_line, &end_column);
+ 0, &end_line, &end_column, 0);
printf("%s: \"%s\" [%d:%d - %d:%d]", kind, clang_getCString(spelling),
start_line, start_column, end_line, end_column);
if (!clang_isInvalid(cursors[i].kind)) {