From e22af3280570c07a9c499eee768a5b920f24368e Mon Sep 17 00:00:00 2001 From: "Wolfgang (Blub) Bumiller" Date: Sun, 25 Nov 2012 17:43:13 +0100 Subject: [PATCH] Fix parsing of multi-dot field types --- parser.c | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/parser.c b/parser.c index 650de16..5e72760 100644 --- a/parser.c +++ b/parser.c @@ -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); -- 2.39.2