TemplateSimplifier optimisation. measured time improvement for cryptopp/test.cpp is ~8.4s => ~8.35s
This commit is contained in:
parent
558a2f0cc7
commit
d3b231214d
|
@ -492,7 +492,10 @@ std::list<TemplateSimplifier::TokenAndName> TemplateSimplifier::getTemplateDecla
|
||||||
std::list<ScopeInfo2> scopeInfo;
|
std::list<ScopeInfo2> scopeInfo;
|
||||||
std::list<TokenAndName> declarations;
|
std::list<TokenAndName> declarations;
|
||||||
for (Token *tok = tokens; tok; tok = tok->next()) {
|
for (Token *tok = tokens; tok; tok = tok->next()) {
|
||||||
setScopeInfo(tok, &scopeInfo);
|
if (Token::Match(tok, "}|namespace|class|struct")) {
|
||||||
|
setScopeInfo(tok, &scopeInfo);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
if (!Token::simpleMatch(tok, "template <"))
|
if (!Token::simpleMatch(tok, "template <"))
|
||||||
continue;
|
continue;
|
||||||
// Some syntax checks, see #6865
|
// Some syntax checks, see #6865
|
||||||
|
@ -530,7 +533,10 @@ std::list<TemplateSimplifier::TokenAndName> TemplateSimplifier::getTemplateInsta
|
||||||
std::list<ScopeInfo2> scopeList;
|
std::list<ScopeInfo2> scopeList;
|
||||||
|
|
||||||
for (Token *tok = tokens; tok; tok = tok->next()) {
|
for (Token *tok = tokens; tok; tok = tok->next()) {
|
||||||
setScopeInfo(tok, &scopeList);
|
if (Token::Match(tok, "}|namespace|class|struct")) {
|
||||||
|
setScopeInfo(tok, &scopeList);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
// template definition.. skip it
|
// template definition.. skip it
|
||||||
if (Token::simpleMatch(tok, "template <")) {
|
if (Token::simpleMatch(tok, "template <")) {
|
||||||
tok = tok->next()->findClosingBracket();
|
tok = tok->next()->findClosingBracket();
|
||||||
|
@ -949,7 +955,10 @@ void TemplateSimplifier::expandTemplate(
|
||||||
const Token *endOfTemplateDefinition = nullptr;
|
const Token *endOfTemplateDefinition = nullptr;
|
||||||
const Token * const templateDeclarationNameToken = templateDeclarationToken->tokAt(getTemplateNamePosition(templateDeclarationToken));
|
const Token * const templateDeclarationNameToken = templateDeclarationToken->tokAt(getTemplateNamePosition(templateDeclarationToken));
|
||||||
for (const Token *tok3 = tokenlist.front(); tok3; tok3 = tok3 ? tok3->next() : nullptr) {
|
for (const Token *tok3 = tokenlist.front(); tok3; tok3 = tok3 ? tok3->next() : nullptr) {
|
||||||
setScopeInfo(const_cast<Token *>(tok3), &scopeInfo);
|
if (Token::Match(tok3, "}|namespace|class|struct")) {
|
||||||
|
setScopeInfo(tok3, &scopeInfo);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
if (inTemplateDefinition) {
|
if (inTemplateDefinition) {
|
||||||
if (!endOfTemplateDefinition && tok3->str() == "{")
|
if (!endOfTemplateDefinition && tok3->str() == "{")
|
||||||
endOfTemplateDefinition = tok3->link();
|
endOfTemplateDefinition = tok3->link();
|
||||||
|
@ -1640,7 +1649,10 @@ void TemplateSimplifier::replaceTemplateUsage(Token * const instantiationToken,
|
||||||
std::list<ScopeInfo2> scopeInfo;
|
std::list<ScopeInfo2> scopeInfo;
|
||||||
std::list< std::pair<Token *, Token *> > removeTokens;
|
std::list< std::pair<Token *, Token *> > removeTokens;
|
||||||
for (Token *nameTok = instantiationToken; nameTok; nameTok = nameTok->next()) {
|
for (Token *nameTok = instantiationToken; nameTok; nameTok = nameTok->next()) {
|
||||||
setScopeInfo(nameTok, &scopeInfo);
|
if (Token::Match(nameTok, "}|namespace|class|struct")) {
|
||||||
|
setScopeInfo(nameTok, &scopeInfo);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
if (!Token::Match(nameTok, "%name% <"))
|
if (!Token::Match(nameTok, "%name% <"))
|
||||||
continue;
|
continue;
|
||||||
if (!matchTemplateParameters(nameTok, typeStringsUsedInTemplateInstantiation))
|
if (!matchTemplateParameters(nameTok, typeStringsUsedInTemplateInstantiation))
|
||||||
|
|
Loading…
Reference in New Issue