diff options
author | Douglas Gregor <dgregor@apple.com> | 2012-10-11 17:41:54 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2012-10-11 17:41:54 +0000 |
commit | 3ab50fe3fc8311fb68c4f5eb97e9bb3d0041bf1a (patch) | |
tree | 7ca68fb742508c859da0e4714b7d3f142f433f22 /lib/Lex | |
parent | e9652bf15246d6e08e953b52cdb7812ddb8a43e0 (diff) |
Introduce a simple "hint" scheme to eliminate the quadratic behavior
associated with deserializing macro history for an identifier.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@165729 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Lex')
-rw-r--r-- | lib/Lex/PPMacroExpansion.cpp | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/lib/Lex/PPMacroExpansion.cpp b/lib/Lex/PPMacroExpansion.cpp index 8db74f28d4..c717816650 100644 --- a/lib/Lex/PPMacroExpansion.cpp +++ b/lib/Lex/PPMacroExpansion.cpp @@ -55,7 +55,8 @@ void Preprocessor::setMacroInfo(IdentifierInfo *II, MacroInfo *MI) { II->setChangedSinceDeserialization(); } -void Preprocessor::addLoadedMacroInfo(IdentifierInfo *II, MacroInfo *MI) { +void Preprocessor::addLoadedMacroInfo(IdentifierInfo *II, MacroInfo *MI, + MacroInfo *Hint) { assert(MI && "Missing macro?"); assert(MI->isFromAST() && "Macro is not from an AST?"); assert(!MI->getPreviousDefinition() && "Macro already in chain?"); @@ -105,8 +106,7 @@ void Preprocessor::addLoadedMacroInfo(IdentifierInfo *II, MacroInfo *MI) { } // The macro is not a definition; put it at the end of the list. - // FIXME: Adding macro history is quadratic, but a hint could fix this. - MacroInfo *Prev = StoredMI; + MacroInfo *Prev = Hint? Hint : StoredMI; while (Prev->getPreviousDefinition()) Prev = Prev->getPreviousDefinition(); Prev->setPreviousDefinition(MI); |