diff options
author | Chris Lattner <sabre@nondot.org> | 2009-01-17 06:22:33 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2009-01-17 06:22:33 +0000 |
commit | d32480d3db582186355d575db0421dd2823080b6 (patch) | |
tree | d0eec11f7cf221334aba2016cb3c39c5b6d2710f /clang/lib/Lex/ScratchBuffer.cpp | |
parent | d250ef911f62cb317596ba0aef9e3d75ca056d36 (diff) | |
download | bcm5719-llvm-d32480d3db582186355d575db0421dd2823080b6.tar.gz bcm5719-llvm-d32480d3db582186355d575db0421dd2823080b6.zip |
this massive patch introduces a simple new abstraction: it makes
"FileID" a concept that is now enforced by the compiler's type checker
instead of yet-another-random-unsigned floating around.
This is an important distinction from the "FileID" currently tracked by
SourceLocation. *That* FileID may refer to the start of a file or to a
chunk within it. The new FileID *only* refers to the file (and its
#include stack and eventually #line data), it cannot refer to a chunk.
FileID is a completely opaque datatype to all clients, only SourceManager
is allowed to poke and prod it.
llvm-svn: 62407
Diffstat (limited to 'clang/lib/Lex/ScratchBuffer.cpp')
-rw-r--r-- | clang/lib/Lex/ScratchBuffer.cpp | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/clang/lib/Lex/ScratchBuffer.cpp b/clang/lib/Lex/ScratchBuffer.cpp index 99fbdf75654..ec07a71baf6 100644 --- a/clang/lib/Lex/ScratchBuffer.cpp +++ b/clang/lib/Lex/ScratchBuffer.cpp @@ -24,7 +24,6 @@ static const unsigned ScratchBufSize = 4060; ScratchBuffer::ScratchBuffer(SourceManager &SM) : SourceMgr(SM), CurBuffer(0) { // Set BytesUsed so that the first call to getToken will require an alloc. BytesUsed = ScratchBufSize; - FileID = 0; } /// getToken - Splat the specified text into a temporary MemoryBuffer and @@ -44,7 +43,7 @@ SourceLocation ScratchBuffer::getToken(const char *Buf, unsigned Len) { assert(BytesUsed-Len < (1 << SourceLocation::FilePosBits) && "Out of range file position!"); - return SourceLocation::getFileLoc(FileID, BytesUsed-Len); + return BufferStartLoc.getFileLocWithOffset(BytesUsed-Len); } @@ -66,7 +65,8 @@ void ScratchBuffer::AllocScratchBuffer(unsigned RequestLen) { llvm::MemoryBuffer *Buf = llvm::MemoryBuffer::getNewMemBuffer(RequestLen, "<scratch space>"); - FileID = SourceMgr.createFileIDForMemBuffer(Buf); + FileID FID = SourceMgr.createFileIDForMemBuffer(Buf); + BufferStartLoc = SourceMgr.getLocForStartOfFile(FID); CurBuffer = const_cast<char*>(Buf->getBufferStart()); BytesUsed = 0; } |