mirror of
https://github.com/DarkPlacesEngine/gmqcc.git
synced 2025-02-17 09:02:25 +00:00
vector fields now get _x, _y and _z too
This commit is contained in:
parent
37c4644d85
commit
e9844d9abf
1 changed files with 24 additions and 6 deletions
30
parser.c
30
parser.c
|
@ -1838,16 +1838,34 @@ static bool parser_do(parser_t *parser)
|
|||
fld->expression.next = (ast_expression*)var;
|
||||
|
||||
varent.var = (ast_expression*)fld;
|
||||
varent.name = util_strdup(fld->name);
|
||||
(void)!parser_t_fields_add(parser, varent);
|
||||
|
||||
if (var->expression.vtype == TYPE_VECTOR)
|
||||
{
|
||||
/* create _x, _y and _z fields as well */
|
||||
parseerror(parser, "TODO: vector field members (_x,_y,_z)");
|
||||
ast_delete(fld);
|
||||
return false;
|
||||
}
|
||||
size_t len;
|
||||
varentry_t vx, vy, vz;
|
||||
|
||||
varent.name = util_strdup(fld->name);
|
||||
(void)!parser_t_fields_add(parser, varent);
|
||||
len = strlen(varent.name);
|
||||
vx.var = (ast_expression*)ast_member_new(ast_ctx(fld), (ast_expression*)fld, 0);
|
||||
vy.var = (ast_expression*)ast_member_new(ast_ctx(fld), (ast_expression*)fld, 1);
|
||||
vz.var = (ast_expression*)ast_member_new(ast_ctx(fld), (ast_expression*)fld, 2);
|
||||
vx.name = mem_a(len+3);
|
||||
vy.name = mem_a(len+3);
|
||||
vz.name = mem_a(len+3);
|
||||
strcpy(vx.name, varent.name);
|
||||
strcpy(vy.name, varent.name);
|
||||
strcpy(vz.name, varent.name);
|
||||
vx.name[len] = vy.name[len] = vz.name[len] = '_';
|
||||
vx.name[len+1] = 'x';
|
||||
vy.name[len+1] = 'y';
|
||||
vz.name[len+1] = 'z';
|
||||
vx.name[len+2] = vy.name[len+2] = vz.name[len+2] = 0;
|
||||
(void)!parser_t_fields_add(parser, vx);
|
||||
(void)!parser_t_fields_add(parser, vy);
|
||||
(void)!parser_t_fields_add(parser, vz);
|
||||
}
|
||||
|
||||
/* end with a semicolon */
|
||||
if (!parser_next(parser) || parser->tok != ';') {
|
||||
|
|
Loading…
Reference in a new issue