diff options
Diffstat (limited to 'lib/Lex/PTHLexer.cpp')
-rw-r--r-- | lib/Lex/PTHLexer.cpp | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/lib/Lex/PTHLexer.cpp b/lib/Lex/PTHLexer.cpp index ebbc96801f..3afbb5b717 100644 --- a/lib/Lex/PTHLexer.cpp +++ b/lib/Lex/PTHLexer.cpp @@ -28,7 +28,8 @@ using namespace clang; PTHLexer::PTHLexer(Preprocessor& pp, SourceLocation fileloc, const char* D, PTHManager& PM) - : PreprocessorLexer(&pp, fileloc), TokBuf(D), PTHMgr(PM), + : PreprocessorLexer(&pp, fileloc), TokBuf(D), CurPtr(D), LastHashTokPtr(0), + PTHMgr(PM), NeedsFetching(true) { // Make sure the EofToken is completely clean. EofToken.startToken(); @@ -82,6 +83,8 @@ LexNextToken: if (Tok.is(tok::hash)) { if (Tok.isAtStartOfLine() && !LexingRawMode) { + LastHashTokPtr = CurPtr; + PP->HandleDirective(Tok); if (PP->isCurrentLexer(this)) @@ -163,20 +166,20 @@ void PTHLexer::ReadToken(Token& T) { T.startToken(); // Read the type of the token. - T.setKind((tok::TokenKind) Read8(TokBuf)); + T.setKind((tok::TokenKind) Read8(CurPtr)); // Set flags. This is gross, since we are really setting multiple flags. - T.setFlag((Token::TokenFlags) Read8(TokBuf)); + T.setFlag((Token::TokenFlags) Read8(CurPtr)); // Set the IdentifierInfo* (if any). - T.setIdentifierInfo(PTHMgr.ReadIdentifierInfo(TokBuf)); + T.setIdentifierInfo(PTHMgr.ReadIdentifierInfo(CurPtr)); // Set the SourceLocation. Since all tokens are constructed using a // raw lexer, they will all be offseted from the same FileID. - T.setLocation(SourceLocation::getFileLoc(FileID, Read32(TokBuf))); + T.setLocation(SourceLocation::getFileLoc(FileID, Read32(CurPtr))); // Finally, read and set the length of the token. - T.setLength(Read32(TokBuf)); + T.setLength(Read32(CurPtr)); } //===----------------------------------------------------------------------===// |