forked from OSchip/llvm-project
This is a follow-up to r62675:
Refactor how the preprocessor changes a token from being an tok::identifier to a keyword (e.g. tok::kw_for). Instead of doing this in HandleIdentifier, hoist this common case out into the caller, so that every keyword doesn't have to go through HandleIdentifier. This drops time in HandleIdentifier from 1.25ms to .62ms, and speeds up clang -Eonly with PTH by about 1%. llvm-svn: 62855
This commit is contained in:
parent
9db60a38e9
commit
1f6c7fe6a8
|
@ -122,14 +122,7 @@ public:
|
|||
/// can be used to cause the lexer to map identifiers to source-language
|
||||
/// tokens.
|
||||
tok::TokenKind getTokenID() const { return (tok::TokenKind)TokenID; }
|
||||
void setTokenID(tok::TokenKind ID) {
|
||||
TokenID = ID;
|
||||
|
||||
if (ID != tok::identifier)
|
||||
NeedsHandleIdentifier = 1;
|
||||
else
|
||||
RecomputeNeedsHandleIdentifier();
|
||||
}
|
||||
void setTokenID(tok::TokenKind ID) { TokenID = ID; }
|
||||
|
||||
/// getPPKeywordID - Return the preprocessor keyword ID for this identifier.
|
||||
/// For example, "define" will return tok::pp_define.
|
||||
|
@ -225,7 +218,7 @@ private:
|
|||
void RecomputeNeedsHandleIdentifier() {
|
||||
NeedsHandleIdentifier =
|
||||
(isPoisoned() | hasMacroDefinition() | isCPlusPlusOperatorKeyword() |
|
||||
isExtensionToken()) || getTokenID() != tok::identifier;
|
||||
isExtensionToken());
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
@ -558,6 +558,10 @@ FinishIdentifier:
|
|||
// identifier table.
|
||||
IdentifierInfo *II = PP->LookUpIdentifierInfo(Result, IdStart);
|
||||
|
||||
// Change the kind of this identifier to the appropriate token kind, e.g.
|
||||
// turning "for" into a keyword.
|
||||
Result.setKind(II->getTokenID());
|
||||
|
||||
// Finally, now that we know we have an identifier, pass this off to the
|
||||
// preprocessor, which may macro expand it or something.
|
||||
if (II->isHandleIdentifierCase())
|
||||
|
|
|
@ -101,7 +101,13 @@ LexNextToken:
|
|||
if (IdentifierID) {
|
||||
MIOpt.ReadToken();
|
||||
IdentifierInfo *II = PTHMgr.GetIdentifierInfo(IdentifierID-1);
|
||||
|
||||
Tok.setIdentifierInfo(II);
|
||||
|
||||
// Change the kind of this identifier to the appropriate token kind, e.g.
|
||||
// turning "for" into a keyword.
|
||||
Tok.setKind(II->getTokenID());
|
||||
|
||||
if (II->isHandleIdentifierCase())
|
||||
PP->HandleIdentifier(Tok);
|
||||
return;
|
||||
|
|
|
@ -759,10 +759,6 @@ void Preprocessor::HandleIdentifier(Token &Identifier) {
|
|||
if (II.isCPlusPlusOperatorKeyword())
|
||||
Identifier.setIdentifierInfo(0);
|
||||
|
||||
// Change the kind of this identifier to the appropriate token kind, e.g.
|
||||
// turning "for" into a keyword.
|
||||
Identifier.setKind(II.getTokenID());
|
||||
|
||||
// If this is an extension token, diagnose its use.
|
||||
// We avoid diagnosing tokens that originate from macro definitions.
|
||||
if (II.isExtensionToken() && Features.C99 && !DisableMacroExpansion)
|
||||
|
|
|
@ -326,9 +326,14 @@ void TokenLexer::Lex(Token &Tok) {
|
|||
}
|
||||
|
||||
// Handle recursive expansion!
|
||||
if (Tok.getIdentifierInfo() && !DisableMacroExpansion &&
|
||||
Tok.getIdentifierInfo()->isHandleIdentifierCase())
|
||||
PP.HandleIdentifier(Tok);
|
||||
if (IdentifierInfo *II = Tok.getIdentifierInfo()) {
|
||||
// Change the kind of this identifier to the appropriate token kind, e.g.
|
||||
// turning "for" into a keyword.
|
||||
Tok.setKind(II->getTokenID());
|
||||
|
||||
if (!DisableMacroExpansion && II->isHandleIdentifierCase())
|
||||
PP.HandleIdentifier(Tok);
|
||||
}
|
||||
|
||||
// Otherwise, return a normal token.
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue