mirror of
https://github.com/intel/llvm.git
synced 2026-02-05 13:21:04 +08:00
Move a couple of SourceManager functions out-of-line; no functionality change.
llvm-svn: 138375
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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.
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
Reference in New Issue
Block a user