In the checks, use const pointers
This commit is contained in:
parent
13f681879f
commit
ab7cb379af
|
@ -50,12 +50,12 @@ TOKEN *findfunction(TOKEN *tok)
|
||||||
|
|
||||||
extern bool ShowAll;
|
extern bool ShowAll;
|
||||||
|
|
||||||
static void _DynamicDataCheck(TOKEN *ftok, TOKEN *tok)
|
static void _DynamicDataCheck(const TOKEN *ftok, const TOKEN *tok)
|
||||||
{
|
{
|
||||||
const char *var2 = tok->str;
|
const char *var2 = tok->str;
|
||||||
bool decl = false;
|
bool decl = false;
|
||||||
unsigned int Var2Count = 0;
|
unsigned int Var2Count = 0;
|
||||||
for ( TOKEN *tok2 = ftok; tok2; tok2 = tok2->next )
|
for ( const TOKEN *tok2 = ftok; tok2; tok2 = tok2->next )
|
||||||
{
|
{
|
||||||
if (tok2 == tok)
|
if (tok2 == tok)
|
||||||
break;
|
break;
|
||||||
|
@ -109,10 +109,10 @@ static void _DynamicDataCheck(TOKEN *ftok, TOKEN *tok)
|
||||||
|
|
||||||
static void _DynamicData()
|
static void _DynamicData()
|
||||||
{
|
{
|
||||||
for (TOKEN *ftok = findfunction(tokens); ftok; ftok = findfunction(ftok->next))
|
for (const TOKEN *ftok = findfunction(tokens); ftok; ftok = findfunction(ftok->next))
|
||||||
{
|
{
|
||||||
int indentlevel = 0;
|
int indentlevel = 0;
|
||||||
for (TOKEN *tok = ftok; tok; tok = tok->next)
|
for (const TOKEN *tok = ftok; tok; tok = tok->next)
|
||||||
{
|
{
|
||||||
if (tok->str[0] == '{')
|
if (tok->str[0] == '{')
|
||||||
indentlevel++;
|
indentlevel++;
|
||||||
|
@ -132,7 +132,7 @@ static void _DynamicData()
|
||||||
|
|
||||||
if (match(tok,"sprintf ( var"))
|
if (match(tok,"sprintf ( var"))
|
||||||
{
|
{
|
||||||
for ( TOKEN *tok2 = gettok(tok,3); tok2; tok2 = tok2->next )
|
for ( const TOKEN *tok2 = gettok(tok,3); tok2; tok2 = tok2->next )
|
||||||
{
|
{
|
||||||
if (tok2->str[0] == ')')
|
if (tok2->str[0] == ')')
|
||||||
break;
|
break;
|
||||||
|
@ -161,7 +161,7 @@ static void CheckBufferOverrun_LocalVariable()
|
||||||
_DynamicData();
|
_DynamicData();
|
||||||
|
|
||||||
int indentlevel = 0;
|
int indentlevel = 0;
|
||||||
for (TOKEN *tok = tokens; tok; tok = tok->next)
|
for (const TOKEN *tok = tokens; tok; tok = tok->next)
|
||||||
{
|
{
|
||||||
if (tok->str[0]=='{')
|
if (tok->str[0]=='{')
|
||||||
indentlevel++;
|
indentlevel++;
|
||||||
|
@ -180,7 +180,7 @@ static void CheckBufferOverrun_LocalVariable()
|
||||||
if (total_size == 0)
|
if (total_size == 0)
|
||||||
continue;
|
continue;
|
||||||
int _indentlevel = indentlevel;
|
int _indentlevel = indentlevel;
|
||||||
for (TOKEN *tok2 = gettok(tok,5); tok2; tok2 = tok2->next)
|
for (const TOKEN *tok2 = gettok(tok,5); tok2; tok2 = tok2->next)
|
||||||
{
|
{
|
||||||
if (tok2->str[0]=='{')
|
if (tok2->str[0]=='{')
|
||||||
{
|
{
|
||||||
|
@ -265,7 +265,7 @@ static void CheckBufferOverrun_LocalVariable()
|
||||||
}
|
}
|
||||||
if (strindex && value>(int)size)
|
if (strindex && value>(int)size)
|
||||||
{
|
{
|
||||||
TOKEN *tok3 = tok2;
|
const TOKEN *tok3 = tok2;
|
||||||
while (tok3 && strcmp(tok3->str,")"))
|
while (tok3 && strcmp(tok3->str,")"))
|
||||||
tok3 = tok3->next;
|
tok3 = tok3->next;
|
||||||
if (!tok3)
|
if (!tok3)
|
||||||
|
@ -323,13 +323,13 @@ static void CheckBufferOverrun_LocalVariable()
|
||||||
}
|
}
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
static void CheckBufferOverrun_StructVariable_CheckVar( TOKEN *tok1, const char varname[], const char dot[], const char arrname[], const int arrsize )
|
static void CheckBufferOverrun_StructVariable_CheckVar( const TOKEN *tok1, const char varname[], const char dot[], const char arrname[], const int arrsize )
|
||||||
{
|
{
|
||||||
const char *badpattern[] = {"varname",".","arrname","[","","]",NULL};
|
const char *badpattern[] = {"varname",".","arrname","[","","]",NULL};
|
||||||
badpattern[0] = varname;
|
badpattern[0] = varname;
|
||||||
badpattern[1] = dot;
|
badpattern[1] = dot;
|
||||||
badpattern[2] = arrname;
|
badpattern[2] = arrname;
|
||||||
TOKEN *tok2 = findtoken( tok1, badpattern );
|
const TOKEN *tok2 = findtoken( tok1, badpattern );
|
||||||
while (tok2)
|
while (tok2)
|
||||||
{
|
{
|
||||||
if ( IsNumber( getstr(tok2, 4) ) )
|
if ( IsNumber( getstr(tok2, 4) ) )
|
||||||
|
@ -349,7 +349,7 @@ static void CheckBufferOverrun_StructVariable_CheckVar( TOKEN *tok1, const char
|
||||||
static void CheckBufferOverrun_StructVariable()
|
static void CheckBufferOverrun_StructVariable()
|
||||||
{
|
{
|
||||||
const char *declstruct_pattern[] = {"struct","","{",0};
|
const char *declstruct_pattern[] = {"struct","","{",0};
|
||||||
for ( TOKEN * tok = findtoken( tokens, declstruct_pattern );
|
for ( const TOKEN * tok = findtoken( tokens, declstruct_pattern );
|
||||||
tok;
|
tok;
|
||||||
tok = findtoken( tok->next, declstruct_pattern ) )
|
tok = findtoken( tok->next, declstruct_pattern ) )
|
||||||
{
|
{
|
||||||
|
@ -372,7 +372,7 @@ static void CheckBufferOverrun_StructVariable()
|
||||||
const char *arrname = getstr(tok2, 2);
|
const char *arrname = getstr(tok2, 2);
|
||||||
const char *arrsize = getstr(tok2, 4);
|
const char *arrsize = getstr(tok2, 4);
|
||||||
|
|
||||||
for ( TOKEN *tok3 = tokens; tok3; tok3 = tok3->next )
|
for ( const TOKEN *tok3 = tokens; tok3; tok3 = tok3->next )
|
||||||
{
|
{
|
||||||
if ( strcmp(tok3->str, structname) )
|
if ( strcmp(tok3->str, structname) )
|
||||||
continue;
|
continue;
|
||||||
|
@ -418,7 +418,7 @@ void CheckBufferOverrun()
|
||||||
|
|
||||||
void WarningDangerousFunctions()
|
void WarningDangerousFunctions()
|
||||||
{
|
{
|
||||||
for (TOKEN *tok = tokens; tok; tok = tok->next)
|
for (const TOKEN *tok = tokens; tok; tok = tok->next)
|
||||||
{
|
{
|
||||||
if (match(tok, "gets ("))
|
if (match(tok, "gets ("))
|
||||||
{
|
{
|
||||||
|
|
|
@ -28,12 +28,12 @@ static struct VAR *ClassChecking_GetVarList(const char classname[])
|
||||||
// Locate class..
|
// Locate class..
|
||||||
const char *pattern[] = {"class","","{",0};
|
const char *pattern[] = {"class","","{",0};
|
||||||
pattern[1] = classname;
|
pattern[1] = classname;
|
||||||
TOKEN *tok1 = findtoken(tokens, pattern);
|
const TOKEN *tok1 = findtoken(tokens, pattern);
|
||||||
|
|
||||||
// Get variable list..
|
// Get variable list..
|
||||||
struct VAR *varlist = NULL;
|
struct VAR *varlist = NULL;
|
||||||
unsigned int indentlevel = 0;
|
unsigned int indentlevel = 0;
|
||||||
for (TOKEN *tok = tok1; tok; tok = tok->next)
|
for (const TOKEN *tok = tok1; tok; tok = tok->next)
|
||||||
{
|
{
|
||||||
if (!tok->next)
|
if (!tok->next)
|
||||||
break;
|
break;
|
||||||
|
@ -50,7 +50,7 @@ static struct VAR *ClassChecking_GetVarList(const char classname[])
|
||||||
|
|
||||||
if (indentlevel==1 && (strchr(";{}", tok->str[0]) || (tok->str[0]!=':' && strchr(tok->str, ':'))))
|
if (indentlevel==1 && (strchr(";{}", tok->str[0]) || (tok->str[0]!=':' && strchr(tok->str, ':'))))
|
||||||
{
|
{
|
||||||
TOKEN *next = tok->next;
|
const TOKEN *next = tok->next;
|
||||||
|
|
||||||
const char *varname = 0;
|
const char *varname = 0;
|
||||||
|
|
||||||
|
@ -90,7 +90,7 @@ static struct VAR *ClassChecking_GetVarList(const char classname[])
|
||||||
}
|
}
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
static TOKEN * FindClassFunction( TOKEN *_tokens, const char classname[], const char funcname[], unsigned int &indentlevel )
|
static const TOKEN * FindClassFunction( const TOKEN *_tokens, const char classname[], const char funcname[], unsigned int &indentlevel )
|
||||||
{
|
{
|
||||||
while ( _tokens )
|
while ( _tokens )
|
||||||
{
|
{
|
||||||
|
@ -105,7 +105,7 @@ static TOKEN * FindClassFunction( TOKEN *_tokens, const char classname[], const
|
||||||
// Member function is implemented in the class declaration..
|
// Member function is implemented in the class declaration..
|
||||||
if ( match( _tokens, "var (" ) && strcmp(_tokens->str,funcname) == 0 )
|
if ( match( _tokens, "var (" ) && strcmp(_tokens->str,funcname) == 0 )
|
||||||
{
|
{
|
||||||
TOKEN *tok2 = _tokens;
|
const TOKEN *tok2 = _tokens;
|
||||||
while ( tok2 && tok2->str[0] != '{' && tok2->str[0] != ';' )
|
while ( tok2 && tok2->str[0] != '{' && tok2->str[0] != ';' )
|
||||||
tok2 = tok2->next;
|
tok2 = tok2->next;
|
||||||
if ( tok2 && tok2->str[0] == '{' )
|
if ( tok2 && tok2->str[0] == '{' )
|
||||||
|
@ -135,7 +135,7 @@ static TOKEN * FindClassFunction( TOKEN *_tokens, const char classname[], const
|
||||||
}
|
}
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
static void ClassChecking_VarList_Initialize(TOKEN *ftok, struct VAR *varlist, const char classname[])
|
static void ClassChecking_VarList_Initialize(const TOKEN *ftok, struct VAR *varlist, const char classname[])
|
||||||
{
|
{
|
||||||
bool BeginLine = false;
|
bool BeginLine = false;
|
||||||
bool Assign = false;
|
bool Assign = false;
|
||||||
|
@ -192,7 +192,7 @@ static void ClassChecking_VarList_Initialize(TOKEN *ftok, struct VAR *varlist, c
|
||||||
if (ftok->next->str[0] == '(')
|
if (ftok->next->str[0] == '(')
|
||||||
{
|
{
|
||||||
unsigned int i = 0;
|
unsigned int i = 0;
|
||||||
TOKEN *ftok2 = FindClassFunction( tokens, classname, ftok->str, i );
|
const TOKEN *ftok2 = FindClassFunction( tokens, classname, ftok->str, i );
|
||||||
ClassChecking_VarList_Initialize(ftok2, varlist, classname);
|
ClassChecking_VarList_Initialize(ftok2, varlist, classname);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -246,7 +246,7 @@ void CheckConstructors()
|
||||||
{
|
{
|
||||||
// Locate class
|
// Locate class
|
||||||
const char *pattern_classname[] = {"class","","{",NULL};
|
const char *pattern_classname[] = {"class","","{",NULL};
|
||||||
TOKEN *tok1 = findtoken(tokens, pattern_classname);
|
const TOKEN *tok1 = findtoken(tokens, pattern_classname);
|
||||||
while (tok1)
|
while (tok1)
|
||||||
{
|
{
|
||||||
const char *classname = tok1->next->str;
|
const char *classname = tok1->next->str;
|
||||||
|
@ -259,7 +259,7 @@ void CheckConstructors()
|
||||||
// Are there a class constructor?
|
// Are there a class constructor?
|
||||||
const char *constructor_pattern[] = {"","clKalle","(",NULL};
|
const char *constructor_pattern[] = {"","clKalle","(",NULL};
|
||||||
constructor_pattern[1] = classname;
|
constructor_pattern[1] = classname;
|
||||||
TOKEN *constructor_token = findtoken( tokens, constructor_pattern );
|
const TOKEN *constructor_token = findtoken( tokens, constructor_pattern );
|
||||||
while ( constructor_token && constructor_token->str[0] == '~' )
|
while ( constructor_token && constructor_token->str[0] == '~' )
|
||||||
constructor_token = findtoken( constructor_token->next, constructor_pattern );
|
constructor_token = findtoken( constructor_token->next, constructor_pattern );
|
||||||
if ( ! constructor_token )
|
if ( ! constructor_token )
|
||||||
|
@ -345,7 +345,7 @@ void CheckUnusedPrivateFunctions()
|
||||||
{
|
{
|
||||||
// Locate some class
|
// Locate some class
|
||||||
const char *pattern_class[] = {"class","","{",NULL};
|
const char *pattern_class[] = {"class","","{",NULL};
|
||||||
for (TOKEN *tok1 = findtoken(tokens, pattern_class); tok1; tok1 = findtoken(tok1->next, pattern_class))
|
for (const TOKEN *tok1 = findtoken(tokens, pattern_class); tok1; tok1 = findtoken(tok1->next, pattern_class))
|
||||||
{
|
{
|
||||||
const char *classname = tok1->next->str;
|
const char *classname = tok1->next->str;
|
||||||
|
|
||||||
|
@ -361,7 +361,7 @@ void CheckUnusedPrivateFunctions()
|
||||||
FuncList.clear();
|
FuncList.clear();
|
||||||
bool priv = false;
|
bool priv = false;
|
||||||
unsigned int indent_level = 0;
|
unsigned int indent_level = 0;
|
||||||
for (TOKEN *tok = tok1; tok; tok = tok->next)
|
for (const TOKEN *tok = tok1; tok; tok = tok->next)
|
||||||
{
|
{
|
||||||
if (match(tok,"friend class"))
|
if (match(tok,"friend class"))
|
||||||
{
|
{
|
||||||
|
@ -401,7 +401,7 @@ void CheckUnusedPrivateFunctions()
|
||||||
const char *pattern_function[] = {"","::",NULL};
|
const char *pattern_function[] = {"","::",NULL};
|
||||||
pattern_function[0] = classname;
|
pattern_function[0] = classname;
|
||||||
bool HasFuncImpl = false;
|
bool HasFuncImpl = false;
|
||||||
for (TOKEN *ftok = findtoken(tokens, pattern_function); ftok; ftok = findtoken(ftok->next,pattern_function))
|
for (const TOKEN *ftok = findtoken(tokens, pattern_function); ftok; ftok = findtoken(ftok->next,pattern_function))
|
||||||
{
|
{
|
||||||
int numpar = 0;
|
int numpar = 0;
|
||||||
while (ftok && ftok->str[0]!=';' && ftok->str[0]!='{')
|
while (ftok && ftok->str[0]!=';' && ftok->str[0]!='{')
|
||||||
|
@ -474,7 +474,7 @@ void CheckUnusedPrivateFunctions()
|
||||||
void CheckMemset()
|
void CheckMemset()
|
||||||
{
|
{
|
||||||
// Locate all 'memset' tokens..
|
// Locate all 'memset' tokens..
|
||||||
for (TOKEN *tok = tokens; tok; tok = tok->next)
|
for (const TOKEN *tok = tokens; tok; tok = tok->next)
|
||||||
{
|
{
|
||||||
if (strcmp(tok->str,"memset")!=0)
|
if (strcmp(tok->str,"memset")!=0)
|
||||||
continue;
|
continue;
|
||||||
|
@ -507,7 +507,7 @@ void CheckMemset()
|
||||||
// Warn if type is a struct that contains any std::*
|
// Warn if type is a struct that contains any std::*
|
||||||
const char *pattern2[] = {"struct","","{",NULL};
|
const char *pattern2[] = {"struct","","{",NULL};
|
||||||
pattern2[1] = type;
|
pattern2[1] = type;
|
||||||
for (TOKEN *tstruct = findtoken(tokens, pattern2); tstruct; tstruct = tstruct->next)
|
for (const TOKEN *tstruct = findtoken(tokens, pattern2); tstruct; tstruct = tstruct->next)
|
||||||
{
|
{
|
||||||
if (tstruct->str[0] == '}')
|
if (tstruct->str[0] == '}')
|
||||||
break;
|
break;
|
||||||
|
@ -533,7 +533,7 @@ void CheckMemset()
|
||||||
void CheckOperatorEq1()
|
void CheckOperatorEq1()
|
||||||
{
|
{
|
||||||
const char *pattern[] = {"void", "operator", "=", "(", NULL};
|
const char *pattern[] = {"void", "operator", "=", "(", NULL};
|
||||||
if (TOKEN *tok = findtoken(tokens,pattern))
|
if (const TOKEN *tok = findtoken(tokens,pattern))
|
||||||
{
|
{
|
||||||
std::ostringstream ostr;
|
std::ostringstream ostr;
|
||||||
ostr << FileLine(tok) << ": 'operator=' should return something";
|
ostr << FileLine(tok) << ": 'operator=' should return something";
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
|
|
||||||
void WarningOldStylePointerCast()
|
void WarningOldStylePointerCast()
|
||||||
{
|
{
|
||||||
for (TOKEN *tok = tokens; tok; tok = tok->next)
|
for (const TOKEN *tok = tokens; tok; tok = tok->next)
|
||||||
{
|
{
|
||||||
// Old style pointer casting..
|
// Old style pointer casting..
|
||||||
if (!match(tok, "( type * ) var"))
|
if (!match(tok, "( type * ) var"))
|
||||||
|
@ -43,7 +43,7 @@ void WarningOldStylePointerCast()
|
||||||
|
|
||||||
void WarningIsDigit()
|
void WarningIsDigit()
|
||||||
{
|
{
|
||||||
for (TOKEN *tok = tokens; tok; tok = tok->next)
|
for (const TOKEN *tok = tokens; tok; tok = tok->next)
|
||||||
{
|
{
|
||||||
bool err = false;
|
bool err = false;
|
||||||
err |= match(tok, "var >= '0' && var <= '9'");
|
err |= match(tok, "var >= '0' && var <= '9'");
|
||||||
|
@ -68,7 +68,7 @@ void WarningIsDigit()
|
||||||
|
|
||||||
void WarningIsAlpha()
|
void WarningIsAlpha()
|
||||||
{
|
{
|
||||||
for (TOKEN *tok = tokens; tok; tok = tok->next)
|
for (const TOKEN *tok = tokens; tok; tok = tok->next)
|
||||||
{
|
{
|
||||||
bool err = false;
|
bool err = false;
|
||||||
|
|
||||||
|
@ -102,13 +102,13 @@ void WarningRedundantCode()
|
||||||
{
|
{
|
||||||
|
|
||||||
// if (p) delete p
|
// if (p) delete p
|
||||||
for (TOKEN *tok = tokens; tok; tok = tok->next)
|
for (const TOKEN *tok = tokens; tok; tok = tok->next)
|
||||||
{
|
{
|
||||||
if (strcmp(tok->str,"if"))
|
if (strcmp(tok->str,"if"))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
const char *varname1 = NULL;
|
const char *varname1 = NULL;
|
||||||
TOKEN *tok2 = NULL;
|
const TOKEN *tok2 = NULL;
|
||||||
|
|
||||||
if (match(tok,"if ( var )"))
|
if (match(tok,"if ( var )"))
|
||||||
{
|
{
|
||||||
|
@ -165,12 +165,12 @@ void WarningIf()
|
||||||
{
|
{
|
||||||
|
|
||||||
// Search for 'if (condition);'
|
// Search for 'if (condition);'
|
||||||
for (TOKEN *tok = tokens; tok; tok = tok->next)
|
for (const TOKEN *tok = tokens; tok; tok = tok->next)
|
||||||
{
|
{
|
||||||
if (strcmp(tok->str,"if")==0)
|
if (strcmp(tok->str,"if")==0)
|
||||||
{
|
{
|
||||||
int parlevel = 0;
|
int parlevel = 0;
|
||||||
for (TOKEN *tok2 = tok->next; tok2; tok2 = tok2->next)
|
for (const TOKEN *tok2 = tok->next; tok2; tok2 = tok2->next)
|
||||||
{
|
{
|
||||||
if (tok2->str[0]=='(')
|
if (tok2->str[0]=='(')
|
||||||
parlevel++;
|
parlevel++;
|
||||||
|
@ -194,7 +194,7 @@ void WarningIf()
|
||||||
}
|
}
|
||||||
|
|
||||||
// Search for 'a=b; if (a==b)'
|
// Search for 'a=b; if (a==b)'
|
||||||
for (TOKEN *tok = tokens; tok; tok = tok->next)
|
for (const TOKEN *tok = tokens; tok; tok = tok->next)
|
||||||
{
|
{
|
||||||
// Begin statement?
|
// Begin statement?
|
||||||
if ( ! strchr(";{}", tok->str[0]) )
|
if ( ! strchr(";{}", tok->str[0]) )
|
||||||
|
@ -254,7 +254,7 @@ void WarningIf()
|
||||||
|
|
||||||
void InvalidFunctionUsage()
|
void InvalidFunctionUsage()
|
||||||
{
|
{
|
||||||
for ( TOKEN *tok = tokens; tok; tok = tok->next )
|
for ( const TOKEN *tok = tokens; tok; tok = tok->next )
|
||||||
{
|
{
|
||||||
if ( strcmp(tok->str, "strtol") && strcmp(tok->str, "strtoul") )
|
if ( strcmp(tok->str, "strtol") && strcmp(tok->str, "strtoul") )
|
||||||
continue;
|
continue;
|
||||||
|
@ -262,7 +262,7 @@ void InvalidFunctionUsage()
|
||||||
// Locate the third parameter of the function call..
|
// Locate the third parameter of the function call..
|
||||||
int parlevel = 0;
|
int parlevel = 0;
|
||||||
int param = 1;
|
int param = 1;
|
||||||
for ( TOKEN *tok2 = tok->next; tok2; tok2 = tok2->next )
|
for ( const TOKEN *tok2 = tok->next; tok2; tok2 = tok2->next )
|
||||||
{
|
{
|
||||||
if ( tok2->str[0] == '(' )
|
if ( tok2->str[0] == '(' )
|
||||||
parlevel++;
|
parlevel++;
|
||||||
|
@ -298,12 +298,12 @@ void InvalidFunctionUsage()
|
||||||
// Dangerous usage of 'strtok'
|
// Dangerous usage of 'strtok'
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
static TOKEN *GetFunction( TOKEN *content )
|
static const TOKEN *GetFunction( const TOKEN *content )
|
||||||
{
|
{
|
||||||
TOKEN *func = NULL;
|
const TOKEN *func = NULL;
|
||||||
|
|
||||||
int indentlevel = 0;
|
int indentlevel = 0;
|
||||||
for (TOKEN *tok = tokens; tok; tok = tok->next)
|
for (const TOKEN *tok = tokens; tok; tok = tok->next)
|
||||||
{
|
{
|
||||||
if ( tok->str[0] == '{' )
|
if ( tok->str[0] == '{' )
|
||||||
indentlevel++;
|
indentlevel++;
|
||||||
|
@ -338,15 +338,15 @@ static TOKEN *GetFunction( TOKEN *content )
|
||||||
|
|
||||||
void WarningStrTok()
|
void WarningStrTok()
|
||||||
{
|
{
|
||||||
std::list<TOKEN *> funclist;
|
std::list<const TOKEN *> funclist;
|
||||||
|
|
||||||
// Which functions contain the 'strtok'?
|
// Which functions contain the 'strtok'?
|
||||||
for (TOKEN *tok = tokens; tok; tok = tok->next)
|
for (const TOKEN *tok = tokens; tok; tok = tok->next)
|
||||||
{
|
{
|
||||||
if (strcmp(tok->str,"strtok")!=0)
|
if (strcmp(tok->str,"strtok")!=0)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
TOKEN *func = GetFunction(tok);
|
const TOKEN *func = GetFunction(tok);
|
||||||
if (!func)
|
if (!func)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
@ -358,13 +358,13 @@ void WarningStrTok()
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// Take closer look at the strtok usage.
|
// Take closer look at the strtok usage.
|
||||||
std::list<TOKEN *>::const_iterator it1;
|
std::list<const TOKEN *>::const_iterator it1;
|
||||||
for (it1 = funclist.begin(); it1 != funclist.end(); it1++)
|
for (it1 = funclist.begin(); it1 != funclist.end(); it1++)
|
||||||
{
|
{
|
||||||
// Search this function to check that it doesn't call any other of
|
// Search this function to check that it doesn't call any other of
|
||||||
// the functions in the funclist.
|
// the functions in the funclist.
|
||||||
int indentlevel = 0;
|
int indentlevel = 0;
|
||||||
for ( TOKEN *tok = *it1; tok; tok = tok->next )
|
for ( const TOKEN *tok = *it1; tok; tok = tok->next )
|
||||||
{
|
{
|
||||||
if ( tok->str[0] == '{' )
|
if ( tok->str[0] == '{' )
|
||||||
indentlevel++;
|
indentlevel++;
|
||||||
|
@ -383,7 +383,7 @@ void WarningStrTok()
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
// Check if function name is in funclist..
|
// Check if function name is in funclist..
|
||||||
std::list<TOKEN *>::const_iterator it2;
|
std::list<const TOKEN *>::const_iterator it2;
|
||||||
for (it2 = funclist.begin(); it2 != funclist.end(); it2++)
|
for (it2 = funclist.begin(); it2 != funclist.end(); it2++)
|
||||||
{
|
{
|
||||||
if ( strcmp( tok->str, (*it2)->str ) )
|
if ( strcmp( tok->str, (*it2)->str ) )
|
||||||
|
@ -407,7 +407,7 @@ void WarningStrTok()
|
||||||
|
|
||||||
void CheckIfAssignment()
|
void CheckIfAssignment()
|
||||||
{
|
{
|
||||||
for (TOKEN *tok = tokens; tok; tok = tok->next)
|
for (const TOKEN *tok = tokens; tok; tok = tok->next)
|
||||||
{
|
{
|
||||||
if (match(tok,"if ( a = b )"))
|
if (match(tok,"if ( a = b )"))
|
||||||
{
|
{
|
||||||
|
@ -427,14 +427,14 @@ void CheckIfAssignment()
|
||||||
|
|
||||||
void CheckCaseWithoutBreak()
|
void CheckCaseWithoutBreak()
|
||||||
{
|
{
|
||||||
for ( TOKEN *tok = tokens; tok; tok = tok->next )
|
for ( const TOKEN *tok = tokens; tok; tok = tok->next )
|
||||||
{
|
{
|
||||||
if ( strcmp(tok->str,"case")!=0 )
|
if ( strcmp(tok->str,"case")!=0 )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
// Found a case, check that there's a break..
|
// Found a case, check that there's a break..
|
||||||
int indentlevel = 0;
|
int indentlevel = 0;
|
||||||
for (TOKEN *tok2 = tok->next; tok2; tok2 = tok2->next)
|
for (const TOKEN *tok2 = tok->next; tok2; tok2 = tok2->next)
|
||||||
{
|
{
|
||||||
if (tok2->str[0] == '{')
|
if (tok2->str[0] == '{')
|
||||||
indentlevel++;
|
indentlevel++;
|
||||||
|
@ -548,12 +548,12 @@ void CheckVariableScope()
|
||||||
// Walk through all tokens..
|
// Walk through all tokens..
|
||||||
bool func = false;
|
bool func = false;
|
||||||
int indentlevel = 0;
|
int indentlevel = 0;
|
||||||
for ( TOKEN *tok = tokens; tok; tok = tok->next )
|
for ( const TOKEN *tok = tokens; tok; tok = tok->next )
|
||||||
{
|
{
|
||||||
// Skip class and struct declarations..
|
// Skip class and struct declarations..
|
||||||
if ( strcmp(tok->str, "class") == 0 || strcmp(tok->str, "struct") == 0 )
|
if ( strcmp(tok->str, "class") == 0 || strcmp(tok->str, "struct") == 0 )
|
||||||
{
|
{
|
||||||
for (TOKEN *tok2 = tok; tok2; tok2 = tok2->next)
|
for (const TOKEN *tok2 = tok; tok2; tok2 = tok2->next)
|
||||||
{
|
{
|
||||||
if ( tok2->str[0] == '{' )
|
if ( tok2->str[0] == '{' )
|
||||||
{
|
{
|
||||||
|
@ -603,7 +603,7 @@ void CheckVariableScope()
|
||||||
if ( indentlevel > 0 && func && strchr("{};", tok->str[0]) )
|
if ( indentlevel > 0 && func && strchr("{};", tok->str[0]) )
|
||||||
{
|
{
|
||||||
// First token of statement..
|
// First token of statement..
|
||||||
TOKEN *tok1 = tok->next;
|
const TOKEN *tok1 = tok->next;
|
||||||
|
|
||||||
if (strcmp(tok1->str,"return")==0 ||
|
if (strcmp(tok1->str,"return")==0 ||
|
||||||
strcmp(tok1->str,"delete")==0 ||
|
strcmp(tok1->str,"delete")==0 ||
|
||||||
|
|
46
tokenize.cpp
46
tokenize.cpp
|
@ -28,6 +28,18 @@ static void combine_2tokens(TOKEN *tok, const char str1[], const char str2[]);
|
||||||
|
|
||||||
static void DeleteNextToken(TOKEN *tok);
|
static void DeleteNextToken(TOKEN *tok);
|
||||||
|
|
||||||
|
static TOKEN *_gettok(TOKEN *tok, int index)
|
||||||
|
{
|
||||||
|
while (tok && index>0)
|
||||||
|
{
|
||||||
|
tok = tok->next;
|
||||||
|
index--;
|
||||||
|
}
|
||||||
|
return tok;
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
std::vector<std::string> Files;
|
std::vector<std::string> Files;
|
||||||
|
@ -560,7 +572,7 @@ void SimplifyTokenList()
|
||||||
const char *sym = getstr(tok,2);
|
const char *sym = getstr(tok,2);
|
||||||
const char *num = getstr(tok,4);
|
const char *num = getstr(tok,4);
|
||||||
|
|
||||||
for (TOKEN *tok2 = gettok(tok,6); tok2; tok2 = tok2->next)
|
for (TOKEN *tok2 = _gettok(tok,6); tok2; tok2 = tok2->next)
|
||||||
{
|
{
|
||||||
if (strcmp(tok2->str,sym) == 0)
|
if (strcmp(tok2->str,sym) == 0)
|
||||||
{
|
{
|
||||||
|
@ -750,7 +762,7 @@ void SimplifyTokenList()
|
||||||
|
|
||||||
// Replace 'sizeof(var)' with number
|
// Replace 'sizeof(var)' with number
|
||||||
int indentlevel = 0;
|
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[0] == '{')
|
if (tok2->str[0] == '{')
|
||||||
{
|
{
|
||||||
|
@ -885,56 +897,56 @@ void SimplifyTokenList()
|
||||||
|
|
||||||
if ( match(type0, "type var ,") )
|
if ( match(type0, "type var ,") )
|
||||||
{
|
{
|
||||||
tok2 = gettok(type0, 2); // The ',' token
|
tok2 = _gettok(type0, 2); // The ',' token
|
||||||
typelen = 1;
|
typelen = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
else if ( match(type0, "type * var ,") )
|
else if ( match(type0, "type * var ,") )
|
||||||
{
|
{
|
||||||
tok2 = gettok(type0, 3); // The ',' token
|
tok2 = _gettok(type0, 3); // The ',' token
|
||||||
typelen = 1;
|
typelen = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
else if ( match(type0, "type var [ num ] ,") )
|
else if ( match(type0, "type var [ num ] ,") )
|
||||||
{
|
{
|
||||||
tok2 = gettok(type0, 5); // The ',' token
|
tok2 = _gettok(type0, 5); // The ',' token
|
||||||
typelen = 1;
|
typelen = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
else if ( match(type0, "type * var [ num ] ,") )
|
else if ( match(type0, "type * var [ num ] ,") )
|
||||||
{
|
{
|
||||||
tok2 = gettok(type0, 6); // The ',' token
|
tok2 = _gettok(type0, 6); // The ',' token
|
||||||
typelen = 1;
|
typelen = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
else if ( match(type0, "struct type var ,") )
|
else if ( match(type0, "struct type var ,") )
|
||||||
{
|
{
|
||||||
tok2 = gettok(type0, 3);
|
tok2 = _gettok(type0, 3);
|
||||||
typelen = 2;
|
typelen = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
else if ( match(type0, "struct type * var ,") )
|
else if ( match(type0, "struct type * var ,") )
|
||||||
{
|
{
|
||||||
tok2 = gettok(type0, 4);
|
tok2 = _gettok(type0, 4);
|
||||||
typelen = 2;
|
typelen = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
else if ( match(type0, "type var =") )
|
else if ( match(type0, "type var =") )
|
||||||
{
|
{
|
||||||
tok2 = gettok(type0, 2);
|
tok2 = _gettok(type0, 2);
|
||||||
typelen = 1;
|
typelen = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
else if ( match(type0, "type * var =") )
|
else if ( match(type0, "type * var =") )
|
||||||
{
|
{
|
||||||
tok2 = gettok(type0, 3);
|
tok2 = _gettok(type0, 3);
|
||||||
typelen = 1;
|
typelen = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
else if ( match(type0, "struct type * var =") )
|
else if ( match(type0, "struct type * var =") )
|
||||||
{
|
{
|
||||||
tok2 = gettok(type0, 4);
|
tok2 = _gettok(type0, 4);
|
||||||
typelen = 2;
|
typelen = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -969,7 +981,7 @@ void SimplifyTokenList()
|
||||||
else if ( parlevel==0 && strchr(";,",tok2->str[0]) )
|
else if ( parlevel==0 && strchr(";,",tok2->str[0]) )
|
||||||
{
|
{
|
||||||
// "type var =" => "type var; var ="
|
// "type var =" => "type var; var ="
|
||||||
TOKEN *VarTok = gettok(type0,typelen);
|
TOKEN *VarTok = _gettok(type0,typelen);
|
||||||
if (VarTok->str[0]=='*')
|
if (VarTok->str[0]=='*')
|
||||||
VarTok = VarTok->next;
|
VarTok = VarTok->next;
|
||||||
InsertTokens(eq, VarTok, 2);
|
InsertTokens(eq, VarTok, 2);
|
||||||
|
@ -1008,12 +1020,12 @@ void SimplifyTokenList()
|
||||||
// Helper functions for handling the tokens list
|
// Helper functions for handling the tokens list
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
TOKEN *findtoken(TOKEN *tok1, const char *tokenstr[])
|
const TOKEN *findtoken(const TOKEN *tok1, const char *tokenstr[])
|
||||||
{
|
{
|
||||||
for (TOKEN *ret = tok1; ret; ret = ret->next)
|
for (const TOKEN *ret = tok1; ret; ret = ret->next)
|
||||||
{
|
{
|
||||||
unsigned int i = 0;
|
unsigned int i = 0;
|
||||||
TOKEN *tok = ret;
|
const TOKEN *tok = ret;
|
||||||
while (tokenstr[i])
|
while (tokenstr[i])
|
||||||
{
|
{
|
||||||
if (!tok)
|
if (!tok)
|
||||||
|
@ -1073,7 +1085,7 @@ bool match(const TOKEN *tok, const char pattern[])
|
||||||
}
|
}
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
TOKEN *gettok(TOKEN *tok, int index)
|
const TOKEN *gettok(const TOKEN *tok, int index)
|
||||||
{
|
{
|
||||||
while (tok && index>0)
|
while (tok && index>0)
|
||||||
{
|
{
|
||||||
|
@ -1084,7 +1096,7 @@ TOKEN *gettok(TOKEN *tok, int index)
|
||||||
}
|
}
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
const char *getstr(TOKEN *tok, int index)
|
const char *getstr(const TOKEN *tok, int index)
|
||||||
{
|
{
|
||||||
tok = gettok(tok, index);
|
tok = gettok(tok, index);
|
||||||
return tok ? tok->str : "";
|
return tok ? tok->str : "";
|
||||||
|
|
|
@ -35,10 +35,10 @@ void DeallocateTokens();
|
||||||
|
|
||||||
|
|
||||||
// Helper functions for handling the tokens list..
|
// Helper functions for handling the tokens list..
|
||||||
TOKEN *findtoken(TOKEN *tok1, const char *tokenstr[]);
|
const TOKEN *findtoken(const TOKEN *tok1, const char *tokenstr[]);
|
||||||
bool match(const TOKEN *tok, const char pattern[]);
|
bool match(const TOKEN *tok, const char pattern[]);
|
||||||
TOKEN *gettok(TOKEN *tok, int index);
|
const TOKEN *gettok(const TOKEN *tok, int index);
|
||||||
const char *getstr(TOKEN *tok, int index);
|
const char *getstr(const TOKEN *tok, int index);
|
||||||
|
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue