MCPcopy Create free account
hub / github.com/cppcheck-opensource/cppcheck / simplifyNamespaceAliases

Method simplifyNamespaceAliases

lib/tokenize.cpp:11112–11212  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

11110}
11111
11112void Tokenizer::simplifyNamespaceAliases()
11113{
11114 if (!isCPP())
11115 return;
11116
11117 int scope = 0;
11118
11119 for (Token *tok = list.front(); tok; tok = tok->next()) {
11120 bool isPrev{};
11121 if (tok->str() == "{")
11122 scope++;
11123 else if (tok->str() == "}")
11124 scope--;
11125 else if (Token::Match(tok, "namespace %name% =") || (isPrev = Token::Match(tok->previous(), "namespace %name% ="))) {
11126 if (isPrev)
11127 tok = tok->previous();
11128 if (tok->tokAt(-1) && !Token::Match(tok->tokAt(-1), "[;{}]"))
11129 syntaxError(tok->tokAt(-1));
11130 const std::string name(tok->strAt(1));
11131 Token * tokNameStart = tok->tokAt(3);
11132 Token * tokNameEnd = tokNameStart;
11133
11134 while (tokNameEnd && tokNameEnd->next() && tokNameEnd->strAt(1) != ";") {
11135 if (tokNameEnd->str() == "(") {
11136 if (tokNameEnd->previous()->isName())
11137 unknownMacroError(tokNameEnd->previous());
11138 else
11139 syntaxError(tokNameEnd);
11140 }
11141 tokNameEnd = tokNameEnd->next();
11142 }
11143
11144 if (!tokNameEnd)
11145 return; // syntax error
11146
11147 int endScope = scope;
11148 Token * tokLast = tokNameEnd->next();
11149 if (!tokLast)
11150 return;
11151 Token * tokNext = tokLast->next();
11152 Token * tok2 = tokNext;
11153
11154 while (tok2 && endScope >= scope) {
11155 if (Token::simpleMatch(tok2, "{"))
11156 endScope++;
11157 else if (Token::simpleMatch(tok2, "}"))
11158 endScope--;
11159 else if (tok2->str() == name) {
11160 if (Token::Match(tok2->previous(), "namespace %name% =")) {
11161 // check for possible duplicate aliases
11162 if (sameTokens(tokNameStart, tokNameEnd, tok2->tokAt(2))) {
11163 // delete duplicate
11164 tok2 = deleteAlias(tok2->previous());
11165 continue;
11166 }
11167 // conflicting declaration (syntax error)
11168 // cppcheck-suppress duplicateBranch - remove when TODO below is addressed
11169 if (endScope == scope) {

Callers

nothing calls this directly

Calls 12

isCPPFunction · 0.85
sameTokensFunction · 0.85
deleteAliasFunction · 0.85
alreadyHasNamespaceFunction · 0.85
frontMethod · 0.80
nextMethod · 0.80
deletePreviousMethod · 0.80
insertTokenMethod · 0.80
deleteThisMethod · 0.80
simpleMatchFunction · 0.70
strMethod · 0.45
tokAtMethod · 0.45

Tested by

no test coverage detected