forked from OSchip/llvm-project
Change PTHLexer::getSourceLocation() to not call GetToken() and instead just read the file offset in the token data buffer directly.
llvm-svn: 61170
This commit is contained in:
parent
be4fb8a25f
commit
63ff81c4e1
|
@ -90,8 +90,8 @@ public:
|
|||
|
||||
/// getSourceLocation - Return a source location for the token in
|
||||
/// the current file.
|
||||
SourceLocation getSourceLocation() { return GetToken().getLocation(); }
|
||||
|
||||
SourceLocation getSourceLocation();
|
||||
|
||||
/// SkipBlock - Used by Preprocessor to skip the current conditional block.
|
||||
bool SkipBlock();
|
||||
|
||||
|
|
|
@ -262,6 +262,21 @@ bool PTHLexer::SkipBlock() {
|
|||
return isEndif;
|
||||
}
|
||||
|
||||
SourceLocation PTHLexer::getSourceLocation() {
|
||||
// getLocation is not on the hot path. It is used to get the location of
|
||||
// the next token when transitioning back to this lexer when done
|
||||
// handling a #included file. Just read the necessary data from the token
|
||||
// data buffer to construct the SourceLocation object.
|
||||
// NOTE: This is a virtual function; hence it is defined out-of-line.
|
||||
const char* p = CurPtr + (1 + 1 + 4);
|
||||
uint32_t offset =
|
||||
((uint32_t) ((uint8_t) p[0]))
|
||||
| (((uint32_t) ((uint8_t) p[1])) << 8)
|
||||
| (((uint32_t) ((uint8_t) p[2])) << 16)
|
||||
| (((uint32_t) ((uint8_t) p[3])) << 24);
|
||||
return SourceLocation::getFileLoc(FileID, offset);
|
||||
}
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// Token reconstruction from the PTH file.
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
|
Loading…
Reference in New Issue