diff options
Diffstat (limited to 'clang/lib')
-rw-r--r-- | clang/lib/Lex/PPDirectives.cpp | 14 | ||||
-rw-r--r-- | clang/lib/Lex/Preprocessor.cpp | 1 |
2 files changed, 12 insertions, 3 deletions
diff --git a/clang/lib/Lex/PPDirectives.cpp b/clang/lib/Lex/PPDirectives.cpp index c38310b925f..5a100995b8a 100644 --- a/clang/lib/Lex/PPDirectives.cpp +++ b/clang/lib/Lex/PPDirectives.cpp @@ -24,18 +24,26 @@ using namespace clang; // Utility Methods for Preprocessor Directive Handling. //===----------------------------------------------------------------------===// -MacroInfo* Preprocessor::AllocateMacroInfo(SourceLocation L) { +MacroInfo *Preprocessor::AllocateMacroInfo(SourceLocation L) { MacroInfo *MI; if (!MICache.empty()) { MI = MICache.back(); MICache.pop_back(); - } - else MI = (MacroInfo*) BP.Allocate<MacroInfo>(); + } else + MI = (MacroInfo*) BP.Allocate<MacroInfo>(); new (MI) MacroInfo(L); return MI; } +/// ReleaseMacroInfo - Release the specified MacroInfo. This memory will +/// be reused for allocating new MacroInfo objects. +void Preprocessor::ReleaseMacroInfo(MacroInfo* MI) { + MICache.push_back(MI); + MI->Destroy(); +} + + /// DiscardUntilEndOfDirective - Read and discard all tokens remaining on the /// current line until the tok::eom token is found. void Preprocessor::DiscardUntilEndOfDirective() { diff --git a/clang/lib/Lex/Preprocessor.cpp b/clang/lib/Lex/Preprocessor.cpp index 31a040674f7..7b34cb65e36 100644 --- a/clang/lib/Lex/Preprocessor.cpp +++ b/clang/lib/Lex/Preprocessor.cpp @@ -101,6 +101,7 @@ Preprocessor::~Preprocessor() { // will be released when the BumpPtrAllocator 'BP' object gets // destroyed. We still need to run the dstor, however, to free // memory alocated by MacroInfo. + I->second->Destroy(); I->second->~MacroInfo(); I->first->setHasMacroDefinition(false); } |