[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