handle functions that take function ptrs as args

svn path=/trunk/; revision=6679
This commit is contained in:
Royce Mitchell III 2003-11-17 19:27:57 +00:00
parent 5e87359eaa
commit cdf123c30d

View file

@ -513,11 +513,11 @@ char* findend ( char* p, bool& externc )
Type identify ( const vector<string>& tokens, int off ) Type identify ( const vector<string>& tokens, int off )
{ {
/*if ( tokens.size() > off+3 ) if ( tokens.size() > off+2 )
{ {
if ( tokens[off+3] == "HandleToUlong" ) if ( tokens[off+2] == "_lfind" )
_CrtDbgBreak(); _CrtDbgBreak();
}*/ }
/*if ( tokens.size() > off+1 ) /*if ( tokens.size() > off+1 )
{ {
if ( tokens[off+1] == "_OSVERSIONINFOEXA" ) if ( tokens[off+1] == "_OSVERSIONINFOEXA" )
@ -535,15 +535,18 @@ Type identify ( const vector<string>& tokens, int off )
return T_WHILE; return T_WHILE;
else if ( tokens[off] == "do" ) else if ( tokens[off] == "do" )
return T_DO; return T_DO;
int parens = 0; int openparens = 0;
int closeparens = 0;
int brackets = 0; int brackets = 0;
for ( int i = off; i < tokens.size(); i++ ) for ( int i = off; i < tokens.size(); i++ )
{ {
if ( tokens[i] == "(" && !brackets ) if ( tokens[i] == "(" && !brackets )
parens++; openparens++;
else if ( tokens[i] == ")" && !brackets && openparens == 1 )
closeparens++;
else if ( tokens[i] == "{" ) else if ( tokens[i] == "{" )
brackets++; brackets++;
else if ( (tokens[i] == "struct" || tokens[i] == "union") && !parens ) else if ( (tokens[i] == "struct" || tokens[i] == "union") && !openparens )
{ {
for ( int j = i + 1; j < tokens.size(); j++ ) for ( int j = i + 1; j < tokens.size(); j++ )
{ {
@ -556,9 +559,9 @@ Type identify ( const vector<string>& tokens, int off )
else if ( tokens[i] == ";" ) else if ( tokens[i] == ";" )
break; break;
} }
if ( parens > 1 ) if ( openparens > 1 && closeparens )
return T_FUNCTION_PTR; return T_FUNCTION_PTR;
else if ( parens == 1 ) else if ( openparens >= 1 )
return T_FUNCTION; return T_FUNCTION;
return T_VARIABLE; return T_VARIABLE;
} }