Move a couple of SourceManager functions out-of-line; no functionality change.

llvm-svn: 138375
This commit is contained in:
Argyrios Kyrtzidis
2011-08-23 21:02:28 +00:00
parent 20d4e68195
commit 296374b501
2 changed files with 45 additions and 38 deletions

View File

@@ -967,23 +967,7 @@ public:
}
/// \brief The size of the SLocEnty that \arg FID represents.
unsigned getFileIDSize(FileID FID) const {
bool Invalid = false;
const SrcMgr::SLocEntry &Entry = getSLocEntry(FID, &Invalid);
if (Invalid)
return 0;
int ID = FID.ID;
unsigned NextOffset;
if ((ID > 0 && unsigned(ID+1) == local_sloc_entry_size()))
NextOffset = getNextLocalOffset();
else if (ID+1 == -1)
NextOffset = MaxLoadedOffset;
else
NextOffset = getSLocEntry(FileID::get(ID+1)).getOffset();
return NextOffset - Entry.getOffset() - 1;
}
unsigned getFileIDSize(FileID FID) const;
/// \brief Given a specific FileID, returns true if \arg Loc is inside that
/// FileID chunk and sets relative offset (offset of \arg Loc from beginning
@@ -998,27 +982,7 @@ public:
/// (offset of \arg Loc from beginning of chunk) to \arg relativeOffset.
bool isInFileID(SourceLocation Loc,
FileID FID, unsigned offset, unsigned length,
unsigned *relativeOffset = 0) const {
assert(!FID.isInvalid());
if (Loc.isInvalid())
return false;
unsigned FIDOffs = getSLocEntry(FID).getOffset();
unsigned start = FIDOffs + offset;
unsigned end = start + length;
// Make sure offset/length describe a chunk inside the given FileID.
assert(start < FIDOffs + getFileIDSize(FID));
assert(end <= FIDOffs + getFileIDSize(FID));
if (Loc.getOffset() >= start && Loc.getOffset() < end) {
if (relativeOffset)
*relativeOffset = Loc.getOffset() - start;
return true;
}
return false;
}
unsigned *relativeOffset = 0) const;
//===--------------------------------------------------------------------===//
// Line Table Manipulation Routines

View File

@@ -1280,6 +1280,49 @@ PresumedLoc SourceManager::getPresumedLoc(SourceLocation Loc) const {
return PresumedLoc(Filename, LineNo, ColNo, IncludeLoc);
}
/// \brief The size of the SLocEnty that \arg FID represents.
unsigned SourceManager::getFileIDSize(FileID FID) const {
bool Invalid = false;
const SrcMgr::SLocEntry &Entry = getSLocEntry(FID, &Invalid);
if (Invalid)
return 0;
int ID = FID.ID;
unsigned NextOffset;
if ((ID > 0 && unsigned(ID+1) == local_sloc_entry_size()))
NextOffset = getNextLocalOffset();
else if (ID+1 == -1)
NextOffset = MaxLoadedOffset;
else
NextOffset = getSLocEntry(FileID::get(ID+1)).getOffset();
return NextOffset - Entry.getOffset() - 1;
}
bool SourceManager::isInFileID(SourceLocation Loc,
FileID FID, unsigned offset, unsigned length,
unsigned *relativeOffset) const {
assert(!FID.isInvalid());
if (Loc.isInvalid())
return false;
unsigned FIDOffs = getSLocEntry(FID).getOffset();
unsigned start = FIDOffs + offset;
unsigned end = start + length;
// Make sure offset/length describe a chunk inside the given FileID.
assert(start < FIDOffs + getFileIDSize(FID));
assert(end <= FIDOffs + getFileIDSize(FID));
if (Loc.getOffset() >= start && Loc.getOffset() < end) {
if (relativeOffset)
*relativeOffset = Loc.getOffset() - start;
return true;
}
return false;
}
//===----------------------------------------------------------------------===//
// Other miscellaneous methods.
//===----------------------------------------------------------------------===//