uint Parser::complexIdentifier( uint j ) { uint k = whitespace( j ); if ( t[k] == ':' && t[k+1] == ':' ) k = whitespace( k + 2 ); uint l = simpleIdentifier( k ); if ( l == k ) return j; j = whitespace( l ); while ( t[j] == ':' && t[j+1] == ':' ) { if ( t.mid( j+2, 8 ) == "operator" ) j = operatorHack( j+2 ); else if ( t[j+2] == '~' ) j = simpleIdentifier( j + 3 ); else j = simpleIdentifier( j + 2 ); } j = whitespace( j ); if ( t[j] == '<' ) { k = complexIdentifier( j + 1 ); if ( k > j + 1 && t[k] == '>' ) j = k+1; } return j; }
uint Parser::simpleIdentifier( uint j ) { uint k = whitespace( j ); if ( t.mid( k, 8 ) == "operator" ) return operatorHack( k ); if ( ( t[k] >= 'A' && t[k] <= 'z' ) || ( t[k] >= 'a' && t[k] <= 'z' ) ) { j = k + 1; while ( ( t[j] >= 'A' && t[j] <= 'z' ) || ( t[j] >= 'a' && t[j] <= 'z' ) || ( t[j] >= '0' && t[j] <= '9' ) || ( t[j] == '_' ) ) j++; } return j; }