diff options
-rw-r--r-- | include/clang/Basic/SourceManager.h | 40 | ||||
-rw-r--r-- | lib/Basic/SourceManager.cpp | 43 |
2 files changed, 45 insertions, 38 deletions
diff --git a/include/clang/Basic/SourceManager.h b/include/clang/Basic/SourceManager.h index 11bde998a1..8e4f9ed1c5 100644 --- a/include/clang/Basic/SourceManager.h +++ b/include/clang/Basic/SourceManager.h @@ -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 diff --git a/lib/Basic/SourceManager.cpp b/lib/Basic/SourceManager.cpp index 79756bb8ef..bf2c8be467 100644 --- a/lib/Basic/SourceManager.cpp +++ b/lib/Basic/SourceManager.cpp @@ -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. //===----------------------------------------------------------------------===// |