diff options
| author | Ted Kremenek <kremenek@apple.com> | 2008-12-11 22:41:47 +0000 |
|---|---|---|
| committer | Ted Kremenek <kremenek@apple.com> | 2008-12-11 22:41:47 +0000 |
| commit | ca153f734958d84689b6b6a9391c6629c0c550f0 (patch) | |
| tree | aca247eb832ae4014de7658c7ec119b12b85bbbc /clang/lib | |
| parent | 90893187c4a9cd180d00870d52349e326db0d331 (diff) | |
| download | bcm5719-llvm-ca153f734958d84689b6b6a9391c6629c0c550f0.tar.gz bcm5719-llvm-ca153f734958d84689b6b6a9391c6629c0c550f0.zip | |
PTHLexer: Keep track of the location of the last '#' token and provide the means to jump ahead in the token stream.
llvm-svn: 60905
Diffstat (limited to 'clang/lib')
| -rw-r--r-- | clang/lib/Lex/PTHLexer.cpp | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/clang/lib/Lex/PTHLexer.cpp b/clang/lib/Lex/PTHLexer.cpp index ebbc96801f6..3afbb5b7176 100644 --- a/clang/lib/Lex/PTHLexer.cpp +++ b/clang/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)); } //===----------------------------------------------------------------------===// |

