]> granicus.if.org Git - clang/commitdiff
PTH: Remove some methods and simplify some conditions in PTHLexer::Lex(). No big...
authorTed Kremenek <kremenek@apple.com>
Tue, 23 Dec 2008 19:24:24 +0000 (19:24 +0000)
committerTed Kremenek <kremenek@apple.com>
Tue, 23 Dec 2008 19:24:24 +0000 (19:24 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@61381 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Lex/PTHLexer.h
lib/Lex/PPLexerChange.cpp
lib/Lex/PTHLexer.cpp

index c0bc9c88f42e4f1446c955cf53a9fe663ddcf7e2..2e7d0b95cd23627fbee4f67aca8cb88dd0ae21eb 100644 (file)
@@ -64,7 +64,7 @@ public:
   /// Lex - Return the next token.
   void Lex(Token &Tok);
   
-  void setEOF(Token &Tok);
+  void getEOF(Token &Tok);
   
   /// DiscardToEndOfLine - Read the rest of the current preprocessor line as an
   /// uninterpreted string.  This switches the lexer out of directive mode.
@@ -92,9 +92,6 @@ public:
 
   /// SkipBlock - Used by Preprocessor to skip the current conditional block.
   bool SkipBlock();
-
-private:
-  bool LexEndOfFile(Token &Result);
 };
 
 }  // end namespace clang
index cd50f0e38f74b983e3184d33a61e6b0ca03da0d9..d25f4f4a56e01ea39a62382d6c98abe0995116c8 100644 (file)
@@ -308,7 +308,7 @@ bool Preprocessor::HandleEndOfFile(Token &Result, bool isEndOfMacro) {
     CurLexer.reset();
   }
   else {
-    CurPTHLexer->setEOF(Result);
+    CurPTHLexer->getEOF(Result);
     CurPTHLexer.reset();
   }
   
index b60b915d922ffe977e68e02a7731dcab37e279ed..3924c9cd2d31ebe76290389f3c0344d423dc0ec7 100644 (file)
@@ -87,7 +87,8 @@ LexNextToken:
   
   Tok.startToken();
   Tok.setKind(k);
-  Tok.setFlag(flags);     
+  Tok.setFlag(flags);
+  assert(!LexingRawMode);
   Tok.setIdentifierInfo(perID ? PTHMgr.GetIdentifierInfo(perID-1) : 0);
   Tok.setLocation(SourceLocation::getFileLoc(FileID, FileOffset));
   Tok.setLength(Len);
@@ -96,80 +97,51 @@ LexNextToken:
   // Process the token.
   //===--------------------------------------==//
 
-  if (Tok.is(tok::eof)) {
+  if (k == tok::identifier) {
+    MIOpt.ReadToken();
+    return PP->HandleIdentifier(Tok);
+  }
+  
+  if (k == tok::eof) {
     // Save the end-of-file token.
     EofToken = Tok;
     
     Preprocessor *PPCache = PP;
-
-    if (LexEndOfFile(Tok))
+    
+    assert(!ParsingPreprocessorDirective);
+    assert(!LexingRawMode);
+    
+    // FIXME: Issue diagnostics similar to Lexer.
+    if (PP->HandleEndOfFile(Tok, false))
       return;
-
+    
     assert(PPCache && "Raw buffer::LexEndOfFile should return a token");
     return PPCache->Lex(Tok);
   }
-
-  MIOpt.ReadToken();
-  
-  if (Tok.is(tok::eom)) {
-    ParsingPreprocessorDirective = false;
-    return;
-  }
   
-#if 0
-  SourceManager& SM = PP->getSourceManager();
-  SourceLocation L = Tok.getLocation();
-  
-  static const char* last = 0;
-  const char* next = SM.getContentCacheForLoc(L)->Entry->getName();
-  if (next != last) {
-    last = next;
-    llvm::cerr << next << '\n';
-  }
-
-  llvm::cerr << "line " << SM.getLogicalLineNumber(L) << " col " <<
-  SM.getLogicalColumnNumber(L) << '\n';
-#endif
+  if (k == tok::hash && Tok.isAtStartOfLine()) {
+    LastHashTokPtr = CurPtr - DISK_TOKEN_SIZE;
+    assert(!LexingRawMode);
+    PP->HandleDirective(Tok);
     
-  if (Tok.is(tok::hash)) {    
-    if (Tok.isAtStartOfLine()) {
-      LastHashTokPtr = CurPtr - DISK_TOKEN_SIZE;
-      if (!LexingRawMode) {
-        PP->HandleDirective(Tok);
-
-        if (PP->isCurrentLexer(this))
-          goto LexNextToken;
-        
-        return PP->Lex(Tok);
-      }
-    }
-  }
-  
-  if (Tok.is(tok::identifier)) {
-    if (LexingRawMode) {
-      Tok.setIdentifierInfo(0);
-      return;
-    }
+    if (PP->isCurrentLexer(this))
+      goto LexNextToken;
     
-    return PP->HandleIdentifier(Tok);
+    return PP->Lex(Tok);
   }
-
   
-  assert(!Tok.is(tok::eom) || ParsingPreprocessorDirective);
-}
+  if (k == tok::eom) {
+    assert(ParsingPreprocessorDirective);
+    ParsingPreprocessorDirective = false;
+    return;
+  }
 
-// FIXME: This method can just be inlined into Lex().
-bool PTHLexer::LexEndOfFile(Token &Tok) {
-  assert(!ParsingPreprocessorDirective);
-  assert(!LexingRawMode);
-  
-  // FIXME: Issue diagnostics similar to Lexer.
-  return PP->HandleEndOfFile(Tok, false);
+  MIOpt.ReadToken();
 }
 
 // FIXME: We can just grab the last token instead of storing a copy
 // into EofToken.
-void PTHLexer::setEOF(Token& Tok) {
+void PTHLexer::getEOF(Token& Tok) {
   assert(!EofToken.is(tok::eof));
   Tok = EofToken;
 }
@@ -304,7 +276,7 @@ SourceLocation PTHLexer::getSourceLocation() {
   // 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);
+  const char* p = CurPtr + (1 + 1 + 3);
   uint32_t offset = 
        ((uint32_t) ((uint8_t) p[0]))
     | (((uint32_t) ((uint8_t) p[1])) << 8)