bug fixes

svn path=/trunk/; revision=6562
This commit is contained in:
Royce Mitchell III 2003-11-07 19:03:50 +00:00
parent 97c3062b35
commit 784ed4768a

View file

@ -373,8 +373,8 @@ char* skipsemi ( char* p )
char* findend ( char* p, bool& externc ) char* findend ( char* p, bool& externc )
{ {
if ( !strncmp ( p, "static inline struct _TEB * NtCurrentTeb ( void )", 49 ) ) //if ( !strncmp ( p, "typedef enum _SE_OBJECT_TYPE", 28 ) )
_CrtDbgBreak(); // _CrtDbgBreak();
// special-case for 'extern "C"' // special-case for 'extern "C"'
if ( !strncmp ( p, "extern", 6 ) ) if ( !strncmp ( p, "extern", 6 ) )
{ {
@ -396,7 +396,7 @@ char* findend ( char* p, bool& externc )
{ {
char* end = strchr ( p, ')' ); char* end = strchr ( p, ')' );
ASSERT(end); ASSERT(end);
return end; return end+1;
} }
externc = false; externc = false;
bool isStruct = false; bool isStruct = false;
@ -409,18 +409,44 @@ char* findend ( char* p, bool& externc )
char* semi = strchr ( p, '{' ); char* semi = strchr ( p, '{' );
if ( !semi || semi > end ) if ( !semi || semi > end )
return end; return end;
p = skipsemi ( semi ); end = skipsemi ( semi );
char* p2 = skip_ws ( p );
const char* structs[] = { "struct", "enum", "class" };
for ( int i = 0; i < sizeof(structs)/sizeof(structs[0]); i++ )
{
char* pStruct = strstr ( p, structs[i] );
if ( pStruct
&& pStruct < semi
&& !__iscsym(pStruct[-1])
&& !__iscsym(pStruct[strlen(structs[i])]) )
{
isStruct = true;
break;
}
}
if ( isStruct )
{
end = strchr ( end, ';' );
if ( !end )
end = p + strlen(p);
else
end++;
}
else
{
char* p2 = skip_ws ( end );
if ( *p2 == ';' ) if ( *p2 == ';' )
p = p2 + 1; end = p2 + 1;
}
return end; return end;
} }
Type identify ( const vector<string>& tokens, int off ) Type identify ( const vector<string>& tokens, int off )
{ {
/*if ( tokens.size() >= (off+6) ) /*if ( tokens.size() >= 3 )
{ {
if ( tokens[off+5] == "NtCurrentTeb" ) if ( tokens[off+2] == "_OBJECTS_AND_SID" )
_CrtDbgBreak(); _CrtDbgBreak();
}*/ }*/
if ( tokens[off] == "typedef_tident" ) if ( tokens[off] == "typedef_tident" )