Break SourceManager::translateFileLineCol into translateLineCol that returns the

source location of line:col of a specific FileID.

llvm-svn: 140059
This commit is contained in:
Argyrios Kyrtzidis 2011-09-19 20:40:29 +00:00
parent 64f6381097
commit 532c5196b0
2 changed files with 26 additions and 7 deletions

View File

@ -1119,6 +1119,10 @@ public:
SourceLocation translateFileLineCol(const FileEntry *SourceFile,
unsigned Line, unsigned Col);
/// \brief Get the source location in \arg FID for the given line:col.
/// Returns null location if \arg FID is not a file SLocEntry.
SourceLocation translateLineCol(FileID FID, unsigned Line, unsigned Col);
/// \brief If \arg Loc points inside a function macro argument, the returned
/// location will be the macro location in which the argument was expanded.
/// If a macro argument is used multiple times, the expanded location will

View File

@ -1433,14 +1433,29 @@ SourceLocation SourceManager::translateFileLineCol(const FileEntry *SourceFile,
}
}
if (FirstFID.isInvalid())
return translateLineCol(FirstFID, Line, Col);
}
/// \brief Get the source location in \arg FID for the given line:col.
/// Returns null location if \arg FID is not a file SLocEntry.
SourceLocation SourceManager::translateLineCol(FileID FID,
unsigned Line, unsigned Col) {
if (FID.isInvalid())
return SourceLocation();
bool Invalid = false;
const SLocEntry &Entry = getSLocEntry(FID, &Invalid);
if (Invalid)
return SourceLocation();
if (!Entry.isFile())
return SourceLocation();
if (Line == 1 && Col == 1)
return getLocForStartOfFile(FirstFID);
return getLocForStartOfFile(FID);
ContentCache *Content
= const_cast<ContentCache *>(getOrCreateContentCache(SourceFile));
= const_cast<ContentCache *>(Entry.getFile().getContentCache());
if (!Content)
return SourceLocation();
@ -1457,7 +1472,7 @@ SourceLocation SourceManager::translateFileLineCol(const FileEntry *SourceFile,
unsigned Size = Content->getBuffer(Diag, *this)->getBufferSize();
if (Size > 0)
--Size;
return getLocForStartOfFile(FirstFID).getLocWithOffset(Size);
return getLocForStartOfFile(FID).getLocWithOffset(Size);
}
unsigned FilePos = Content->SourceLineCache[Line - 1];
@ -1469,9 +1484,9 @@ SourceLocation SourceManager::translateFileLineCol(const FileEntry *SourceFile,
while (i < BufLength-1 && i < Col-1 && Buf[i] != '\n' && Buf[i] != '\r')
++i;
if (i < Col-1)
return getLocForStartOfFile(FirstFID).getLocWithOffset(FilePos + i);
return getLocForStartOfFile(FID).getLocWithOffset(FilePos + i);
return getLocForStartOfFile(FirstFID).getLocWithOffset(FilePos + Col - 1);
return getLocForStartOfFile(FID).getLocWithOffset(FilePos + Col - 1);
}
/// \brief Compute a map of macro argument chunks to their expanded source