Optimisation: small speedups in the Tokenizer::simplifyTokenList handling

This commit is contained in:
Daniel Marjamäki 2010-09-24 22:14:18 +02:00
parent 86e517c5d3
commit 056037feed
1 changed files with 31 additions and 14 deletions

View File

@ -8174,14 +8174,28 @@ void Tokenizer::simplifyStructDecl()
void Tokenizer::simplifyCallingConvention() void Tokenizer::simplifyCallingConvention()
{ {
const char * pattern = "__cdecl|__stdcall|__fastcall|__thiscall|__clrcall|__syscall|__pascal|__fortran|__far|__near|WINAPI|APIENTRY|CALLBACK"; std::set<std::string> str;
while (Token::Match(_tokens, pattern)) str.insert("__cdecl");
str.insert("__stdcall");
str.insert("__fastcall");
str.insert("__thiscall");
str.insert("__clrcall");
str.insert("__syscall");
str.insert("__pascal");
str.insert("__fortran");
str.insert("__far");
str.insert("__near");
str.insert("WINAPI");
str.insert("APIENTRY");
str.insert("CALLBACK");
while (_tokens && str.find(_tokens->str()) != str.end())
{ {
_tokens->deleteThis(); _tokens->deleteThis();
} }
for (Token *tok = _tokens; tok; tok = tok->next()) for (Token *tok = _tokens; tok; tok = tok->next())
{ {
while (Token::Match(tok->next(), pattern)) while (tok->next() && str.find(tok->next()->str()) != str.end())
{ {
tok->deleteNext(); tok->deleteNext();
} }
@ -8436,18 +8450,21 @@ void Tokenizer::simplifyMicrosoftMFC()
{ {
for (Token *tok = _tokens; tok; tok = tok->next()) for (Token *tok = _tokens; tok; tok = tok->next())
{ {
if (Token::simpleMatch(tok->next(), "DECLARE_MESSAGE_MAP ( )")) if (tok->str().compare(0,9,"DECLARE_") == 0)
{ {
tok->deleteNext(); if (Token::simpleMatch(tok->next(), "DECLARE_MESSAGE_MAP ( )"))
tok->deleteNext(); {
tok->deleteNext(); tok->deleteNext();
} tok->deleteNext();
else if (Token::Match(tok->next(), "DECLARE_DYNAMIC|DECLARE_DYNAMIC_CLASS|DECLARE_DYNCREATE ( %any% )")) tok->deleteNext();
{ }
tok->deleteNext(); else if (Token::Match(tok->next(), "DECLARE_DYNAMIC|DECLARE_DYNAMIC_CLASS|DECLARE_DYNCREATE ( %any% )"))
tok->deleteNext(); {
tok->deleteNext(); tok->deleteNext();
tok->deleteNext(); tok->deleteNext();
tok->deleteNext();
tok->deleteNext();
}
} }
} }
} }