mirror of
https://github.com/DarkPlacesEngine/gmqcc.git
synced 2025-02-07 15:01:10 +00:00
Fix parsing of multi-dot field types
This commit is contained in:
parent
2884556fe3
commit
e22af32805
1 changed files with 12 additions and 11 deletions
23
parser.c
23
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");
|
parseerror(parser, "expected typename for field definition");
|
||||||
return NULL;
|
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)
|
if (parser->tok == TOKEN_IDENT)
|
||||||
cached_typedef = parser_find_typedef(parser, parser_tokval(parser), 0);
|
cached_typedef = parser_find_typedef(parser, parser_tokval(parser), 0);
|
||||||
if (!cached_typedef && parser->tok != TOKEN_TYPENAME) {
|
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 */
|
/* generate the basic type value */
|
||||||
if (cached_typedef) {
|
if (cached_typedef) {
|
||||||
var = ast_value_copy(cached_typedef);
|
var = ast_value_copy(cached_typedef);
|
||||||
|
|
Loading…
Reference in a new issue