mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2024-11-24 06:10:12 +00:00
SourceManager: Make LastLineNoContentCache and ContentCache::SourceLineCache mutable, NFC
Avoid some noisy `const_cast`s by making `ContentCache::SourceLineCache` and `SourceManager::LastLineNoContentCache` both mutable. Differential Revision: https://reviews.llvm.org/D89914
This commit is contained in:
parent
0f0fd383b4
commit
5431c37b55
@ -146,7 +146,7 @@ namespace SrcMgr {
|
||||
///
|
||||
/// 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.
|
||||
@ -719,7 +719,7 @@ class SourceManager : public RefCountedBase<SourceManager> {
|
||||
/// 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;
|
||||
|
||||
|
@ -1261,20 +1261,20 @@ unsigned SourceManager::getPresumedColumnNumber(SourceLocation Loc,
|
||||
#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,
|
||||
@ -1324,7 +1324,7 @@ unsigned SourceManager::getLineNumber(FileID FID, unsigned FilePos,
|
||||
return 1;
|
||||
}
|
||||
|
||||
ContentCache *Content;
|
||||
const ContentCache *Content;
|
||||
if (LastLineNoFileIDQuery == FID)
|
||||
Content = LastLineNoContentCache;
|
||||
else {
|
||||
@ -1336,14 +1336,14 @@ unsigned SourceManager::getLineNumber(FileID FID, unsigned FilePos,
|
||||
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)
|
||||
@ -1685,14 +1685,13 @@ SourceLocation SourceManager::translateLineCol(FileID FID,
|
||||
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();
|
||||
}
|
||||
|
@ -37,11 +37,10 @@ SourceLocation ScratchBuffer::getToken(const char *Buf, unsigned Len,
|
||||
else {
|
||||
// Clear out the source line cache if it's already been computed.
|
||||
// FIXME: Allow this to be incrementally extended.
|
||||
auto *ContentCache = const_cast<SrcMgr::ContentCache *>(
|
||||
&SourceMgr.getSLocEntry(SourceMgr.getFileID(BufferStartLoc))
|
||||
.getFile()
|
||||
.getContentCache());
|
||||
ContentCache->SourceLineCache = SrcMgr::LineOffsetMapping();
|
||||
SourceMgr.getSLocEntry(SourceMgr.getFileID(BufferStartLoc))
|
||||
.getFile()
|
||||
.getContentCache()
|
||||
.SourceLineCache = SrcMgr::LineOffsetMapping();
|
||||
}
|
||||
|
||||
// Prefix the token with a \n, so that it looks like it is the first thing on
|
||||
|
Loading…
Reference in New Issue
Block a user