Eliminate clang_getInstantiationLocationOffset(), and instead add an
offset parameter to clang_getInstantiationLocation(). llvm-svn: 94573
This commit is contained in:
parent
85be4333ad
commit
9bd6db5834
|
@ -352,8 +352,8 @@ CINDEX_LINKAGE CXSourceRange clang_getRange(CXSourceLocation begin,
|
||||||
CXSourceLocation end);
|
CXSourceLocation end);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief Retrieve the file, line, and column represented by the given source
|
* \brief Retrieve the file, line, column, and offset represented by
|
||||||
* location.
|
* the given source location.
|
||||||
*
|
*
|
||||||
* \param location the location within a source file that will be decomposed
|
* \param location the location within a source file that will be decomposed
|
||||||
* into its parts.
|
* into its parts.
|
||||||
|
@ -366,29 +366,15 @@ CINDEX_LINKAGE CXSourceRange clang_getRange(CXSourceLocation begin,
|
||||||
*
|
*
|
||||||
* \param column [out] if non-NULL, will be set to the column to which the given
|
* \param column [out] if non-NULL, will be set to the column to which the given
|
||||||
* source location points.
|
* source location points.
|
||||||
|
*
|
||||||
|
* \param offset [out] if non-NULL, will be set to the offset into the
|
||||||
|
* buffer to which the given source location points.
|
||||||
*/
|
*/
|
||||||
CINDEX_LINKAGE void clang_getInstantiationLocation(CXSourceLocation location,
|
CINDEX_LINKAGE void clang_getInstantiationLocation(CXSourceLocation location,
|
||||||
CXFile *file,
|
CXFile *file,
|
||||||
unsigned *line,
|
unsigned *line,
|
||||||
unsigned *column);
|
unsigned *column,
|
||||||
|
unsigned *offset);
|
||||||
/**
|
|
||||||
* \brief Retrieve the file and offset within that file represented by
|
|
||||||
* the given source location.
|
|
||||||
*
|
|
||||||
* \param location the location within a source file that will be decomposed
|
|
||||||
* into its parts.
|
|
||||||
*
|
|
||||||
* \param file [out] if non-NULL, will be set to the file to which the
|
|
||||||
* given source location points.
|
|
||||||
*
|
|
||||||
* \param offset [out] if non-NULL, will be set to the offset into the
|
|
||||||
* \p file to which the given source location points.
|
|
||||||
*/
|
|
||||||
CINDEX_LINKAGE void clang_getInstantiationLocationOffset(
|
|
||||||
CXSourceLocation location,
|
|
||||||
CXFile *File,
|
|
||||||
unsigned *Offset);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief Retrieve a source location representing the first character within a
|
* \brief Retrieve a source location representing the first character within a
|
||||||
|
|
|
@ -1123,11 +1123,27 @@ CXSourceRange clang_getRange(CXSourceLocation begin, CXSourceLocation end) {
|
||||||
return Result;
|
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 Ptr
|
||||||
= cxloc::CXSourceLocationPtr::getFromOpaqueValue(location.ptr_data);
|
= cxloc::CXSourceLocationPtr::getFromOpaqueValue(location.ptr_data);
|
||||||
SourceLocation Loc = SourceLocation::getFromRawEncoding(location.int_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
|
// FIXME: This is largely copy-paste from
|
||||||
///TextDiagnosticPrinter::HighlightRange. When it is clear that this is
|
///TextDiagnosticPrinter::HighlightRange. When it is clear that this is
|
||||||
// what we want the two routines should be refactored.
|
// what we want the two routines should be refactored.
|
||||||
|
@ -1159,53 +1175,14 @@ static SourceLocation getAdjustedSourceLocation(CXSourceLocation location) {
|
||||||
InstLoc = InstLoc.getFileLocWithOffset(Length - 1);
|
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)
|
if (file)
|
||||||
*file = (void *)SM.getFileEntryForID(SM.getFileID(InstLoc));
|
*file = (void *)SM.getFileEntryForID(SM.getFileID(InstLoc));
|
||||||
if (line)
|
if (line)
|
||||||
*line = SM.getInstantiationLineNumber(InstLoc);
|
*line = SM.getInstantiationLineNumber(InstLoc);
|
||||||
if (column)
|
if (column)
|
||||||
*column = SM.getInstantiationColumnNumber(InstLoc);
|
*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)
|
if (offset)
|
||||||
*offset = Decomposed.second;
|
*offset = SM.getDecomposedLoc(InstLoc).second;
|
||||||
}
|
}
|
||||||
|
|
||||||
CXSourceLocation clang_getRangeStart(CXSourceRange range) {
|
CXSourceLocation clang_getRangeStart(CXSourceRange range) {
|
||||||
|
|
|
@ -29,7 +29,6 @@ _clang_getFile
|
||||||
_clang_getFileName
|
_clang_getFileName
|
||||||
_clang_getFileTime
|
_clang_getFileTime
|
||||||
_clang_getInstantiationLocation
|
_clang_getInstantiationLocation
|
||||||
_clang_getInstantiationLocationOffset
|
|
||||||
_clang_getLocation
|
_clang_getLocation
|
||||||
_clang_getNullCursor
|
_clang_getNullCursor
|
||||||
_clang_getNullLocation
|
_clang_getNullLocation
|
||||||
|
|
|
@ -151,7 +151,7 @@ static void PrintCursor(CXCursor Cursor) {
|
||||||
Referenced = clang_getCursorReferenced(Cursor);
|
Referenced = clang_getCursorReferenced(Cursor);
|
||||||
if (!clang_equalCursors(Referenced, clang_getNullCursor())) {
|
if (!clang_equalCursors(Referenced, clang_getNullCursor())) {
|
||||||
CXSourceLocation Loc = clang_getCursorLocation(Referenced);
|
CXSourceLocation Loc = clang_getCursorLocation(Referenced);
|
||||||
clang_getInstantiationLocation(Loc, 0, &line, &column);
|
clang_getInstantiationLocation(Loc, 0, &line, &column, 0);
|
||||||
printf(":%d:%d", line, column);
|
printf(":%d:%d", line, column);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -164,7 +164,7 @@ static const char* GetCursorSource(CXCursor Cursor) {
|
||||||
CXSourceLocation Loc = clang_getCursorLocation(Cursor);
|
CXSourceLocation Loc = clang_getCursorLocation(Cursor);
|
||||||
const char *source;
|
const char *source;
|
||||||
CXFile file;
|
CXFile file;
|
||||||
clang_getInstantiationLocation(Loc, &file, 0, 0);
|
clang_getInstantiationLocation(Loc, &file, 0, 0, 0);
|
||||||
source = clang_getFileName(file);
|
source = clang_getFileName(file);
|
||||||
if (!source)
|
if (!source)
|
||||||
return "<invalid loc>";
|
return "<invalid loc>";
|
||||||
|
@ -189,9 +189,9 @@ static void PrintCursorExtent(CXCursor C) {
|
||||||
unsigned begin_line, begin_column, end_line, end_column;
|
unsigned begin_line, begin_column, end_line, end_column;
|
||||||
|
|
||||||
clang_getInstantiationLocation(clang_getRangeStart(extent),
|
clang_getInstantiationLocation(clang_getRangeStart(extent),
|
||||||
&begin_file, &begin_line, &begin_column);
|
&begin_file, &begin_line, &begin_column, 0);
|
||||||
clang_getInstantiationLocation(clang_getRangeEnd(extent),
|
clang_getInstantiationLocation(clang_getRangeEnd(extent),
|
||||||
&end_file, &end_line, &end_column);
|
&end_file, &end_line, &end_column, 0);
|
||||||
if (!begin_file || !end_file)
|
if (!begin_file || !end_file)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -213,7 +213,7 @@ enum CXChildVisitResult FilteredPrintingVisitor(CXCursor Cursor,
|
||||||
if (!Data->Filter || (Cursor.kind == *(enum CXCursorKind *)Data->Filter)) {
|
if (!Data->Filter || (Cursor.kind == *(enum CXCursorKind *)Data->Filter)) {
|
||||||
CXSourceLocation Loc = clang_getCursorLocation(Cursor);
|
CXSourceLocation Loc = clang_getCursorLocation(Cursor);
|
||||||
unsigned line, column;
|
unsigned line, column;
|
||||||
clang_getInstantiationLocation(Loc, 0, &line, &column);
|
clang_getInstantiationLocation(Loc, 0, &line, &column, 0);
|
||||||
printf("// %s: %s:%d:%d: ", FileCheckPrefix,
|
printf("// %s: %s:%d:%d: ", FileCheckPrefix,
|
||||||
GetCursorSource(Cursor), line, column);
|
GetCursorSource(Cursor), line, column);
|
||||||
PrintCursor(Cursor);
|
PrintCursor(Cursor);
|
||||||
|
@ -257,7 +257,7 @@ static enum CXChildVisitResult FunctionScanVisitor(CXCursor Cursor,
|
||||||
curColumn++;
|
curColumn++;
|
||||||
|
|
||||||
Loc = clang_getCursorLocation(Cursor);
|
Loc = clang_getCursorLocation(Cursor);
|
||||||
clang_getInstantiationLocation(Loc, &file, 0, 0);
|
clang_getInstantiationLocation(Loc, &file, 0, 0, 0);
|
||||||
source = clang_getFileName(file);
|
source = clang_getFileName(file);
|
||||||
if (source) {
|
if (source) {
|
||||||
CXSourceLocation RefLoc
|
CXSourceLocation RefLoc
|
||||||
|
@ -807,9 +807,9 @@ int perform_token_annotation(int argc, const char **argv) {
|
||||||
case CXToken_Comment: kind = "Comment"; break;
|
case CXToken_Comment: kind = "Comment"; break;
|
||||||
}
|
}
|
||||||
clang_getInstantiationLocation(clang_getRangeStart(extent),
|
clang_getInstantiationLocation(clang_getRangeStart(extent),
|
||||||
0, &start_line, &start_column);
|
0, &start_line, &start_column, 0);
|
||||||
clang_getInstantiationLocation(clang_getRangeEnd(extent),
|
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),
|
printf("%s: \"%s\" [%d:%d - %d:%d]", kind, clang_getCString(spelling),
|
||||||
start_line, start_column, end_line, end_column);
|
start_line, start_column, end_line, end_column);
|
||||||
if (!clang_isInvalid(cursors[i].kind)) {
|
if (!clang_isInvalid(cursors[i].kind)) {
|
||||||
|
|
Loading…
Reference in New Issue