diff options
author | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2011-08-23 21:02:28 +0000 |
---|---|---|
committer | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2011-08-23 21:02:28 +0000 |
commit | 296374b5015aa82bdbfdf852bc3ed6031633dbec (patch) | |
tree | 1fa4b984be31bb24969f6e6eaf3423ed3c72d79b /clang/lib/Basic/SourceManager.cpp | |
parent | 20d4e68195c972e2e2f061e6b148b35538d8103e (diff) | |
download | bcm5719-llvm-296374b5015aa82bdbfdf852bc3ed6031633dbec.tar.gz bcm5719-llvm-296374b5015aa82bdbfdf852bc3ed6031633dbec.zip |
Move a couple of SourceManager functions out-of-line; no functionality change.
llvm-svn: 138375
Diffstat (limited to 'clang/lib/Basic/SourceManager.cpp')
-rw-r--r-- | clang/lib/Basic/SourceManager.cpp | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/clang/lib/Basic/SourceManager.cpp b/clang/lib/Basic/SourceManager.cpp index 79756bb8ef7..bf2c8be4679 100644 --- a/clang/lib/Basic/SourceManager.cpp +++ b/clang/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. //===----------------------------------------------------------------------===// |