Refactoring: Make a 300 line function a little smaller.
simplifyTemplatesInstantiate()
This commit is contained in:
parent
33f56ebc27
commit
1c12d04d0d
|
@ -3079,26 +3079,10 @@ static bool simplifyTemplatesInstantiateMatch(const Token *instance, const std::
|
|||
return true;
|
||||
}
|
||||
|
||||
void Tokenizer::simplifyTemplatesInstantiate(const Token *tok,
|
||||
std::list<Token *> &used,
|
||||
std::set<std::string> &expandedtemplates)
|
||||
int Tokenizer::simplifyTemplatesGetTemplateNamePosition(const Token *tok)
|
||||
{
|
||||
// this variable is not used at the moment. The intention was to
|
||||
// allow continuous instantiations until all templates has been expanded
|
||||
//bool done = false;
|
||||
|
||||
std::vector<const Token *> type;
|
||||
for (tok = tok->tokAt(2); tok && tok->str() != ">"; tok = tok->next()) {
|
||||
if (Token::Match(tok, "%var% ,|>"))
|
||||
type.push_back(tok);
|
||||
}
|
||||
|
||||
// bail out if the end of the file was reached
|
||||
if (!tok)
|
||||
return;
|
||||
|
||||
// get the position of the template name
|
||||
unsigned char namepos = 0;
|
||||
int namepos = 0;
|
||||
if (Token::Match(tok, "> class|struct %type% {|:"))
|
||||
namepos = 2;
|
||||
else if (Token::Match(tok, "> %type% *|&| %type% ("))
|
||||
|
@ -3125,11 +3109,37 @@ void Tokenizer::simplifyTemplatesInstantiate(const Token *tok,
|
|||
else
|
||||
Check::reportError(errmsg);
|
||||
}
|
||||
return;
|
||||
return -1;
|
||||
}
|
||||
if ((tok->strAt(namepos) == "*" || tok->strAt(namepos) == "&"))
|
||||
++namepos;
|
||||
|
||||
return namepos;
|
||||
}
|
||||
|
||||
void Tokenizer::simplifyTemplatesInstantiate(const Token *tok,
|
||||
std::list<Token *> &used,
|
||||
std::set<std::string> &expandedtemplates)
|
||||
{
|
||||
// this variable is not used at the moment. The intention was to
|
||||
// allow continuous instantiations until all templates has been expanded
|
||||
//bool done = false;
|
||||
|
||||
std::vector<const Token *> type;
|
||||
for (tok = tok->tokAt(2); tok && tok->str() != ">"; tok = tok->next()) {
|
||||
if (Token::Match(tok, "%var% ,|>"))
|
||||
type.push_back(tok);
|
||||
}
|
||||
|
||||
// bail out if the end of the file was reached
|
||||
if (!tok)
|
||||
return;
|
||||
|
||||
// get the position of the template name
|
||||
int namepos = simplifyTemplatesGetTemplateNamePosition(tok);
|
||||
if (namepos == -1)
|
||||
return;
|
||||
|
||||
// name of template function/class..
|
||||
const std::string name(tok->strAt(namepos));
|
||||
|
||||
|
|
|
@ -489,6 +489,14 @@ public:
|
|||
std::list<Token *> &used,
|
||||
std::set<std::string> &expandedtemplates);
|
||||
|
||||
/**
|
||||
* Match template declaration/instantiation
|
||||
* @param tok The ">" token e.g. before "class"
|
||||
* @return -1 to bail out or positive integer to identity the position
|
||||
* of the template name.
|
||||
*/
|
||||
int simplifyTemplatesGetTemplateNamePosition(const Token *tok);
|
||||
|
||||
/**
|
||||
* Used after simplifyTemplates to perform a little cleanup.
|
||||
* Sometimes the simplifyTemplates isn't fully successful and then
|
||||
|
|
Loading…
Reference in New Issue