///
/// This is lazily computed. The lines are owned by the SourceManager
/// BumpPointerAllocator object.
- LineOffsetMapping SourceLineCache;
+ mutable LineOffsetMapping SourceLineCache;
/// Indicates whether the buffer itself was provided to override
/// the actual file contents.
/// These ivars serve as a cache used in the getLineNumber
/// method which is used to speedup getLineNumber calls to nearby locations.
mutable FileID LastLineNoFileIDQuery;
- mutable SrcMgr::ContentCache *LastLineNoContentCache;
+ mutable const SrcMgr::ContentCache *LastLineNoContentCache;
mutable unsigned LastLineNoFilePos;
mutable unsigned LastLineNoResult;
#endif
static LLVM_ATTRIBUTE_NOINLINE void
-ComputeLineNumbers(DiagnosticsEngine &Diag, ContentCache *FI,
+ComputeLineNumbers(DiagnosticsEngine &Diag, const ContentCache &FI,
llvm::BumpPtrAllocator &Alloc,
const SourceManager &SM, bool &Invalid);
-static void ComputeLineNumbers(DiagnosticsEngine &Diag, ContentCache *FI,
+static void ComputeLineNumbers(DiagnosticsEngine &Diag, const ContentCache &FI,
llvm::BumpPtrAllocator &Alloc,
const SourceManager &SM, bool &Invalid) {
// Note that calling 'getBuffer()' may lazily page in the file.
llvm::Optional<llvm::MemoryBufferRef> Buffer =
- FI->getBufferOrNone(Diag, SM.getFileManager(), SourceLocation());
+ FI.getBufferOrNone(Diag, SM.getFileManager(), SourceLocation());
Invalid = !Buffer;
if (Invalid)
return;
- FI->SourceLineCache = LineOffsetMapping::get(*Buffer, Alloc);
+ FI.SourceLineCache = LineOffsetMapping::get(*Buffer, Alloc);
}
LineOffsetMapping LineOffsetMapping::get(llvm::MemoryBufferRef Buffer,
return 1;
}
- ContentCache *Content;
+ const ContentCache *Content;
if (LastLineNoFileIDQuery == FID)
Content = LastLineNoContentCache;
else {
return 1;
}
- Content = const_cast<ContentCache *>(&Entry.getFile().getContentCache());
+ Content = &Entry.getFile().getContentCache();
}
// If this is the first use of line information for this buffer, compute the
/// SourceLineCache for it on demand.
if (!Content->SourceLineCache) {
bool MyInvalid = false;
- ComputeLineNumbers(Diag, Content, ContentCacheAlloc, *this, MyInvalid);
+ ComputeLineNumbers(Diag, *Content, ContentCacheAlloc, *this, MyInvalid);
if (Invalid)
*Invalid = MyInvalid;
if (MyInvalid)
if (Line == 1 && Col == 1)
return FileLoc;
- ContentCache *Content =
- const_cast<ContentCache *>(&Entry.getFile().getContentCache());
+ const ContentCache *Content = &Entry.getFile().getContentCache();
// If this is the first use of line information for this buffer, compute the
// SourceLineCache for it on demand.
if (!Content->SourceLineCache) {
bool MyInvalid = false;
- ComputeLineNumbers(Diag, Content, ContentCacheAlloc, *this, MyInvalid);
+ ComputeLineNumbers(Diag, *Content, ContentCacheAlloc, *this, MyInvalid);
if (MyInvalid)
return SourceLocation();
}