In the checks, use const pointers

This commit is contained in:
Daniel Marjamäki 2008-03-22 11:46:06 +00:00
parent 13f681879f
commit ab7cb379af
5 changed files with 87 additions and 75 deletions

View File

@ -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 ("))
{ {

View File

@ -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";

View File

@ -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,13 +548,13 @@ 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] == '{' )
{ {
int _indentlevel = 0; int _indentlevel = 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 ||

View File

@ -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] == '{')
{ {
@ -831,7 +843,7 @@ void SimplifyTokenList()
{ {
DeleteNextToken(tok); DeleteNextToken(tok);
} }
done = false; done = false;
} }
} }
@ -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 : "";

View File

@ -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