Skip to content

Commit d3b2312

Browse files
rebnridgwaydanmar
authored andcommitted
TemplateSimplifier optimisation. measured time improvement for cryptopp/test.cpp is ~8.4s => ~8.35s
1 parent 558a2f0 commit d3b2312

1 file changed

Lines changed: 16 additions & 4 deletions

File tree

lib/templatesimplifier.cpp

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -492,7 +492,10 @@ std::list<TemplateSimplifier::TokenAndName> TemplateSimplifier::getTemplateDecla
492492
std::list<ScopeInfo2> scopeInfo;
493493
std::list<TokenAndName> declarations;
494494
for (Token *tok = tokens; tok; tok = tok->next()) {
495-
setScopeInfo(tok, &scopeInfo);
495+
if (Token::Match(tok, "}|namespace|class|struct")) {
496+
setScopeInfo(tok, &scopeInfo);
497+
continue;
498+
}
496499
if (!Token::simpleMatch(tok, "template <"))
497500
continue;
498501
// Some syntax checks, see #6865
@@ -530,7 +533,10 @@ std::list<TemplateSimplifier::TokenAndName> TemplateSimplifier::getTemplateInsta
530533
std::list<ScopeInfo2> scopeList;
531534

532535
for (Token *tok = tokens; tok; tok = tok->next()) {
533-
setScopeInfo(tok, &scopeList);
536+
if (Token::Match(tok, "}|namespace|class|struct")) {
537+
setScopeInfo(tok, &scopeList);
538+
continue;
539+
}
534540
// template definition.. skip it
535541
if (Token::simpleMatch(tok, "template <")) {
536542
tok = tok->next()->findClosingBracket();
@@ -949,7 +955,10 @@ void TemplateSimplifier::expandTemplate(
949955
const Token *endOfTemplateDefinition = nullptr;
950956
const Token * const templateDeclarationNameToken = templateDeclarationToken->tokAt(getTemplateNamePosition(templateDeclarationToken));
951957
for (const Token *tok3 = tokenlist.front(); tok3; tok3 = tok3 ? tok3->next() : nullptr) {
952-
setScopeInfo(const_cast<Token *>(tok3), &scopeInfo);
958+
if (Token::Match(tok3, "}|namespace|class|struct")) {
959+
setScopeInfo(tok3, &scopeInfo);
960+
continue;
961+
}
953962
if (inTemplateDefinition) {
954963
if (!endOfTemplateDefinition && tok3->str() == "{")
955964
endOfTemplateDefinition = tok3->link();
@@ -1640,7 +1649,10 @@ void TemplateSimplifier::replaceTemplateUsage(Token * const instantiationToken,
16401649
std::list<ScopeInfo2> scopeInfo;
16411650
std::list< std::pair<Token *, Token *> > removeTokens;
16421651
for (Token *nameTok = instantiationToken; nameTok; nameTok = nameTok->next()) {
1643-
setScopeInfo(nameTok, &scopeInfo);
1652+
if (Token::Match(nameTok, "}|namespace|class|struct")) {
1653+
setScopeInfo(nameTok, &scopeInfo);
1654+
continue;
1655+
}
16441656
if (!Token::Match(nameTok, "%name% <"))
16451657
continue;
16461658
if (!matchTemplateParameters(nameTok, typeStringsUsedInTemplateInstantiation))

0 commit comments

Comments
 (0)