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

Ted Kremenek kremenek at apple.com
Thu Nov 13 09:11:29 PST 2008


Author: kremenek
Date: Thu Nov 13 11:11:24 2008
New Revision: 59249

URL: http://llvm.org/viewvc/llvm-project?rev=59249&view=rev
Log:
Using llvm::OwningPtr<> for CurLexer and CurTokenLexer.  This makes both the ownership semantics of these objects explicit within the Preprocessor and also tightens up the code (explicit deletes not needed).

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

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

==============================================================================
--- cfe/trunk/include/clang/Lex/Preprocessor.h (original)
+++ cfe/trunk/include/clang/Lex/Preprocessor.h Thu Nov 13 11:11:24 2008
@@ -20,6 +20,7 @@
 #include "clang/Basic/IdentifierTable.h"
 #include "clang/Basic/SourceLocation.h"
 #include "llvm/ADT/DenseMap.h"
+#include "llvm/ADT/OwningPtr.h"
 
 namespace clang {
   
@@ -93,7 +94,7 @@
   
   /// 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.
-  Lexer *CurLexer;
+  llvm::OwningPtr<Lexer> CurLexer;
   
   /// CurLookup - The DirectoryLookup structure used to find the current
   /// FileEntry, if CurLexer is non-null and if applicable.  This allows us to
@@ -102,7 +103,7 @@
 
   /// CurTokenLexer - This is the current macro we are expanding, if we are
   /// expanding a macro.  One of CurLexer and CurTokenLexer must be null.
-  TokenLexer *CurTokenLexer;
+  llvm::OwningPtr<TokenLexer> CurTokenLexer;
   
   /// IncludeMacroStack - This keeps track of the stack of files currently
   /// #included, and macros currently being expanded from, not counting
@@ -191,7 +192,7 @@
   /// isCurrentLexer - Return true if we are lexing directly from the specified
   /// lexer.
   bool isCurrentLexer(const Lexer *L) const {
-    return CurLexer == L;
+    return CurLexer.get() == L;
   }
   
   /// getCurrentLexer - Return the current file lexer being lexed from.  Note
@@ -484,16 +485,14 @@
 private:
   
   void PushIncludeMacroStack() {
-    IncludeMacroStack.push_back(IncludeStackInfo(CurLexer, CurDirLookup,
-                                                 CurTokenLexer));
-    CurLexer = 0;
-    CurTokenLexer = 0;
+    IncludeMacroStack.push_back(IncludeStackInfo(CurLexer.take(), CurDirLookup,
+                                                 CurTokenLexer.take()));
   }
   
   void PopIncludeMacroStack() {
-    CurLexer      = IncludeMacroStack.back().TheLexer;
+    CurLexer.reset(IncludeMacroStack.back().TheLexer);
     CurDirLookup  = IncludeMacroStack.back().TheDirLookup;
-    CurTokenLexer = IncludeMacroStack.back().TheTokenLexer;
+    CurTokenLexer.reset(IncludeMacroStack.back().TheTokenLexer);
     IncludeMacroStack.pop_back();
   }
   

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

==============================================================================
--- cfe/trunk/lib/Lex/PPLexerChange.cpp (original)
+++ cfe/trunk/lib/Lex/PPLexerChange.cpp Thu Nov 13 11:11:24 2008
@@ -48,7 +48,7 @@
 /// that this ignores any potentially active macro expansions and _Pragma
 /// expansions going on at the time.
 Lexer *Preprocessor::getCurrentFileLexer() const {
-  if (CurLexer && !CurLexer->Is_PragmaLexer) return CurLexer;
+  if (CurLexer && !CurLexer->Is_PragmaLexer) return CurLexer.get();
   
   // Look for a stacked lexer.
   for (unsigned i = IncludeMacroStack.size(); i != 0; --i) {
@@ -88,7 +88,7 @@
   if (CurLexer || CurTokenLexer)
     PushIncludeMacroStack();
 
-  CurLexer = TheLexer;
+  CurLexer.reset(TheLexer);
   CurDirLookup = CurDir;
   
   // Notify the client, if desired, that we are in a new source file.
@@ -110,9 +110,9 @@
   CurDirLookup = 0;
   
   if (NumCachedTokenLexers == 0) {
-    CurTokenLexer = new TokenLexer(Tok, Args, *this);
+    CurTokenLexer.reset(new TokenLexer(Tok, Args, *this));
   } else {
-    CurTokenLexer = TokenLexerCache[--NumCachedTokenLexers];
+    CurTokenLexer.reset(TokenLexerCache[--NumCachedTokenLexers]);
     CurTokenLexer->Init(Tok, Args);
   }
 }
@@ -138,10 +138,10 @@
 
   // Create a macro expander to expand from the specified token stream.
   if (NumCachedTokenLexers == 0) {
-    CurTokenLexer = new TokenLexer(Toks, NumToks, DisableMacroExpansion,
-                                   OwnsTokens, *this);
+    CurTokenLexer.reset(new TokenLexer(Toks, NumToks, DisableMacroExpansion,
+                                       OwnsTokens, *this));
   } else {
-    CurTokenLexer = TokenLexerCache[--NumCachedTokenLexers];
+    CurTokenLexer.reset(TokenLexerCache[--NumCachedTokenLexers]);
     CurTokenLexer->Init(Toks, NumToks, DisableMacroExpansion, OwnsTokens);
   }
 }
@@ -204,8 +204,7 @@
   CurLexer->FormTokenWithChars(Result, EndPos, tok::eof);
   
   // We're done with the #included file.
-  delete CurLexer;
-  CurLexer = 0;
+  CurLexer.reset();
 
   // This is the end of the top-level file.  If the diag::pp_macro_not_used
   // diagnostic is enabled, look for macros that have not been used.
@@ -227,12 +226,11 @@
 
   // Delete or cache the now-dead macro expander.
   if (NumCachedTokenLexers == TokenLexerCacheSize)
-    delete CurTokenLexer;
+    CurTokenLexer.reset();
   else
-    TokenLexerCache[NumCachedTokenLexers++] = CurTokenLexer;
+    TokenLexerCache[NumCachedTokenLexers++] = CurTokenLexer.take();
 
   // Handle this like a #include file being popped off the stack.
-  CurTokenLexer = 0;
   return HandleEndOfFile(Result, true);
 }
 
@@ -245,11 +243,11 @@
   if (CurTokenLexer) {
     // Delete or cache the now-dead macro expander.
     if (NumCachedTokenLexers == TokenLexerCacheSize)
-      delete CurTokenLexer;
+      CurTokenLexer.reset();
     else
-      TokenLexerCache[NumCachedTokenLexers++] = CurTokenLexer;
+      TokenLexerCache[NumCachedTokenLexers++] = CurTokenLexer.take();
   } else {
-    delete CurLexer;
+    CurLexer.reset();
   }
   
   PopIncludeMacroStack();

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

==============================================================================
--- cfe/trunk/lib/Lex/Preprocessor.cpp (original)
+++ cfe/trunk/lib/Lex/Preprocessor.cpp Thu Nov 13 11:11:24 2008
@@ -87,9 +87,6 @@
 Preprocessor::~Preprocessor() {
   assert(BacktrackPositions.empty() && "EnableBacktrack/Backtrack imbalance!");
 
-  // Free any active lexers.
-  delete CurLexer;
-  
   while (!IncludeMacroStack.empty()) {
     delete IncludeMacroStack.back().TheLexer;
     delete IncludeMacroStack.back().TheTokenLexer;





More information about the cfe-commits mailing list