diff --git a/CheckBufferOverrun.cpp b/CheckBufferOverrun.cpp index f2e39ff3b..9bf6e150e 100644 --- a/CheckBufferOverrun.cpp +++ b/CheckBufferOverrun.cpp @@ -78,13 +78,13 @@ void CheckBufferOverrunClass::CheckBufferOverrun_CheckScope( const TOKEN *tok, c const char *num = tok->strAt(2 + varc); if (strtol(num, NULL, 10) >= size) { - ReportError(tok->next, "Array index out of bounds"); + ReportError(tok->next(), "Array index out of bounds"); } } int indentlevel = 0; - for ( ; tok; tok = tok->next ) + for ( ; tok; tok = tok->next() ) { if (tok->str() == "{") { @@ -99,12 +99,12 @@ void CheckBufferOverrunClass::CheckBufferOverrun_CheckScope( const TOKEN *tok, c } // Array index.. - if ( !tok->isName() && !TOKEN::Match(tok,"[.&]") && TOKEN::Match(tok->next, "%var1% [ %num% ]", varname) ) + if ( !tok->isName() && !TOKEN::Match(tok,"[.&]") && TOKEN::Match(tok->next(), "%var1% [ %num% ]", varname) ) { - const char *num = tok->next->strAt(2 + varc); + const char *num = tok->next()->strAt(2 + varc); if (strtol(num, NULL, 10) >= size) { - ReportError(tok->next, "Array index out of bounds"); + ReportError(tok->next(), "Array index out of bounds"); } tok = tok->tokAt(4); continue; @@ -114,8 +114,8 @@ void CheckBufferOverrunClass::CheckBufferOverrun_CheckScope( const TOKEN *tok, c // memset, memcmp, memcpy, strncpy, fgets.. if (TOKEN::Match(tok,"memset|memcpy|memmove|memcmp|strncpy|fgets") ) { - if ( TOKEN::Match( tok->next, "( %var1% , %num% , %num% )", varname ) || - TOKEN::Match( tok->next, "( %var% , %var1% , %num% )", varname ) ) + if ( TOKEN::Match( tok->next(), "( %var1% , %num% , %num% )", varname ) || + TOKEN::Match( tok->next(), "( %var% , %var1% , %num% )", varname ) ) { const char *num = tok->strAt(varc + 6); if ( atoi(num) > total_size ) @@ -148,13 +148,13 @@ void CheckBufferOverrunClass::CheckBufferOverrun_CheckScope( const TOKEN *tok, c // Get index variable and stopsize. const char *strindex = tok2->aaaa(); - int value = ((tok2->next->aaaa1() == '=') ? 1 : 0) + atoi(tok2->strAt(2)); + int value = ((tok2->next()->aaaa1() == '=') ? 1 : 0) + atoi(tok2->strAt(2)); if ( value <= size ) continue; // Goto the end of the for loop.. while (tok2 && !TOKEN::Match(tok2,")")) - tok2 = tok2->next; + tok2 = tok2->next(); if (!(tok2->tokAt(5))) break; @@ -183,7 +183,7 @@ void CheckBufferOverrunClass::CheckBufferOverrun_CheckScope( const TOKEN *tok, c break; } - tok2 = tok2->next; + tok2 = tok2->next(); } continue; } @@ -223,7 +223,7 @@ void CheckBufferOverrunClass::CheckBufferOverrun_CheckScope( const TOKEN *tok, c continue; unsigned int parlevel = 0, par = 0; - for ( const TOKEN *tok2 = tok; tok2; tok2 = tok2->next ) + for ( const TOKEN *tok2 = tok; tok2; tok2 = tok2->next() ) { if ( tok2->str() == "(" ) { @@ -283,8 +283,8 @@ void CheckBufferOverrunClass::CheckBufferOverrun_CheckScope( const TOKEN *tok, c // Goto function body.. while ( ftok && (ftok->str() != "{") ) - ftok = ftok->next; - ftok = ftok ? ftok->next : 0; + ftok = ftok->next(); + ftok = ftok ? ftok->next() : 0; // Check variable usage in the function.. _callStack.push_back( tok ); @@ -295,7 +295,7 @@ void CheckBufferOverrunClass::CheckBufferOverrun_CheckScope( const TOKEN *tok, c break; } - ftok = ftok->next; + ftok = ftok->next(); } } } @@ -309,7 +309,7 @@ void CheckBufferOverrunClass::CheckBufferOverrun_CheckScope( const TOKEN *tok, c void CheckBufferOverrunClass::CheckBufferOverrun_LocalVariable() { int indentlevel = 0; - for (const TOKEN *tok = _tokenizer->tokens(); tok; tok = tok->next) + for (const TOKEN *tok = _tokenizer->tokens(); tok; tok = tok->next()) { if (tok->str() == "{") indentlevel++; @@ -362,30 +362,30 @@ void CheckBufferOverrunClass::CheckBufferOverrun_StructVariable() const char *declstruct_pattern[] = {"","","{",0}; for ( const TOKEN * tok = TOKEN::findtoken( _tokenizer->tokens(), declstruct_pattern ); tok; - tok = TOKEN::findtoken( tok->next, declstruct_pattern ) ) + tok = TOKEN::findtoken( tok->next(), declstruct_pattern ) ) { if ( ! TOKEN::Match(tok,"struct|class") ) continue; - const char *structname = tok->next->aaaa(); + const char *structname = tok->next()->aaaa(); - if ( !(tok->next->isName()) ) + if ( !(tok->next()->isName()) ) continue; // Found a struct declaration. Search for arrays.. - for ( TOKEN * tok2 = tok->next->next; tok2; tok2 = tok2->next ) + for ( const TOKEN * tok2 = tok->next()->next(); tok2; tok2 = tok2->next() ) { if ( TOKEN::Match(tok2, "}") ) break; int ivar = 0; - if ( TOKEN::Match(tok2->next, "%type% %var% [ %num% ] ;") ) + if ( TOKEN::Match(tok2->next(), "%type% %var% [ %num% ] ;") ) ivar = 2; - else if ( TOKEN::Match(tok2->next, "%type% %type% %var% [ %num% ] ;") ) + else if ( TOKEN::Match(tok2->next(), "%type% %type% %var% [ %num% ] ;") ) ivar = 3; - else if ( TOKEN::Match(tok2->next, "%type% * %var% [ %num% ] ;") ) + else if ( TOKEN::Match(tok2->next(), "%type% * %var% [ %num% ] ;") ) ivar = 3; - else if ( TOKEN::Match(tok2->next, "%type% %type% * %var% [ %num% ] ;") ) + else if ( TOKEN::Match(tok2->next(), "%type% %type% * %var% [ %num% ] ;") ) ivar = 4; else continue; @@ -393,7 +393,7 @@ void CheckBufferOverrunClass::CheckBufferOverrun_StructVariable() const char *varname[3] = {0,0,0}; varname[1] = tok2->strAt(ivar); int arrsize = atoi(tok2->strAt(ivar+2)); - int total_size = arrsize * _tokenizer->SizeOfType(tok2->next->aaaa()); + int total_size = arrsize * _tokenizer->SizeOfType(tok2->next()->aaaa()); if (total_size == 0) continue; @@ -405,7 +405,7 @@ void CheckBufferOverrunClass::CheckBufferOverrun_StructVariable() const TOKEN *tok3 = TOKEN::findmatch(_tokenizer->tokens(), func_pattern.c_str()); while ( tok3 ) { - for ( const TOKEN *tok4 = tok3; tok4; tok4 = tok4->next ) + for ( const TOKEN *tok4 = tok3; tok4; tok4 = tok4->next() ) { if ( TOKEN::Match(tok4,"[;{}]") ) break; @@ -417,21 +417,21 @@ void CheckBufferOverrunClass::CheckBufferOverrun_StructVariable() break; } } - tok3 = TOKEN::findmatch(tok3->next, func_pattern.c_str()); + tok3 = TOKEN::findmatch(tok3->next(), func_pattern.c_str()); } } - for ( const TOKEN *tok3 = _tokenizer->tokens(); tok3; tok3 = tok3->next ) + for ( const TOKEN *tok3 = _tokenizer->tokens(); tok3; tok3 = tok3->next() ) { if ( strcmp(tok3->aaaa(), structname) ) continue; // Declare variable: Fred fred1; - if ( TOKEN::Match( tok3->next, "%var% ;" ) ) + if ( TOKEN::Match( tok3->next(), "%var% ;" ) ) varname[0] = tok3->strAt(1); // Declare pointer: Fred *fred1 - else if ( TOKEN::Match(tok3->next, "* %var% [,);=]") ) + else if ( TOKEN::Match(tok3->next(), "* %var% [,);=]") ) varname[0] = tok3->strAt(2); else @@ -460,7 +460,7 @@ void CheckBufferOverrunClass::CheckBufferOverrun_StructVariable() break; } - tok3 = tok3->next; + tok3 = tok3->next(); } if ( ! tok3 ) @@ -499,7 +499,7 @@ void CheckBufferOverrunClass::CheckBufferOverrun() void CheckBufferOverrunClass::WarningDangerousFunctions() { - for (const TOKEN *tok = _tokenizer->tokens(); tok; tok = tok->next) + for (const TOKEN *tok = _tokenizer->tokens(); tok; tok = tok->next()) { if (TOKEN::Match(tok, "gets (")) { diff --git a/CheckClass.cpp b/CheckClass.cpp index f4d36ff0f..fd7ef1133 100644 --- a/CheckClass.cpp +++ b/CheckClass.cpp @@ -52,9 +52,9 @@ struct CheckClass::VAR *CheckClass::ClassChecking_GetVarList(const TOKEN *tok1) // Get variable list.. struct VAR *varlist = NULL; unsigned int indentlevel = 0; - for (const TOKEN *tok = tok1; tok; tok = tok->next) + for (const TOKEN *tok = tok1; tok; tok = tok->next()) { - if (!tok->next) + if (!tok->next()) break; if (tok->aaaa0() == '{') @@ -69,7 +69,7 @@ struct CheckClass::VAR *CheckClass::ClassChecking_GetVarList(const TOKEN *tok1) if (indentlevel==1 && (strchr(";{}", tok->aaaa0()) || (tok->aaaa0()!=':' && strchr(tok->aaaa(), ':')))) { - const TOKEN *next = tok->next; + const TOKEN *next = tok->next(); const char *varname = 0; @@ -81,7 +81,7 @@ struct CheckClass::VAR *CheckClass::ClassChecking_GetVarList(const TOKEN *tok1) { if ( strcmp(next->aaaa(), types[type]) == 0) { - varname = next->next->aaaa(); + varname = next->next()->aaaa(); break; } } @@ -123,14 +123,14 @@ const TOKEN * CheckClass::FindClassFunction( const TOKEN *tok, const char classn std::ostringstream externalPattern; externalPattern << classname << " :: " << funcname << " ("; - for ( ;tok; tok = tok->next ) + for ( ;tok; tok = tok->next() ) { if ( indentlevel == 0 && TOKEN::Match(tok, classPattern.str().c_str()) ) { while ( tok && tok->str() != "{" ) - tok = tok->next; + tok = tok->next(); if ( tok ) - tok = tok->next; + tok = tok->next(); if ( ! tok ) break; indentlevel = 1; @@ -144,7 +144,7 @@ const TOKEN * CheckClass::FindClassFunction( const TOKEN *tok, const char classn else { - for ( ; tok; tok = tok->next ) + for ( ; tok; tok = tok->next() ) { if ( tok->str() == "{" ) ++indentlevel; @@ -172,13 +172,13 @@ const TOKEN * CheckClass::FindClassFunction( const TOKEN *tok, const char classn if ( indentlevel == 1 ) { // Member function implemented in the class declaration? - if (!TOKEN::Match(tok,"~") && TOKEN::Match(tok->next, internalPattern.str().c_str())) + if (!TOKEN::Match(tok,"~") && TOKEN::Match(tok->next(), internalPattern.str().c_str())) { const TOKEN *tok2 = tok; while ( tok2 && tok2->str() != "{" && tok2->str() != ";" ) - tok2 = tok2->next; + tok2 = tok2->next(); if ( tok2 && tok2->str() == "{" ) - return tok->next; + return tok->next(); } } @@ -211,9 +211,9 @@ void CheckClass::ClassChecking_VarList_Initialize(const TOKEN *tok1, const TOKEN bool Assign = false; unsigned int indentlevel = 0; - for (; ftok; ftok = ftok->next) + for (; ftok; ftok = ftok->next()) { - if (!ftok->next) + if (!ftok->next()) break; // Class constructor.. initializing variables like this @@ -250,18 +250,18 @@ void CheckClass::ClassChecking_VarList_Initialize(const TOKEN *tok1, const TOKEN continue; // Using the operator= function to initialize all variables.. - if ( TOKEN::Match(ftok->next, "* this = ") ) + if ( TOKEN::Match(ftok->next(), "* this = ") ) { for (struct VAR *var = varlist; var; var = var->next) var->init = true; break; } - if (!TOKEN::Match(ftok->next, "%var%") && !TOKEN::Match(ftok->next, "this . %var%")) + if (!TOKEN::Match(ftok->next(), "%var%") && !TOKEN::Match(ftok->next(), "this . %var%")) continue; // Goto the first token in this statement.. - ftok = ftok->next; + ftok = ftok->next(); // Skip "this->" if ( TOKEN::Match(ftok, "this .") ) @@ -328,7 +328,7 @@ void CheckClass::CheckConstructors() { int indentlevel = 0; bool isPrivate = true; - for ( const TOKEN *tok = tok1; tok; tok = tok->next ) + for ( const TOKEN *tok = tok1; tok; tok = tok->next() ) { // Indentation if ( tok->str() == "{" ) @@ -364,14 +364,14 @@ void CheckClass::CheckConstructors() { // TODO: Handle private constructors. // Right now to avoid false positives I just bail out - tok1 = TOKEN::findmatch( tok1->next, pattern_class ); + tok1 = TOKEN::findmatch( tok1->next(), pattern_class ); continue; } // Are there a class constructor? const TOKEN *constructor_token = TOKEN::findmatch( tok1, "%any% %var1% (", className ); while ( TOKEN::Match( constructor_token, "~" ) ) - constructor_token = TOKEN::findmatch( constructor_token->next, "%any% %var1% (", className ); + constructor_token = TOKEN::findmatch( constructor_token->next(), "%any% %var1% (", className ); // There are no constructor. if ( ! constructor_token ) @@ -397,7 +397,7 @@ void CheckClass::CheckConstructors() } } - tok1 = TOKEN::findmatch( tok1->next, pattern_class ); + tok1 = TOKEN::findmatch( tok1->next(), pattern_class ); continue; } @@ -418,7 +418,7 @@ void CheckClass::CheckConstructors() varlist = nextvar; } - tok1 = TOKEN::findmatch( tok1->next, pattern_class ); + tok1 = TOKEN::findmatch( tok1->next(), pattern_class ); } } @@ -454,7 +454,7 @@ void CheckClass::CheckConstructors(const TOKEN *tok1, struct VAR *varlist, const for ( struct VAR *var = varlist; var; var = var->next ) var->init = false; - constructor_token = FindClassFunction( constructor_token->next, className, funcname, indentlevel ); + constructor_token = FindClassFunction( constructor_token->next(), className, funcname, indentlevel ); callstack.clear(); ClassChecking_VarList_Initialize(tok1, constructor_token, varlist, className, callstack); } @@ -469,9 +469,9 @@ void CheckClass::CheckUnusedPrivateFunctions() { // Locate some class const char *pattern_class[] = {"class","","{",NULL}; - for (const TOKEN *tok1 = TOKEN::findtoken(_tokenizer->tokens(), pattern_class); tok1; tok1 = TOKEN::findtoken(tok1->next, pattern_class)) + for (const TOKEN *tok1 = TOKEN::findtoken(_tokenizer->tokens(), pattern_class); tok1; tok1 = TOKEN::findtoken(tok1->next(), pattern_class)) { - const char *classname = tok1->next->aaaa(); + const char *classname = tok1->next()->aaaa(); // The class implementation must be available.. const char *pattern_classconstructor[] = {"","::","",NULL}; @@ -485,7 +485,7 @@ void CheckClass::CheckUnusedPrivateFunctions() FuncList.clear(); bool priv = false; unsigned int indent_level = 0; - for (const TOKEN *tok = tok1; tok; tok = tok->next) + for (const TOKEN *tok = tok1; tok; tok = tok->next()) { if (TOKEN::Match(tok,"friend %var%")) { @@ -538,7 +538,7 @@ void CheckClass::CheckUnusedPrivateFunctions() numpar++; else if (ftok->aaaa0() == ')') numpar--; - ftok = ftok->next; + ftok = ftok->next(); } if (!ftok) @@ -559,14 +559,14 @@ void CheckClass::CheckUnusedPrivateFunctions() break; indent_level--; } - if (ftok->next && ftok->next->aaaa0() == '(') + if (ftok->next() && ftok->next()->aaaa0() == '(') FuncList.remove(ftok->aaaa()); - ftok = ftok->next; + ftok = ftok->next(); } } if (ftok) - ftok = ftok->next; + ftok = ftok->next(); } while (HasFuncImpl && !FuncList.empty()) @@ -604,7 +604,7 @@ void CheckClass::CheckUnusedPrivateFunctions() void CheckClass::CheckMemset() { // Locate all 'memset' tokens.. - for (const TOKEN *tok = _tokenizer->tokens(); tok; tok = tok->next) + for (const TOKEN *tok = _tokenizer->tokens(); tok; tok = tok->next()) { if (!TOKEN::Match(tok,"memset") && !TOKEN::Match(tok,"memcpy") && !TOKEN::Match(tok,"memmove")) continue; @@ -640,7 +640,7 @@ void CheckClass::CheckMemset() // Warn if type is a struct that contains any std::* const char *pattern2[] = {"struct","","{",NULL}; pattern2[1] = type; - for (const TOKEN *tstruct = TOKEN::findtoken(_tokenizer->tokens(), pattern2); tstruct; tstruct = tstruct->next) + for (const TOKEN *tstruct = TOKEN::findtoken(_tokenizer->tokens(), pattern2); tstruct; tstruct = tstruct->next()) { if (tstruct->aaaa0() == '}') break; @@ -697,7 +697,7 @@ void CheckClass::virtualDestructor() // What kind of inheritance is it.. public|protected|private if ( TOKEN::Match( derived, "public|protected|private" ) ) - derived = derived->next; + derived = derived->next(); // Name of base class.. const char *baseName[2]; @@ -705,9 +705,9 @@ void CheckClass::virtualDestructor() baseName[1] = 0; // Update derived so it's ready for the next loop. - derived = derived->next; + derived = derived->next(); if ( TOKEN::Match(derived, ",") ) - derived = derived->next; + derived = derived->next(); // If not public inheritance, skip checking of this base class.. if ( ! isPublic ) @@ -716,7 +716,7 @@ void CheckClass::virtualDestructor() // Find the destructor declaration for the base class. const TOKEN *base = TOKEN::findmatch(_tokenizer->tokens(), "%any% ~ %var1% (", baseName); while (TOKEN::Match(base, "::")) - base = TOKEN::findmatch(base->next, "%any% ~ %var1% (", baseName); + base = TOKEN::findmatch(base->next(), "%any% ~ %var1% (", baseName); // Check that there is a destructor.. if ( ! base ) diff --git a/CheckFunctionUsage.cpp b/CheckFunctionUsage.cpp index af683185a..57cae577a 100644 --- a/CheckFunctionUsage.cpp +++ b/CheckFunctionUsage.cpp @@ -44,7 +44,7 @@ CheckFunctionUsage::~CheckFunctionUsage() void CheckFunctionUsage::parseTokens( const Tokenizer &tokenizer ) { // Function declarations.. - for ( const TOKEN *tok = tokenizer.tokens(); tok; tok = tok->next ) + for ( const TOKEN *tok = tokenizer.tokens(); tok; tok = tok->next() ) { if ( tok->FileIndex != 0 ) continue; @@ -59,7 +59,7 @@ void CheckFunctionUsage::parseTokens( const Tokenizer &tokenizer ) funcname = tok->tokAt(2); // Check that ") {" is found.. - for (const TOKEN *tok2 = funcname; tok2; tok2 = tok2->next) + for (const TOKEN *tok2 = funcname; tok2; tok2 = tok2->next()) { if ( TOKEN::Match(tok2, ")") ) { @@ -87,7 +87,7 @@ void CheckFunctionUsage::parseTokens( const Tokenizer &tokenizer ) } // Function usage.. - for ( const TOKEN *tok = tokenizer.tokens(); tok; tok = tok->next ) + for ( const TOKEN *tok = tokenizer.tokens(); tok; tok = tok->next() ) { const TOKEN *funcname = 0; @@ -99,13 +99,13 @@ void CheckFunctionUsage::parseTokens( const Tokenizer &tokenizer ) TOKEN::Match(tok, "|| %var% (") || TOKEN::Match(tok, "else %var% (") || TOKEN::Match(tok, "return %var% (") ) - funcname = tok->next; + funcname = tok->next(); // funcname ( => Assert that the end paranthesis isn't followed by { if ( TOKEN::Match(funcname, "%var% (") ) { int parlevel = 0; - for ( const TOKEN *tok2 = funcname; tok2; tok2 = tok2->next ) + for ( const TOKEN *tok2 = funcname; tok2; tok2 = tok2->next() ) { if (tok2->str() == "(") ++parlevel; diff --git a/CheckHeaders.cpp b/CheckHeaders.cpp index bd47bc0ac..ceb5cb16f 100644 --- a/CheckHeaders.cpp +++ b/CheckHeaders.cpp @@ -48,7 +48,7 @@ CheckHeaders::~CheckHeaders() void CheckHeaders::WarningHeaderWithImplementation() { - for ( const TOKEN *tok = _tokenizer->tokens(); tok; tok = tok->next) + for ( const TOKEN *tok = _tokenizer->tokens(); tok; tok = tok->next()) { // Only interested in included file if (tok->FileIndex == 0) @@ -62,8 +62,8 @@ void CheckHeaders::WarningHeaderWithImplementation() // Goto next file.. unsigned int fileindex = tok->FileIndex; - while ( tok->next && tok->FileIndex == fileindex ) - tok = tok->next; + while ( tok->next() && tok->FileIndex == fileindex ) + tok = tok->next(); } } } @@ -83,14 +83,14 @@ void CheckHeaders::WarningHeaderWithImplementation() void CheckHeaders::WarningIncludeHeader() { // Including.. - for ( const TOKEN *includetok = _tokenizer->tokens(); includetok; includetok = includetok->next) + for ( const TOKEN *includetok = _tokenizer->tokens(); includetok; includetok = includetok->next()) { if (includetok->str() != "#include") continue; // Get fileindex of included file.. unsigned int hfile = 0; - const char *includefile = includetok->next->aaaa(); + const char *includefile = includetok->next()->aaaa(); while (hfile < _tokenizer->getFiles()->size()) { if ( Tokenizer::SameFileName( _tokenizer->getFiles()->at(hfile).c_str(), includefile ) ) @@ -112,7 +112,7 @@ void CheckHeaders::WarningIncludeHeader() // Extract classes and names in the header.. int indentlevel = 0; - for ( const TOKEN *tok1 = _tokenizer->tokens(); tok1; tok1 = tok1->next ) + for ( const TOKEN *tok1 = _tokenizer->tokens(); tok1; tok1 = tok1->next() ) { if ( tok1->FileIndex != hfile ) continue; @@ -150,12 +150,12 @@ void CheckHeaders::WarningIncludeHeader() // -------------------------------------- else if (tok1->str() == "enum") { - tok1 = tok1->next; + tok1 = tok1->next(); while ( ! TOKEN::Match( tok1, "; %any%" ) ) { if ( tok1->isName() ) namelist.push_back(tok1->str()); - tok1 = tok1->next; + tok1 = tok1->next(); } } @@ -180,7 +180,7 @@ void CheckHeaders::WarningIncludeHeader() if (strcmp(tok1->strAt(1),"enum")==0) continue; int parlevel = 0; - while (tok1->next) + while (tok1->next()) { if ( TOKEN::Match(tok1, "[({]") ) parlevel++; @@ -197,7 +197,7 @@ void CheckHeaders::WarningIncludeHeader() namelist.push_back(tok1->str()); } - tok1 = tok1->next; + tok1 = tok1->next(); } } } @@ -206,7 +206,7 @@ void CheckHeaders::WarningIncludeHeader() // Check if the extracted names are used... bool Needed = false; bool NeedDeclaration = false; - for ( const TOKEN *tok1 = _tokenizer->tokens(); tok1; tok1 = tok1->next) + for ( const TOKEN *tok1 = _tokenizer->tokens(); tok1; tok1 = tok1->next()) { if (tok1->FileIndex != includetok->FileIndex) continue; diff --git a/CheckMemoryLeak.cpp b/CheckMemoryLeak.cpp index 3fe509dc7..35e4eab18 100644 --- a/CheckMemoryLeak.cpp +++ b/CheckMemoryLeak.cpp @@ -73,8 +73,8 @@ CheckMemoryLeakClass::AllocType CheckMemoryLeakClass::GetAllocationType( const T if ( tok2 && tok2->str() == "(" ) { while ( tok2 && tok2->str() != ")" ) - tok2 = tok2->next; - tok2 = tok2 ? tok2->next : NULL; + tok2 = tok2->next(); + tok2 = tok2 ? tok2->next() : NULL; } if ( ! tok2 ) return No; @@ -144,8 +144,8 @@ CheckMemoryLeakClass::AllocType CheckMemoryLeakClass::GetReallocationType( const if ( tok2 && tok2->str() == "(" ) { while ( tok2 && tok2->str() != ")" ) - tok2 = tok2->next; - tok2 = tok2 ? tok2->next : NULL; + tok2 = tok2->next(); + tok2 = tok2 ? tok2->next() : NULL; } if ( ! tok2 ) return No; @@ -209,7 +209,7 @@ const char * CheckMemoryLeakClass::call_func( const TOKEN *tok, std::listnext ) + for ( ; tok; tok = tok->next() ) { if ( tok->str() == "(" ) ++parlevel; @@ -232,14 +232,14 @@ const char * CheckMemoryLeakClass::call_func( const TOKEN *tok, std::liststr() != "{") ) - ftok = ftok->next; + ftok = ftok->next(); TOKEN *func = getcode( ftok->tokAt(1), callstack, parname, alloctype, dealloctype ); simplifycode( func ); const TOKEN *func_ = func; while ( func_ && func_->str() == ";" ) - func_ = func_->next; + func_ = func_->next(); /* - for (const TOKEN *t = func; t; t = t->next) + for (const TOKEN *t = func; t; t = t->next()) { std::cout << t->str() << "\n"; }*/ @@ -290,8 +290,8 @@ void CheckMemoryLeakClass::instoken(TOKEN *tok, const char str[]) { TOKEN *newtok = new TOKEN; newtok->setstr(str); - newtok->next = tok->next; - tok->next = newtok; + newtok->next( tok->next() ); + tok->next( newtok ); } //--------------------------------------------------------------------------- @@ -318,9 +318,9 @@ TOKEN *CheckMemoryLeakClass::getcode(const TOKEN *tok, std::list newtok->setstr(_str); \ newtok->linenr = tok->linenr; \ newtok->FileIndex = tok->FileIndex; \ - newtok->next = 0; \ + newtok->next( 0 ); \ if (rettail) \ - rettail->next = newtok; \ + rettail->next( newtok ); \ else \ rethead = newtok; \ rettail=newtok; \ @@ -335,7 +335,7 @@ TOKEN *CheckMemoryLeakClass::getcode(const TOKEN *tok, std::list int indentlevel = 0; int parlevel = 0; - for ( ; tok; tok = tok->next ) + for ( ; tok; tok = tok->next() ) { if ( tok->str() == "{" ) { @@ -420,7 +420,7 @@ TOKEN *CheckMemoryLeakClass::getcode(const TOKEN *tok, std::list // Make sure the "use" will not be added while ( tok->str() != ")" ) - tok = tok->next; + tok = tok->next(); } else if ( TOKEN::Match(tok, "if (") && notvar(tok->tokAt(2), varnames) ) { @@ -439,7 +439,7 @@ TOKEN *CheckMemoryLeakClass::getcode(const TOKEN *tok, std::list // Check if the condition depends on var somehow.. bool dep = false; int parlevel = 0; - for ( const TOKEN *tok2 = tok; tok2; tok2 = tok2->next ) + for ( const TOKEN *tok2 = tok; tok2; tok2 = tok2->next() ) { if ( tok2->str() == "(" ) ++parlevel; @@ -450,8 +450,8 @@ TOKEN *CheckMemoryLeakClass::getcode(const TOKEN *tok, std::list break; } if ( (tok2->str() != ".") && - TOKEN::Match(tok2->next, "%var1%", varnames) && - !TOKEN::Match(tok2->next, "%var1% .", varnames) ) + TOKEN::Match(tok2->next(), "%var1%", varnames) && + !TOKEN::Match(tok2->next(), "%var1% .", varnames) ) { dep = true; break; @@ -530,7 +530,7 @@ TOKEN *CheckMemoryLeakClass::getcode(const TOKEN *tok, std::list // Callback.. if ( TOKEN::Match(tok, "( * %var% ) (") ) { - for ( const TOKEN *tok2 = tok->tokAt(5); tok2; tok2 = tok2->next ) + for ( const TOKEN *tok2 = tok->tokAt(5); tok2; tok2 = tok2->next() ) { if ( TOKEN::Match(tok2, ";{") ) break; @@ -558,10 +558,10 @@ void CheckMemoryLeakClass::erase(TOKEN *begin, const TOKEN *end) if ( ! begin ) return; - while ( begin->next && begin->next != end ) + while ( begin->next() && begin->next() != end ) { - TOKEN *next = begin->next; - begin->next = begin->next->next; + TOKEN *next = begin->next(); + begin->next( begin->next()->next() ); delete next; } } @@ -574,7 +574,7 @@ void CheckMemoryLeakClass::simplifycode(TOKEN *tok) { done = true; - for (TOKEN *tok2 = tok; tok2; tok2 = tok2 ? tok2->next : NULL ) + for ( TOKEN *tok2 = tok; tok2; tok2 = tok2 ? tok2->next() : NULL ) { // Delete extra ";" while (TOKEN::Match(tok2,"[;{}] ;")) @@ -584,30 +584,30 @@ void CheckMemoryLeakClass::simplifycode(TOKEN *tok) } // Replace "{ }" with ";" - if ( TOKEN::Match(tok2->next, "{ }") ) + if ( TOKEN::Match(tok2->next(), "{ }") ) { - tok2->next->setstr(";"); - erase(tok2->next, tok2->tokAt(3)); + tok2->next()->setstr(";"); + erase(tok2->next(), tok2->tokAt(3)); done = false; } // Delete braces around a single instruction.. - if ( TOKEN::Match(tok2->next, "{ %var% ; }") ) + if ( TOKEN::Match(tok2->next(), "{ %var% ; }") ) { erase( tok2, tok2->tokAt(2) ); - erase( tok2->next->next, tok2->tokAt(4) ); + erase( tok2->next()->next(), tok2->tokAt(4) ); done = false; } - if ( TOKEN::Match(tok2->next, "{ %var% %var% ; }") ) + if ( TOKEN::Match(tok2->next(), "{ %var% %var% ; }") ) { erase( tok2, tok2->tokAt(2) ); - erase( tok2->next->next->next, tok2->tokAt(5) ); + erase( tok2->next()->next()->next(), tok2->tokAt(5) ); done = false; } // Delete empty if that is not followed by an else if (tok2->tokAt(2) && - (tok2->next->str().find("if") == 0) && + (tok2->next()->str().find("if") == 0) && TOKEN::Match(tok2->tokAt(2), ";") && !TOKEN::Match(tok2->tokAt(3), "else")) { @@ -616,7 +616,7 @@ void CheckMemoryLeakClass::simplifycode(TOKEN *tok) } // Delete "if ; else ;" - if ( TOKEN::Match(tok2->next, "if ; else ;") ) + if ( TOKEN::Match(tok2->next(), "if ; else ;") ) { erase( tok2, tok2->tokAt(4) ); done = false; @@ -659,7 +659,7 @@ void CheckMemoryLeakClass::simplifycode(TOKEN *tok) } // Reduce "else ;" => ";" - if ( TOKEN::Match(tok2->next, "else ;") ) + if ( TOKEN::Match(tok2->next(), "else ;") ) { erase(tok2, tok2->tokAt(2)); done = false; @@ -684,7 +684,7 @@ void CheckMemoryLeakClass::simplifycode(TOKEN *tok) if (TOKEN::Match(tok2,"[;{}] if alloc ; else return ;")) { erase(tok2, tok2->tokAt(2)); // Remove "if" - erase(tok2->next, tok2->tokAt(5)); // Remove "; else return" + erase(tok2->next(), tok2->tokAt(5)); // Remove "; else return" done = false; } @@ -722,15 +722,15 @@ void CheckMemoryLeakClass::simplifycode(TOKEN *tok) } // Reduce "do { alloc ; } " => "alloc ;" - if ( TOKEN::Match(tok2->next, "do { alloc ; }") ) + if ( TOKEN::Match(tok2->next(), "do { alloc ; }") ) { erase(tok2, tok2->tokAt(3)); - erase(tok2->next->next, tok2->tokAt(4)); + erase(tok2->next()->next(), tok2->tokAt(4)); done = false; } // Reduce "loop if break ; => ";" - if ( TOKEN::Match( tok2->next, "loop %var%" ) && + if ( TOKEN::Match( tok2->next(), "loop %var%" ) && tok2->tokAt(2)->str().find("if") == 0 && (TOKEN::Match( tok2->tokAt(3), "break ; ") || TOKEN::Match( tok2->tokAt(3), "continue ;")) && !TOKEN::Match(tok2->tokAt(5),"else") ) @@ -740,36 +740,36 @@ void CheckMemoryLeakClass::simplifycode(TOKEN *tok) } // Reduce "if(true) X ;" => "X ;" - if (TOKEN::Match(tok2->next, "if(true) %var% ;") && !TOKEN::Match(tok2->tokAt(4),"else")) + if (TOKEN::Match(tok2->next(), "if(true) %var% ;") && !TOKEN::Match(tok2->tokAt(4),"else")) { erase( tok2, tok2->tokAt(2) ); done = false; } // Replace "loop { X ; break ; }" with "X ;" - if ( TOKEN::Match(tok2->next, "loop { %var% ; break ; }") ) + if ( TOKEN::Match(tok2->next(), "loop { %var% ; break ; }") ) { erase(tok2, tok2->tokAt(3)); - erase(tok2->next->next, tok2->tokAt(6)); + erase(tok2->next()->next(), tok2->tokAt(6)); done = false; } // Replace "loop ;" with ";" - if ( TOKEN::Match(tok2->next, "loop ;") ) + if ( TOKEN::Match(tok2->next(), "loop ;") ) { erase(tok2, tok2->tokAt(2)); done = false; } // Replace "loop !var ;" with ";" - if ( TOKEN::Match(tok2->next, "loop !var ;") ) + if ( TOKEN::Match(tok2->next(), "loop !var ;") ) { erase(tok2, tok2->tokAt(4)); done = false; } // Replace "loop !var alloc ;" with " alloc ;" - if ( TOKEN::Match(tok2->next, "loop !var alloc ;") ) + if ( TOKEN::Match(tok2->next(), "loop !var alloc ;") ) { erase(tok2, tok2->tokAt(3)); done = false; @@ -790,7 +790,7 @@ void CheckMemoryLeakClass::simplifycode(TOKEN *tok) } // Reduce "if return ; if return ;" => "if return ;" - if ( TOKEN::Match(tok2->next, "if return ; if return ;") ) + if ( TOKEN::Match(tok2->next(), "if return ; if return ;") ) { erase( tok2, tok2->tokAt(4) ); done = false; @@ -799,26 +799,26 @@ void CheckMemoryLeakClass::simplifycode(TOKEN *tok) // Reduce "[;{}] return ; %var%" => "[;{}] return ;" if ( TOKEN::Match(tok2, "[;{}] return ; %var%") ) { - erase( tok2->next->next, tok2->tokAt(4) ); + erase( tok2->next()->next(), tok2->tokAt(4) ); done = false; } // Reduce "[;{}] return use ; %var%" => "[;{}] return use ;" if ( TOKEN::Match(tok2, "[;{}] return use ; %var%") ) { - erase( tok2->next->next->next, tok2->tokAt(5) ); + erase( tok2->next()->next()->next(), tok2->tokAt(5) ); done = false; } // Reduce "if(var) return use ;" => "return use ;" - if ( TOKEN::Match(tok2->next, "if(var) return use ;") && !TOKEN::Match(tok2->tokAt(5),"else")) + if ( TOKEN::Match(tok2->next(), "if(var) return use ;") && !TOKEN::Match(tok2->tokAt(5),"else")) { erase( tok2, tok2->tokAt(2) ); done = false; } // Reduce "if(var) use ;" => "use ;" - if ( TOKEN::Match(tok2->next, "if(var) use ;") && !TOKEN::Match(tok2->tokAt(4),"else")) + if ( TOKEN::Match(tok2->next(), "if(var) use ;") && !TOKEN::Match(tok2->tokAt(4),"else")) { erase( tok2, tok2->tokAt(2) ); done = false; @@ -833,7 +833,7 @@ void CheckMemoryLeakClass::simplifycode(TOKEN *tok) // Reduce "if* alloc ; dealloc ;" => ";" if ( TOKEN::Match(tok2->tokAt(2), "alloc ; dealloc ;") && - tok2->next->str().find("if") == 0 ) + tok2->next()->str().find("if") == 0 ) { erase( tok2, tok2->tokAt(5) ); done = false; @@ -873,7 +873,7 @@ void CheckMemoryLeakClass::simplifycode(TOKEN *tok) // Right now, I just handle if there are a few case and perhaps a default. bool valid = false; bool incase = false; - for ( const TOKEN * _tok = tok2->tokAt(2); _tok; _tok = _tok->next ) + for ( const TOKEN * _tok = tok2->tokAt(2); _tok; _tok = _tok->next() ) { if ( _tok->str() == "{" ) break; @@ -905,7 +905,7 @@ void CheckMemoryLeakClass::simplifycode(TOKEN *tok) done = false; tok2->setstr(";"); erase( tok2, tok2->tokAt(2) ); - tok2 = tok2->next; + tok2 = tok2->next(); bool first = true; while (TOKEN::Match(tok2,"case") || TOKEN::Match(tok2,"default")) { @@ -925,11 +925,11 @@ void CheckMemoryLeakClass::simplifycode(TOKEN *tok) instoken( tok2, "else" ); } while ( tok2 && tok2->str() != "}" && ! TOKEN::Match(tok2,"break ;") ) - tok2 = tok2->next; + tok2 = tok2->next(); if (TOKEN::Match(tok2,"break ;")) { tok2->setstr(";"); - tok2 = tok2->next->next; + tok2 = tok2->next()->next(); } } } @@ -1000,8 +1000,8 @@ void CheckMemoryLeakClass::CheckMemoryLeak_CheckScope( const TOKEN *Tok1, const ! TOKEN::findmatch(tok,"return use ;") ) { const TOKEN *last = tok; - while (last->next) - last = last->next; + while (last->next()) + last = last->next(); MemoryLeak(last, varname); } @@ -1010,7 +1010,7 @@ void CheckMemoryLeakClass::CheckMemoryLeak_CheckScope( const TOKEN *Tok1, const { TOKEN *first = tok; while ( first && first->str() == ";" ) - first = first->next; + first = first->next(); bool noerr = false; noerr |= TOKEN::Match( first, "alloc ; }" ); @@ -1028,7 +1028,7 @@ void CheckMemoryLeakClass::CheckMemoryLeak_CheckScope( const TOKEN *Tok1, const if ( ! noerr ) { std::cout << "Token listing..\n "; - for ( const TOKEN *tok2 = tok; tok2; tok2 = tok2->next ) + for ( const TOKEN *tok2 = tok; tok2; tok2 = tok2->next() ) std::cout << " " << tok2->str(); std::cout << "\n"; } @@ -1049,7 +1049,7 @@ void CheckMemoryLeakClass::CheckMemoryLeak_InFunction() { bool infunc = false; int indentlevel = 0; - for (const TOKEN *tok = _tokenizer->tokens(); tok; tok = tok->next) + for (const TOKEN *tok = _tokenizer->tokens(); tok; tok = tok->next()) { if (tok->str() == "{") indentlevel++; @@ -1072,10 +1072,10 @@ void CheckMemoryLeakClass::CheckMemoryLeak_InFunction() if (indentlevel>0 && infunc) { if ( TOKEN::Match(tok, "[{};] %type% * %var% [;=]") ) - CheckMemoryLeak_CheckScope( tok->next, tok->strAt(3) ); + CheckMemoryLeak_CheckScope( tok->next(), tok->strAt(3) ); else if ( TOKEN::Match(tok, "[{};] %type% %type% * %var% [;=]") ) - CheckMemoryLeak_CheckScope( tok->next, tok->strAt(4) ); + CheckMemoryLeak_CheckScope( tok->next(), tok->strAt(4) ); } } } @@ -1092,7 +1092,7 @@ void CheckMemoryLeakClass::CheckMemoryLeak_InFunction() void CheckMemoryLeakClass::CheckMemoryLeak_ClassMembers() { int indentlevel = 0; - for ( const TOKEN *tok = _tokenizer->tokens(); tok; tok = tok->next ) + for ( const TOKEN *tok = _tokenizer->tokens(); tok; tok = tok->next() ) { if ( tok->str() == "{" ) indentlevel++; @@ -1114,12 +1114,12 @@ void CheckMemoryLeakClass::CheckMemoryLeak_ClassMembers_ParseClass( const TOKEN { // Go into class. while ( tok1 && tok1->str() != "{" ) - tok1 = tok1->next; + tok1 = tok1->next(); if ( tok1 ) - tok1 = tok1->next; + tok1 = tok1->next(); int indentlevel = 0; - for ( const TOKEN *tok = tok1; tok; tok = tok->next ) + for ( const TOKEN *tok = tok1; tok; tok = tok->next() ) { if ( tok->str() == "{" ) indentlevel++; @@ -1144,7 +1144,7 @@ void CheckMemoryLeakClass::CheckMemoryLeak_ClassMembers_ParseClass( const TOKEN } // Declaring member variable.. check allocations and deallocations - if ( TOKEN::Match(tok->next, "%type% * %var% ;") ) + if ( TOKEN::Match(tok->next(), "%type% * %var% ;") ) { if ( tok->isName() || TOKEN::Match(tok, "[;}]")) { @@ -1190,7 +1190,7 @@ void CheckMemoryLeakClass::CheckMemoryLeak_ClassMembers_Variable( const std::vec // Loop through all tokens. Inspect member functions bool memberfunction = false; int indentlevel = 0; - for ( const TOKEN *tok = _tokenizer->tokens(); tok; tok = tok->next ) + for ( const TOKEN *tok = _tokenizer->tokens(); tok; tok = tok->next() ) { if ( tok->str() == "{" ) indentlevel++; diff --git a/CheckOther.cpp b/CheckOther.cpp index 88d5ce0c0..36b15d6bb 100644 --- a/CheckOther.cpp +++ b/CheckOther.cpp @@ -47,7 +47,7 @@ CheckOther::~CheckOther() void CheckOther::WarningOldStylePointerCast() { - for (const TOKEN *tok = _tokenizer->tokens(); tok; tok = tok->next) + for (const TOKEN *tok = _tokenizer->tokens(); tok; tok = tok->next()) { // Old style pointer casting.. if (!TOKEN::Match(tok, "( %type% * ) %var%")) @@ -74,7 +74,7 @@ void CheckOther::WarningOldStylePointerCast() void CheckOther::WarningIsDigit() { - for (const TOKEN *tok = _tokenizer->tokens(); tok; tok = tok->next) + for (const TOKEN *tok = _tokenizer->tokens(); tok; tok = tok->next()) { bool err = false; err |= TOKEN::Match(tok, "%var% >= '0' && %var% <= '9'"); @@ -99,7 +99,7 @@ void CheckOther::WarningIsDigit() void CheckOther::WarningIsAlpha() { - for (const TOKEN *tok = _tokenizer->tokens(); tok; tok = tok->next) + for (const TOKEN *tok = _tokenizer->tokens(); tok; tok = tok->next()) { if ( tok->str() != "(" ) continue; @@ -159,7 +159,7 @@ void CheckOther::WarningRedundantCode() { // if (p) delete p - for (const TOKEN *tok = _tokenizer->tokens(); tok; tok = tok->next) + for (const TOKEN *tok = _tokenizer->tokens(); tok; tok = tok->next()) { if ( tok->str() != "if" ) continue; @@ -182,7 +182,7 @@ void CheckOther::WarningRedundantCode() continue; if ( tok2->str() == "{" ) - tok2 = tok2->next; + tok2 = tok2->next(); bool err = false; if (TOKEN::Match(tok2,"delete %var% ;")) @@ -221,12 +221,12 @@ void CheckOther::WarningIf() { // Search for 'if (condition);' - for (const TOKEN *tok = _tokenizer->tokens(); tok; tok = tok->next) + for (const TOKEN *tok = _tokenizer->tokens(); tok; tok = tok->next()) { if (tok->str() == "if") { int parlevel = 0; - for (const TOKEN *tok2 = tok->next; tok2; tok2 = tok2->next) + for (const TOKEN *tok2 = tok->next(); tok2; tok2 = tok2->next()) { if (tok2->str() == "(") parlevel++; @@ -250,12 +250,12 @@ void CheckOther::WarningIf() } // Search for 'a=b; if (a==b)' - for (const TOKEN *tok = _tokenizer->tokens(); tok; tok = tok->next) + for (const TOKEN *tok = _tokenizer->tokens(); tok; tok = tok->next()) { // Begin statement? if ( ! TOKEN::Match(tok, "[;{}]") ) continue; - tok = tok->next; + tok = tok->next(); if ( ! tok ) break; @@ -316,7 +316,7 @@ void CheckOther::WarningIf() void CheckOther::InvalidFunctionUsage() { - for ( const TOKEN *tok = _tokenizer->tokens(); tok; tok = tok->next ) + for ( const TOKEN *tok = _tokenizer->tokens(); tok; tok = tok->next() ) { if ((tok->str() != "strtol") && (tok->str() != "strtoul")) continue; @@ -324,7 +324,7 @@ void CheckOther::InvalidFunctionUsage() // Locate the third parameter of the function call.. int parlevel = 0; int param = 1; - for ( const TOKEN *tok2 = tok->next; tok2; tok2 = tok2->next ) + for ( const TOKEN *tok2 = tok->next(); tok2; tok2 = tok2->next() ) { if ( TOKEN::Match(tok2, "(") ) parlevel++; @@ -360,7 +360,7 @@ void CheckOther::InvalidFunctionUsage() void CheckOther::CheckIfAssignment() { - for (const TOKEN *tok = _tokenizer->tokens(); tok; tok = tok->next) + for (const TOKEN *tok = _tokenizer->tokens(); tok; tok = tok->next()) { if (TOKEN::Match(tok, "if ( %var% = %num% )") || TOKEN::Match(tok, "if ( %var% = %str% )") || @@ -383,7 +383,7 @@ void CheckOther::CheckUnsignedDivision() { // Check for "ivar / uvar" and "uvar / ivar" std::map varsign; - for ( const TOKEN *tok = _tokenizer->tokens(); tok; tok = tok->next ) + for ( const TOKEN *tok = _tokenizer->tokens(); tok; tok = tok->next() ) { if ( TOKEN::Match(tok, "[{};(,] %type% %var% [;=,)]") ) { @@ -395,7 +395,7 @@ void CheckOther::CheckUnsignedDivision() else if ( TOKEN::Match(tok, "[{};(,] unsigned %type% %var% [;=,)]") ) varsign[tok->strAt(3)] = 'u'; - else if (!TOKEN::Match(tok,"[).]") && TOKEN::Match(tok->next, "%var% / %var%")) + else if (!TOKEN::Match(tok,"[).]") && TOKEN::Match(tok->next(), "%var% / %var%")) { const char *varname1 = tok->strAt(1); const char *varname2 = tok->strAt(3); @@ -406,19 +406,19 @@ void CheckOther::CheckUnsignedDivision() { // One of the operands are signed, the other is unsigned.. std::ostringstream ostr; - ostr << _tokenizer->fileLine(tok->next) << ": Warning: Division with signed and unsigned operators"; + ostr << _tokenizer->fileLine(tok->next()) << ": Warning: Division with signed and unsigned operators"; _errorLogger->reportErr(ostr.str()); } } - else if (!TOKEN::Match(tok,"[).]") && TOKEN::Match(tok->next, "%var% / - %num%")) + else if (!TOKEN::Match(tok,"[).]") && TOKEN::Match(tok->next(), "%var% / - %num%")) { const char *varname1 = tok->strAt(1); char sign1 = varsign[varname1]; if ( sign1 == 'u' ) { std::ostringstream ostr; - ostr << _tokenizer->fileLine(tok->next) << ": Unsigned division. The result will be wrong."; + ostr << _tokenizer->fileLine(tok->next()) << ": Unsigned division. The result will be wrong."; _errorLogger->reportErr(ostr.str()); } } @@ -430,7 +430,7 @@ void CheckOther::CheckUnsignedDivision() if ( sign2 == 'u' ) { std::ostringstream ostr; - ostr << _tokenizer->fileLine(tok->next) << ": Unsigned division. The result will be wrong."; + ostr << _tokenizer->fileLine(tok->next()) << ": Unsigned division. The result will be wrong."; _errorLogger->reportErr(ostr.str()); } } @@ -450,17 +450,17 @@ void CheckOther::CheckVariableScope() // Walk through all tokens.. bool func = false; int indentlevel = 0; - for ( const TOKEN *tok = _tokenizer->tokens(); tok; tok = tok->next ) + for ( const TOKEN *tok = _tokenizer->tokens(); tok; tok = tok->next() ) { // Skip class and struct declarations.. if ( (tok->str() == "class") || (tok->str() == "struct") ) { - for (const TOKEN *tok2 = tok; tok2; tok2 = tok2->next) + for (const TOKEN *tok2 = tok; tok2; tok2 = tok2->next()) { if ( tok2->str() == "{" ) { int _indentlevel = 0; - for (tok = tok2; tok; tok = tok->next) + for (tok = tok2; tok; tok = tok->next()) { if ( tok->str() == "{" ) { @@ -471,7 +471,7 @@ void CheckOther::CheckVariableScope() _indentlevel--; if ( _indentlevel <= 0 ) { - tok = tok->next; + tok = tok->next(); break; } } @@ -504,7 +504,7 @@ void CheckOther::CheckVariableScope() if ( indentlevel > 0 && func && TOKEN::Match(tok, "[{};]") ) { // First token of statement.. - const TOKEN *tok1 = tok->next; + const TOKEN *tok1 = tok->next(); if ( ! tok1 ) continue; @@ -532,7 +532,7 @@ void CheckOther::CheckVariableScope_LookupVar( const TOKEN *tok1, const char var // Skip the variable declaration.. while (tok && !TOKEN::Match(tok,";")) - tok = tok->next; + tok = tok->next(); // Check if the variable is used in this indentlevel.. bool used = false, used1 = false; @@ -584,7 +584,7 @@ void CheckOther::CheckVariableScope_LookupVar( const TOKEN *tok1, const char var for_or_while = false; } - tok = tok->next; + tok = tok->next(); } // Warning if "used" is true @@ -601,7 +601,7 @@ void CheckOther::CheckVariableScope_LookupVar( const TOKEN *tok1, const char var void CheckOther::CheckConstantFunctionParameter() { - for (const TOKEN *tok = _tokenizer->tokens(); tok; tok = tok->next) + for (const TOKEN *tok = _tokenizer->tokens(); tok; tok = tok->next()) { if ( TOKEN::Match(tok,"[,(] const std :: %type% %var% [,)]") ) { @@ -642,7 +642,7 @@ void CheckOther::CheckStructMemberUsage() { const char *structname = 0; - for ( const TOKEN *tok = _tokenizer->tokens(); tok; tok = tok->next ) + for ( const TOKEN *tok = _tokenizer->tokens(); tok; tok = tok->next() ) { if ( tok->FileIndex != 0 ) continue; @@ -654,13 +654,13 @@ void CheckOther::CheckStructMemberUsage() if (structname && TOKEN::Match(tok, "[{;]")) { const char *varname = 0; - if (TOKEN::Match(tok->next, "%type% %var% [;[]")) + if (TOKEN::Match(tok->next(), "%type% %var% [;[]")) varname = tok->strAt( 2 ); - else if (TOKEN::Match(tok->next, "%type% %type% %var% [;[]")) + else if (TOKEN::Match(tok->next(), "%type% %type% %var% [;[]")) varname = tok->strAt( 2 ); - else if (TOKEN::Match(tok->next, "%type% * %var% [;[]")) + else if (TOKEN::Match(tok->next(), "%type% * %var% [;[]")) varname = tok->strAt( 3 ); - else if (TOKEN::Match(tok->next, "%type% %type% * %var% [;[]")) + else if (TOKEN::Match(tok->next(), "%type% %type% * %var% [;[]")) varname = tok->strAt( 4 ); else continue; @@ -669,7 +669,7 @@ void CheckOther::CheckStructMemberUsage() varnames[0] = varname; varnames[1] = 0; bool used = false; - for ( const TOKEN *tok2 = _tokenizer->tokens(); tok2; tok2 = tok2->next ) + for ( const TOKEN *tok2 = _tokenizer->tokens(); tok2; tok2 = tok2->next() ) { if ( tok->FileIndex != 0 ) continue; @@ -703,7 +703,7 @@ void CheckOther::CheckStructMemberUsage() void CheckOther::CheckCharVariable() { - for (const TOKEN *tok = _tokenizer->tokens(); tok; tok = tok->next) + for (const TOKEN *tok = _tokenizer->tokens(); tok; tok = tok->next()) { // Declaring the variable.. if ( TOKEN::Match(tok, "[{};(,] char %var% [;=,)]") ) @@ -713,7 +713,7 @@ void CheckOther::CheckCharVariable() // Check usage of char variable.. int indentlevel = 0; - for ( const TOKEN *tok2 = tok->next; tok2; tok2 = tok2->next ) + for ( const TOKEN *tok2 = tok->next(); tok2; tok2 = tok2->next() ) { if ( tok2->str() == "{" ) ++indentlevel; @@ -725,10 +725,10 @@ void CheckOther::CheckCharVariable() break; } - if ((tok2->str() != ".") && TOKEN::Match(tok2->next, "%var% [ %var1% ]", varname)) + if ((tok2->str() != ".") && TOKEN::Match(tok2->next(), "%var% [ %var1% ]", varname)) { std::ostringstream errmsg; - errmsg << _tokenizer->fileLine(tok2->next) << ": Warning - using char variable as array index"; + errmsg << _tokenizer->fileLine(tok2->next()) << ": Warning - using char variable as array index"; _errorLogger->reportErr(errmsg.str()); break; } @@ -759,7 +759,7 @@ void CheckOther::CheckIncompleteStatement() { int parlevel = 0; - for ( const TOKEN *tok = _tokenizer->tokens(); tok; tok = tok->next ) + for ( const TOKEN *tok = _tokenizer->tokens(); tok; tok = tok->next() ) { if ( tok->str() == "(" ) ++parlevel; @@ -769,17 +769,17 @@ void CheckOther::CheckIncompleteStatement() if ( parlevel != 0 ) continue; - if ( (tok->str() != "#") && TOKEN::Match(tok->next,"; %str%") && !TOKEN::Match(tok->tokAt(3), ",") ) + if ( (tok->str() != "#") && TOKEN::Match(tok->next(),"; %str%") && !TOKEN::Match(tok->tokAt(3), ",") ) { std::ostringstream errmsg; - errmsg << _tokenizer->fileLine(tok->next) << ": Redundant code: Found a statement that begins with string constant"; + errmsg << _tokenizer->fileLine(tok->next()) << ": Redundant code: Found a statement that begins with string constant"; _errorLogger->reportErr(errmsg.str()); } - if ( !TOKEN::Match(tok,"#") && TOKEN::Match(tok->next,"; %num%") && !TOKEN::Match(tok->tokAt(3), ",") ) + if ( !TOKEN::Match(tok,"#") && TOKEN::Match(tok->next(),"; %num%") && !TOKEN::Match(tok->tokAt(3), ",") ) { std::ostringstream errmsg; - errmsg << _tokenizer->fileLine(tok->next) << ": Redundant code: Found a statement that begins with numeric constant"; + errmsg << _tokenizer->fileLine(tok->next()) << ": Redundant code: Found a statement that begins with numeric constant"; _errorLogger->reportErr(errmsg.str()); } } @@ -801,19 +801,19 @@ void CheckOther::unreachableCode() while ( tok ) { // Goto the 'return' token - tok = tok->next; + tok = tok->next(); // Locate the end of the 'return' statement while ( tok && ! TOKEN::Match(tok, ";") ) - tok = tok->next; - while ( tok && TOKEN::Match(tok->next, ";") ) - tok = tok->next; + tok = tok->next(); + while ( tok && TOKEN::Match(tok->next(), ";") ) + tok = tok->next(); // If there is a statement below the return it is unreachable if (!TOKEN::Match(tok, "; case|default|}|#") && !TOKEN::Match(tok, "; %var% :")) { std::ostringstream errmsg; - errmsg << _tokenizer->fileLine(tok->next) << ": Unreachable code below a 'return'"; + errmsg << _tokenizer->fileLine(tok->next()) << ": Unreachable code below a 'return'"; _errorLogger->reportErr(errmsg.str()); } @@ -860,7 +860,7 @@ void CheckOther::functionVariableUsage() static const unsigned int USAGE_WRITE = 4; int indentlevel = 0; - for ( const TOKEN *tok = tok1; tok; tok = tok->next ) + for ( const TOKEN *tok = tok1; tok; tok = tok->next() ) { if ( tok->str() == "{" ) ++indentlevel; @@ -889,10 +889,10 @@ void CheckOther::functionVariableUsage() if ( TOKEN::Match(tok, ">>|& %var%") ) varUsage[ tok->strAt(1) ] |= USAGE_WRITE; - if ((TOKEN::Match(tok,"[(=&!]") || isOp(tok)) && TOKEN::Match(tok->next, "%var%")) + if ((TOKEN::Match(tok,"[(=&!]") || isOp(tok)) && TOKEN::Match(tok->next(), "%var%")) varUsage[ tok->strAt(1) ] |= USAGE_READ; - if (TOKEN::Match(tok, "%var%") && (tok->next->str()==")" || isOp(tok->next))) + if (TOKEN::Match(tok, "%var%") && (tok->next()->str()==")" || isOp(tok->next()))) varUsage[ tok->str() ] |= USAGE_READ; if ( TOKEN::Match(tok, "[(,] %var% [,)]") ) @@ -914,26 +914,26 @@ void CheckOther::functionVariableUsage() if ( usage == USAGE_DECLARE ) { std::ostringstream errmsg; - errmsg << _tokenizer->fileLine(tok1->next) << ": Unused variable '" << varname << "'"; + errmsg << _tokenizer->fileLine(tok1->next()) << ": Unused variable '" << varname << "'"; _errorLogger->reportErr(errmsg.str()); } else if ( ! (usage & USAGE_READ) ) { std::ostringstream errmsg; - errmsg << _tokenizer->fileLine(tok1->next) << ": Variable '" << varname << "' is assigned a value that is never used"; + errmsg << _tokenizer->fileLine(tok1->next()) << ": Variable '" << varname << "' is assigned a value that is never used"; _errorLogger->reportErr(errmsg.str()); } else if ( ! (usage & USAGE_WRITE) ) { std::ostringstream errmsg; - errmsg << _tokenizer->fileLine(tok1->next) << ": Variable '" << varname << "' is not assigned a value"; + errmsg << _tokenizer->fileLine(tok1->next()) << ": Variable '" << varname << "' is not assigned a value"; _errorLogger->reportErr(errmsg.str()); } } // Goto next executing scope.. - tok1 = TOKEN::findmatch( tok1->next, ") const| {" ); + tok1 = TOKEN::findmatch( tok1->next(), ") const| {" ); } } diff --git a/errorlogger.h b/errorlogger.h index 7cf8822f0..3ad7fea5a 100644 --- a/errorlogger.h +++ b/errorlogger.h @@ -28,6 +28,8 @@ class ErrorLogger { public: + virtual ~ErrorLogger() {} + /** * Errors and warnings are directed here. * diff --git a/testbufferoverrun.cpp b/testbufferoverrun.cpp index 5c297c5ca..2e3ea58ad 100644 --- a/testbufferoverrun.cpp +++ b/testbufferoverrun.cpp @@ -300,7 +300,7 @@ private: "\n" "static void f()\n" "{\n" - " for ( ABC *abc = abc1; abc; abc = abc->next )\n" + " for ( ABC *abc = abc1; abc; abc = abc->next() )\n" " {\n" " abc->str[10] = 0;\n" " }\n" diff --git a/testsimplifytokens.cpp b/testsimplifytokens.cpp index 55ab1635f..231a807d0 100644 --- a/testsimplifytokens.cpp +++ b/testsimplifytokens.cpp @@ -47,7 +47,7 @@ private: tokenizer.simplifyTokenList(); std::string ret; - for ( const TOKEN *tok = tokenizer.tokens(); tok; tok = tok->next ) + for ( const TOKEN *tok = tokenizer.tokens(); tok; tok = tok->next() ) { ret += std::string(tok->aaaa()) + " "; } diff --git a/testtokenize.cpp b/testtokenize.cpp index d50c80241..e3a21ccbf 100644 --- a/testtokenize.cpp +++ b/testtokenize.cpp @@ -59,7 +59,7 @@ private: bool cmptok(const char *expected[], const TOKEN *actual) { unsigned int i = 0; - for (; expected[i] && actual; ++i, actual = actual->next) + for (; expected[i] && actual; ++i, actual = actual->next()) { if ( strcmp( expected[i], actual->aaaa() ) != 0) return false; @@ -210,7 +210,7 @@ private: tokenizer.simplifyTokenList(); std::ostringstream ostr; - for (const TOKEN *tok = tokenizer.tokens(); tok; tok = tok->next) + for (const TOKEN *tok = tokenizer.tokens(); tok; tok = tok->next()) ostr << " " << tok->str(); ASSERT_EQUALS( std::string(" void f ( ) { if ( true ) ; }"), ostr.str() ); } @@ -281,7 +281,7 @@ private: tokenizer.tokenize(istr, "test.cpp"); tokenizer.setVarId(); - for ( const TOKEN *tok = tokenizer.tokens(); tok; tok = tok->next ) + for ( const TOKEN *tok = tokenizer.tokens(); tok; tok = tok->next() ) { if ( tok->str() != "i" ) ASSERT_EQUALS( 0, tok->varId() ); diff --git a/token.cpp b/token.cpp index ffd646e7a..7bf09fb9b 100644 --- a/token.cpp +++ b/token.cpp @@ -31,7 +31,8 @@ TOKEN::TOKEN() _cstr = 0; _str = ""; linenr = 0; - next = 0; + _next = 0; + _varId = 0; _isName = false; _isNumber = false; } @@ -56,9 +57,9 @@ void TOKEN::setstr( const char s[] ) void TOKEN::combineWithNext(const char str1[], const char str2[]) { - if (!(next)) + if (!(_next)) return; - if (_str!=str1 || next->_str!=str2) + if (_str!=str1 || _next->_str!=str2) return; std::string newstr(std::string(str1) + std::string(str2)); @@ -68,8 +69,8 @@ void TOKEN::combineWithNext(const char str1[], const char str2[]) void TOKEN::deleteNext() { - TOKEN *n = next; - next = n->next; + TOKEN *n = _next; + _next = n->next(); delete n; } @@ -78,7 +79,7 @@ const TOKEN *TOKEN::tokAt(int index) const const TOKEN *tok = this; while (index>0 && tok) { - tok = tok->next; + tok = tok->next(); index--; } return tok; @@ -247,7 +248,7 @@ bool TOKEN::Match(const TOKEN *tok, const char pattern[], const char *varname1[] else if (str != tok->_str) return false; - tok = tok->next; + tok = tok->next(); if (!tok && *p) return false; } @@ -279,7 +280,7 @@ bool TOKEN::isStandardType() const const TOKEN *TOKEN::findmatch(const TOKEN *tok, const char pattern[], const char *varname1[], const char *varname2[]) { - for ( ; tok; tok = tok->next) + for ( ; tok; tok = tok->next()) { if ( TOKEN::Match(tok, pattern, varname1, varname2) ) return tok; @@ -289,7 +290,7 @@ const TOKEN *TOKEN::findmatch(const TOKEN *tok, const char pattern[], const char const TOKEN *TOKEN::findtoken(const TOKEN *tok1, const char *tokenstr[]) { - for (const TOKEN *ret = tok1; ret; ret = ret->next) + for (const TOKEN *ret = tok1; ret; ret = ret->next()) { unsigned int i = 0; const TOKEN *tok = ret; @@ -299,7 +300,7 @@ const TOKEN *TOKEN::findtoken(const TOKEN *tok1, const char *tokenstr[]) return NULL; if (*(tokenstr[i]) && (tokenstr[i] != tok->_str)) break; - tok = tok->next; + tok = tok->next(); i++; } if (!tokenstr[i]) @@ -317,3 +318,14 @@ void TOKEN::varId( unsigned int id ) { _varId = id; } + +TOKEN *TOKEN::next() const +{ + return _next; +} + +void TOKEN::next( TOKEN *next ) +{ + _next = next; +} + diff --git a/token.h b/token.h index 2ef2a12f3..64a4ffb88 100644 --- a/token.h +++ b/token.h @@ -114,9 +114,9 @@ public: unsigned int FileIndex; unsigned int linenr; + TOKEN *next() const; + void next( TOKEN *next ); - - TOKEN *next; unsigned int varId() const; void varId( unsigned int id ); @@ -126,6 +126,7 @@ private: bool _isName; bool _isNumber; unsigned int _varId; + TOKEN *_next; }; #endif // TOKEN_H diff --git a/tokenize.cpp b/tokenize.cpp index ee3ec3f5d..c868d512f 100644 --- a/tokenize.cpp +++ b/tokenize.cpp @@ -68,7 +68,7 @@ TOKEN *Tokenizer::_gettok(TOKEN *tok, int index) { while (tok && index>0) { - tok = tok->next; + tok = tok->next(); index--; } return tok; @@ -165,7 +165,7 @@ void Tokenizer::addtoken(const char str[], const unsigned int lineno, const unsi newtoken->FileIndex = fileno; if (_tokensBack) { - _tokensBack->next = newtoken; + _tokensBack->next( newtoken ); _tokensBack = newtoken; } else @@ -217,11 +217,11 @@ void Tokenizer::InsertTokens(TOKEN *dest, TOKEN *src, unsigned int n) NewToken->linenr = src->linenr; NewToken->setstr(src->aaaa()); - NewToken->next = dest->next; - dest->next = NewToken; + NewToken->next( dest->next() ); + dest->next( NewToken ); - dest = dest->next; - src = src->next; + dest = dest->next(); + src = src->next(); n--; } } @@ -498,7 +498,7 @@ void Tokenizer::tokenizeCode(std::istream &code, const unsigned int FileIndex) addtoken( CurrentToken.c_str(), lineno, FileIndex ); // Combine tokens.. - for (TOKEN *tok = _tokens; tok && tok->next; tok = tok->next) + for (TOKEN *tok = _tokens; tok && tok->next(); tok = tok->next()) { tok->combineWithNext("<", "<"); tok->combineWithNext(">", ">"); @@ -527,7 +527,7 @@ void Tokenizer::tokenizeCode(std::istream &code, const unsigned int FileIndex) } // Replace "->" with "." - for ( TOKEN *tok = _tokens; tok; tok = tok->next ) + for ( TOKEN *tok = _tokens; tok; tok = tok->next() ) { if ( tok->str() == "->" ) { @@ -536,13 +536,13 @@ void Tokenizer::tokenizeCode(std::istream &code, const unsigned int FileIndex) } // typedef.. - for ( TOKEN *tok = _tokens; tok; tok = tok->next ) + for ( TOKEN *tok = _tokens; tok; tok = tok->next() ) { if (TOKEN::Match(tok, "typedef %type% %type% ;")) { const char *type1 = tok->strAt( 1); const char *type2 = tok->strAt( 2); - for ( TOKEN *tok2 = tok; tok2; tok2 = tok2->next ) + for ( TOKEN *tok2 = tok; tok2; tok2 = tok2->next() ) { if (tok2->aaaa()!=type1 && tok2->aaaa()!=type2 && (tok2->str() == type2)) { @@ -559,9 +559,9 @@ void Tokenizer::tokenizeCode(std::istream &code, const unsigned int FileIndex) TOKEN *tok2 = tok; while ( ! TOKEN::Match(tok2, ";") ) - tok2 = tok2->next; + tok2 = tok2->next(); - for ( ; tok2; tok2 = tok2->next ) + for ( ; tok2; tok2 = tok2->next() ) { if (tok2->aaaa()!=type3 && (tok2->str() == type3)) { @@ -571,8 +571,8 @@ void Tokenizer::tokenizeCode(std::istream &code, const unsigned int FileIndex) newtok->setstr(type2); newtok->FileIndex = tok2->FileIndex; newtok->linenr = tok2->linenr; - newtok->next = tok2->next; - tok2->next = newtok; + newtok->next( tok2->next() ); + tok2->next( newtok ); tok2 = newtok; } } @@ -581,17 +581,17 @@ void Tokenizer::tokenizeCode(std::istream &code, const unsigned int FileIndex) // Remove __asm.. - for ( TOKEN *tok = _tokens; tok; tok = tok->next ) + for ( TOKEN *tok = _tokens; tok; tok = tok->next() ) { - if ( TOKEN::Match(tok->next, "__asm {") ) + if ( TOKEN::Match(tok->next(), "__asm {") ) { - while ( tok->next ) + while ( tok->next() ) { - bool last = TOKEN::Match( tok->next, "}" ); + bool last = TOKEN::Match( tok->next(), "}" ); - // Unlink and delete tok->next - TOKEN *next = tok->next; - tok->next = tok->next->next; + // Unlink and delete tok->next() + TOKEN *next = tok->next(); + tok->next( tok->next()->next() ); delete next; // break if this was the last token to delete.. @@ -605,12 +605,12 @@ void Tokenizer::tokenizeCode(std::istream &code, const unsigned int FileIndex) while ( TOKEN::Match(_tokens, "volatile") ) { TOKEN *tok = _tokens; - _tokens = _tokens->next; + _tokens = _tokens->next(); delete tok; } - for ( TOKEN *tok = _tokens; tok; tok = tok->next ) + for ( TOKEN *tok = _tokens; tok; tok = tok->next() ) { - while ( TOKEN::Match(tok->next, "volatile") ) + while ( TOKEN::Match(tok->next(), "volatile") ) { tok->deleteNext(); } @@ -623,26 +623,26 @@ void Tokenizer::tokenizeCode(std::istream &code, const unsigned int FileIndex) void Tokenizer::setVarId() { // Clear all variable ids - for ( TOKEN *tok = _tokens; tok; tok = tok->next ) + for ( TOKEN *tok = _tokens; tok; tok = tok->next() ) tok->varId( 0 ); // Set variable ids.. unsigned int _varId = 0; - for ( TOKEN *tok = _tokens; tok; tok = tok->next ) + for ( TOKEN *tok = _tokens; tok; tok = tok->next() ) { if ( ! TOKEN::Match(tok, "[;{}(] %type% %var%") ) continue; // Determine name of declared variable.. const char *varname = 0; - TOKEN *tok2 = tok->next; + TOKEN *tok2 = tok->next(); while ( ! TOKEN::Match( tok2, "[;[=(]" ) ) { if ( tok2->isName() ) varname = tok2->strAt(0); else if ( tok2->str() != "*" ) break; - tok2 = tok2->next; + tok2 = tok2->next(); } // Variable declaration found => Set variable ids @@ -651,7 +651,7 @@ void Tokenizer::setVarId() ++_varId; int indentlevel = 0; int parlevel = 0; - for ( tok2 = tok->next; tok2 && indentlevel >= 0; tok2 = tok2->next ) + for ( tok2 = tok->next(); tok2 && indentlevel >= 0; tok2 = tok2->next() ) { if ( tok2->str() == varname ) tok2->varId( _varId ); @@ -679,23 +679,23 @@ void Tokenizer::simplifyTokenList() { // Remove the keyword 'unsigned' - for ( TOKEN *tok = _tokens; tok; tok = tok->next ) + for ( TOKEN *tok = _tokens; tok; tok = tok->next() ) { - if (tok->next && (tok->next->str() == "unsigned")) + if (tok->next() && (tok->next()->str() == "unsigned")) { tok->deleteNext(); } } // Replace constants.. - for (TOKEN *tok = _tokens; tok; tok = tok->next) + for (TOKEN *tok = _tokens; tok; tok = tok->next()) { if (TOKEN::Match(tok,"const %type% %var% = %num% ;")) { const char *sym = tok->strAt(2); const char *num = tok->strAt(4); - for (TOKEN *tok2 = _gettok(tok,6); tok2; tok2 = tok2->next) + for (TOKEN *tok2 = _gettok(tok,6); tok2; tok2 = tok2->next()) { if (tok2->str() == sym) { @@ -714,7 +714,7 @@ void Tokenizer::simplifyTokenList() _typeSize["long"] = sizeof(long); _typeSize["float"] = sizeof(float); _typeSize["double"] = sizeof(double); - for (TOKEN *tok = _tokens; tok; tok = tok->next) + for (TOKEN *tok = _tokens; tok; tok = tok->next()) { if (TOKEN::Match(tok,"class %var%")) { @@ -729,7 +729,7 @@ void Tokenizer::simplifyTokenList() // Replace 'sizeof(type)'.. - for (TOKEN *tok = _tokens; tok; tok = tok->next) + for (TOKEN *tok = _tokens; tok; tok = tok->next()) { if (tok->str() != "sizeof") continue; @@ -772,7 +772,7 @@ void Tokenizer::simplifyTokenList() } // Replace 'sizeof(var)' - for (TOKEN *tok = _tokens; tok; tok = tok->next) + for (TOKEN *tok = _tokens; tok; tok = tok->next()) { // type array [ num ] ; if ( ! TOKEN::Match(tok, "%type% %var% [ %num% ] ;") ) @@ -787,7 +787,7 @@ void Tokenizer::simplifyTokenList() // Replace 'sizeof(var)' with number int indentlevel = 0; - for ( TOKEN *tok2 = _gettok(tok,5); tok2; tok2 = tok2->next ) + for ( TOKEN *tok2 = _gettok(tok,5); tok2; tok2 = tok2->next() ) { if (tok2->str() == "{") { @@ -825,9 +825,9 @@ void Tokenizer::simplifyTokenList() // Simple calculations.. for ( bool done = false; !done; done = true ) { - for (TOKEN *tok = _tokens; tok; tok = tok->next) + for (TOKEN *tok = _tokens; tok; tok = tok->next()) { - if (TOKEN::Match(tok->next, "* 1") || TOKEN::Match(tok->next, "1 *")) + if (TOKEN::Match(tok->next(), "* 1") || TOKEN::Match(tok->next(), "1 *")) { for (int i = 0; i < 2; i++) tok->deleteNext(); @@ -851,7 +851,7 @@ void Tokenizer::simplifyTokenList() case '*': i1 *= i2; break; case '/': i1 /= i2; break; } - tok = tok->next; + tok = tok->next(); std::ostringstream str; str << i1; tok->setstr(str.str().c_str()); @@ -867,12 +867,12 @@ void Tokenizer::simplifyTokenList() // Replace "*(str + num)" => "str[num]" - for (TOKEN *tok = _tokens; tok; tok = tok->next) + for (TOKEN *tok = _tokens; tok; tok = tok->next()) { if ( ! strchr(";{}(=<>", tok->aaaa0()) ) continue; - TOKEN *next = tok->next; + TOKEN *next = tok->next(); if ( ! next ) break; @@ -884,7 +884,7 @@ void Tokenizer::simplifyTokenList() for (int i = 0; i < 4; i++) { - tok = tok->next; + tok = tok->next(); tok->setstr(str[i]); } @@ -896,12 +896,12 @@ void Tokenizer::simplifyTokenList() // Split up variable declarations if possible.. - for (TOKEN *tok = _tokens; tok; tok = tok->next) + for (TOKEN *tok = _tokens; tok; tok = tok->next()) { if ( ! TOKEN::Match(tok, "[{};]") ) continue; - TOKEN *type0 = tok->next; + TOKEN *type0 = tok->next(); if (!TOKEN::Match(type0, "%type%")) continue; if (TOKEN::Match(type0, "else") || TOKEN::Match(type0, "return")) @@ -912,7 +912,7 @@ void Tokenizer::simplifyTokenList() if ( TOKEN::Match(type0, "%type% %var% ,|=") ) { - if ( type0->next->str() != "operator" ) + if ( type0->next()->str() != "operator" ) { tok2 = _gettok(type0, 2); // The ',' or '=' token typelen = 1; @@ -921,7 +921,7 @@ void Tokenizer::simplifyTokenList() else if ( TOKEN::Match(type0, "%type% * %var% ,|=") ) { - if ( type0->next->next->str() != "operator" ) + if ( type0->next()->next()->str() != "operator" ) { tok2 = _gettok(type0, 3); // The ',' token typelen = 1; @@ -985,7 +985,7 @@ void Tokenizer::simplifyTokenList() // "type var =" => "type var; var =" TOKEN *VarTok = _gettok(type0,typelen); if (VarTok->aaaa0()=='*') - VarTok = VarTok->next; + VarTok = VarTok->next(); InsertTokens(eq, VarTok, 2); eq->setstr(";"); @@ -998,25 +998,25 @@ void Tokenizer::simplifyTokenList() break; } - tok2 = tok2->next; + tok2 = tok2->next(); } } } } // Replace NULL with 0.. - for ( TOKEN *tok = _tokens; tok; tok = tok->next ) + for ( TOKEN *tok = _tokens; tok; tok = tok->next() ) { if ( TOKEN::Match(tok, "NULL") ) tok->setstr("0"); } // Replace pointer casts of 0.. "(char *)0" => "0" - for ( TOKEN *tok = _tokens; tok; tok = tok->next ) + for ( TOKEN *tok = _tokens; tok; tok = tok->next() ) { - if ( TOKEN::Match(tok->next, "( %type% * ) 0") || TOKEN::Match(tok->next,"( %type% %type% * ) 0") ) + if ( TOKEN::Match(tok->next(), "( %type% * ) 0") || TOKEN::Match(tok->next(),"( %type% %type% * ) 0") ) { - while (!TOKEN::Match(tok->next,"0")) + while (!TOKEN::Match(tok->next(),"0")) tok->deleteNext(); } } @@ -1034,16 +1034,16 @@ bool Tokenizer::simplifyConditions() { bool ret = true; - for ( TOKEN *tok = _tokens; tok; tok = tok->next ) + for ( TOKEN *tok = _tokens; tok; tok = tok->next() ) { - if (TOKEN::Match(tok, "( true &&") || TOKEN::Match(tok, "&& true &&") || TOKEN::Match(tok->next, "&& true )")) + if (TOKEN::Match(tok, "( true &&") || TOKEN::Match(tok, "&& true &&") || TOKEN::Match(tok->next(), "&& true )")) { tok->deleteNext(); tok->deleteNext(); ret = false; } - else if (TOKEN::Match(tok, "( false ||") || TOKEN::Match(tok, "|| false ||") || TOKEN::Match(tok->next, "|| false )")) + else if (TOKEN::Match(tok, "( false ||") || TOKEN::Match(tok, "|| false ||") || TOKEN::Match(tok->next(), "|| false )")) { tok->deleteNext(); tok->deleteNext(); @@ -1053,10 +1053,10 @@ bool Tokenizer::simplifyConditions() // Change numeric constant in condition to "true" or "false" const TOKEN *tok2 = tok->tokAt(2); if ((TOKEN::Match(tok, "(") || TOKEN::Match(tok, "&&") || TOKEN::Match(tok, "||")) && - TOKEN::Match(tok->next, "%num%") && + TOKEN::Match(tok->next(), "%num%") && (TOKEN::Match(tok2, ")") || TOKEN::Match(tok2, "&&") || TOKEN::Match(tok2, "||")) ) { - tok->next->setstr((tok->next->str() != "0") ? "true" : "false"); + tok->next()->setstr((tok->next()->str() != "0") ? "true" : "false"); ret = false; } @@ -1087,7 +1087,7 @@ bool Tokenizer::simplifyConditions() if ( ! cmp.empty() ) { - tok = tok->next; + tok = tok->next(); tok->deleteNext(); tok->deleteNext(); @@ -1130,7 +1130,7 @@ void Tokenizer::fillFunctionList() bool classfunc = false; int indentlevel = 0; - for ( const TOKEN *tok = _tokens; tok; tok = tok->next ) + for ( const TOKEN *tok = _tokens; tok; tok = tok->next() ) { if ( tok->str() == "{" ) ++indentlevel; @@ -1155,7 +1155,7 @@ void Tokenizer::fillFunctionList() else if (TOKEN::Match(tok, "%var% (")) { // Check if this is the first token of a function implementation.. - for ( const TOKEN *tok2 = tok; tok2; tok2 = tok2->next ) + for ( const TOKEN *tok2 = tok; tok2; tok2 = tok2->next() ) { if ( tok2->str() == ";" ) { @@ -1178,8 +1178,8 @@ void Tokenizer::fillFunctionList() else { tok = tok2; - while (tok->next && !strchr(";{", tok->next->aaaa0())) - tok = tok->next; + while (tok->next() && !strchr(";{", tok->next()->aaaa0())) + tok = tok->next(); } break; } @@ -1241,7 +1241,7 @@ void Tokenizer::deleteTokens(TOKEN *tok) { while (tok) { - TOKEN *next = tok->next; + TOKEN *next = tok->next(); delete tok; tok = next; } @@ -1252,7 +1252,7 @@ void Tokenizer::deleteTokens(TOKEN *tok) const char *Tokenizer::getParameterName( const TOKEN *ftok, int par ) { int _par = 1; - for ( ; ftok; ftok = ftok->next) + for ( ; ftok; ftok = ftok->next()) { if ( TOKEN::Match(ftok, ",") ) ++_par;