[cfe-commits] r59472 - in /cfe/trunk: include/clang/Lex/Preprocessor.h lib/Lex/PPLexerChange.cpp

Ted Kremenek kremenek at apple.com
Mon Nov 17 16:12:50 PST 2008


Author: kremenek
Date: Mon Nov 17 18:12:49 2008
New Revision: 59472

URL: http://llvm.org/viewvc/llvm-project?rev=59472&view=rev
Log:
- Add 'CurPPLexer' to Preprocessor to keep track of the current
  PreprocessorLexer, which will either be a 'Lexer' or 'PTHLexer'.
- Added stub field 'CurPTHLexer' to keep track of the current PTHLexer.
- Modified IncludeStackInfo to track both the current PTHLexer and
  current PreprocessorLexer.

Modified:
    cfe/trunk/include/clang/Lex/Preprocessor.h
    cfe/trunk/lib/Lex/PPLexerChange.cpp

Modified: cfe/trunk/include/clang/Lex/Preprocessor.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Lex/Preprocessor.h?rev=59472&r1=59471&r2=59472&view=diff

==============================================================================
--- cfe/trunk/include/clang/Lex/Preprocessor.h (original)
+++ cfe/trunk/include/clang/Lex/Preprocessor.h Mon Nov 17 18:12:49 2008
@@ -15,6 +15,7 @@
 #define LLVM_CLANG_LEX_PREPROCESSOR_H
 
 #include "clang/Lex/Lexer.h"
+#include "clang/Lex/PTHLexer.h"
 #include "clang/Lex/PPCallbacks.h"
 #include "clang/Lex/TokenLexer.h"
 #include "clang/Basic/IdentifierTable.h"
@@ -93,9 +94,20 @@
   PragmaNamespace *PragmaHandlers;
   
   /// CurLexer - This is the current top of the stack that we're lexing from if
-  /// not expanding a macro.  One of CurLexer and CurTokenLexer must be null.
+  /// not expanding a macro and we are lexing directly from source code.
+  ///  Only one of CurLexer, CurPTHLexer, or CurTokenLexer will be non-null.
   llvm::OwningPtr<Lexer> CurLexer;
   
+  /// CurPTHLexer - This is the current top of stack that we're lexing from if
+  ///  not expanding from a macro and we are lexing from a PTH cache.
+  ///  Only one of CurLexer, CurPTHLexer, or CurTokenLexer will be non-null.
+  llvm::OwningPtr<PTHLexer> CurPTHLexer;
+  
+  /// CurPPLexer - This is the current top of the stack what we're lexing from
+  ///  if not expanding a macro.  This is an alias for either CurLexer or
+  ///  CurPTHLexer.
+  PreprocessorLexer* CurPPLexer;
+  
   /// CurLookup - The DirectoryLookup structure used to find the current
   /// FileEntry, if CurLexer is non-null and if applicable.  This allows us to
   /// implement #include_next and find directory-specific properties.
@@ -109,12 +121,16 @@
   /// #included, and macros currently being expanded from, not counting
   /// CurLexer/CurTokenLexer.
   struct IncludeStackInfo {
-    Lexer *TheLexer;
+    Lexer                 *TheLexer;
+    PTHLexer              *ThePTHLexer;
+    PreprocessorLexer     *ThePPLexer;
+    TokenLexer            *TheTokenLexer;    
     const DirectoryLookup *TheDirLookup;
-    TokenLexer *TheTokenLexer;
-    IncludeStackInfo(Lexer *L, const DirectoryLookup *D, TokenLexer *TL)
-      : TheLexer(L), TheDirLookup(D), TheTokenLexer(TL) {
-    }
+
+    IncludeStackInfo(Lexer *L, PTHLexer* P, PreprocessorLexer* PPL,
+                     TokenLexer* TL, const DirectoryLookup *D)
+      : TheLexer(L), ThePTHLexer(P), ThePPLexer(PPL), TheTokenLexer(TL),
+        TheDirLookup(D) {}
   };
   std::vector<IncludeStackInfo> IncludeMacroStack;
   
@@ -485,14 +501,19 @@
 private:
   
   void PushIncludeMacroStack() {
-    IncludeMacroStack.push_back(IncludeStackInfo(CurLexer.take(), CurDirLookup,
-                                                 CurTokenLexer.take()));
+    IncludeMacroStack.push_back(IncludeStackInfo(CurLexer.take(),
+                                                 CurPTHLexer.take(),
+                                                 CurPPLexer,
+                                                 CurTokenLexer.take(),
+                                                 CurDirLookup));
   }
   
   void PopIncludeMacroStack() {
     CurLexer.reset(IncludeMacroStack.back().TheLexer);
-    CurDirLookup  = IncludeMacroStack.back().TheDirLookup;
+    CurPTHLexer.reset(IncludeMacroStack.back().ThePTHLexer);
+    CurPPLexer = IncludeMacroStack.back().ThePPLexer;
     CurTokenLexer.reset(IncludeMacroStack.back().TheTokenLexer);
+    CurDirLookup  = IncludeMacroStack.back().TheDirLookup;
     IncludeMacroStack.pop_back();
   }
   

Modified: cfe/trunk/lib/Lex/PPLexerChange.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Lex/PPLexerChange.cpp?rev=59472&r1=59471&r2=59472&view=diff

==============================================================================
--- cfe/trunk/lib/Lex/PPLexerChange.cpp (original)
+++ cfe/trunk/lib/Lex/PPLexerChange.cpp Mon Nov 17 18:12:49 2008
@@ -89,6 +89,7 @@
     PushIncludeMacroStack();
 
   CurLexer.reset(TheLexer);
+  CurPPLexer = TheLexer;
   CurDirLookup = CurDir;
   
   // Notify the client, if desired, that we are in a new source file.





More information about the cfe-commits mailing list