Fix parsing of multi-dot field types

This commit is contained in:
Wolfgang (Blub) Bumiller 2012-11-25 17:43:13 +01:00
parent 2884556fe3
commit e22af32805

View file

@ -3210,6 +3210,18 @@ static ast_value *parse_typename(parser_t *parser, ast_value **storebase, ast_va
parseerror(parser, "expected typename for field definition");
return NULL;
}
/* Further dots are handled seperately because they won't be part of the
* basetype
*/
while (parser->tok == '.') {
++morefields;
if (!parser_next(parser)) {
parseerror(parser, "expected typename for field definition");
return NULL;
}
}
if (parser->tok == TOKEN_IDENT)
cached_typedef = parser_find_typedef(parser, parser_tokval(parser), 0);
if (!cached_typedef && parser->tok != TOKEN_TYPENAME) {
@ -3218,17 +3230,6 @@ static ast_value *parse_typename(parser_t *parser, ast_value **storebase, ast_va
}
}
/* Further dots are handled seperately because they won't be part of the
* basetype
*/
while (parser->tok == '.') {
++morefields;
if (!parser_next(parser)) {
parseerror(parser, "expected typename for field definition");
return NULL;
}
}
/* generate the basic type value */
if (cached_typedef) {
var = ast_value_copy(cached_typedef);