mirror of
https://git.code.sf.net/p/quake/quakeforge
synced 2025-02-17 01:11:45 +00:00
Expose and use field_expr().
This may cause problems later on, but it is needed for the binary_expr() cleanup.
This commit is contained in:
parent
ca9693d9cd
commit
3295370328
6 changed files with 14 additions and 13 deletions
|
@ -596,6 +596,7 @@ expr_t *convert_bool (expr_t *e, int block);
|
|||
expr_t *convert_from_bool (expr_t *e, struct type_s *type);
|
||||
expr_t *bool_expr (int op, expr_t *label, expr_t *e1, expr_t *e2);
|
||||
expr_t *binary_expr (int op, expr_t *e1, expr_t *e2);
|
||||
expr_t *field_expr (expr_t *e1, expr_t *e2);
|
||||
expr_t *asx_expr (int op, expr_t *e1, expr_t *e2);
|
||||
expr_t *unary_expr (int op, expr_t *e);
|
||||
expr_t *build_function_call (expr_t *fexpr, struct type_s *ftype,
|
||||
|
|
|
@ -1576,8 +1576,8 @@ class_finish_ivar_scope (class_type_t *class_type, symtab_t *ivar_scope,
|
|||
if (sym->sy_type != sy_var)
|
||||
continue;
|
||||
sym->sy_type = sy_expr;
|
||||
sym->s.expr = binary_expr ('.', copy_expr (self_expr),
|
||||
new_symbol_expr (new_symbol (sym->name)));
|
||||
sym->s.expr = field_expr (copy_expr (self_expr),
|
||||
new_symbol_expr (new_symbol (sym->name)));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -426,8 +426,8 @@ init_vector_components (symbol_t *vector_sym, int is_field)
|
|||
if (is_field) {
|
||||
expr = new_field_expr (i, &type_float, vector_sym->s.def);
|
||||
} else {
|
||||
expr = binary_expr ('.', vector_expr,
|
||||
new_symbol_expr (new_symbol (fields[i])));
|
||||
expr = field_expr (vector_expr,
|
||||
new_symbol_expr (new_symbol (fields[i])));
|
||||
}
|
||||
}
|
||||
sym->sy_type = sy_expr;
|
||||
|
|
|
@ -1075,7 +1075,7 @@ get_struct_field (type_t *t1, expr_t *e1, expr_t *e2)
|
|||
return field;
|
||||
}
|
||||
|
||||
static expr_t *
|
||||
expr_t *
|
||||
field_expr (expr_t *e1, expr_t *e2)
|
||||
{
|
||||
type_t *t1, *t2;
|
||||
|
@ -2756,10 +2756,10 @@ assign_expr (expr_t *e1, expr_t *e2)
|
|||
warning (e1, "assignment between disparate function types");
|
||||
} else if (t1->type == ev_float && t2->type == ev_vector) {
|
||||
warning (e1, "assignment of vector to float");
|
||||
e2 = binary_expr ('.', e2, new_name_expr ("x"));
|
||||
e2 = field_expr (e2, new_name_expr ("x"));
|
||||
} else if (t1->type == ev_vector && t2->type == ev_float) {
|
||||
warning (e1, "assignment of float to vector");
|
||||
e1 = binary_expr ('.', e1, new_name_expr ("x"));
|
||||
e1 = field_expr (e1, new_name_expr ("x"));
|
||||
} else {
|
||||
return type_mismatch (e1, e2, op);
|
||||
}
|
||||
|
@ -2972,13 +2972,13 @@ super_expr (class_type_t *class_type)
|
|||
|
||||
super_block = new_block_expr ();
|
||||
|
||||
e = assign_expr (binary_expr ('.', super, new_name_expr ("self")),
|
||||
new_name_expr ("self"));
|
||||
e = assign_expr (field_expr (super, new_name_expr ("self")),
|
||||
new_name_expr ("self"));
|
||||
append_expr (super_block, e);
|
||||
|
||||
e = new_symbol_expr (class_pointer_symbol (class));
|
||||
e = assign_expr (binary_expr ('.', super, new_name_expr ("class")),
|
||||
binary_expr ('.', e, new_name_expr ("super_class")));
|
||||
e = assign_expr (field_expr (super, new_name_expr ("class")),
|
||||
field_expr (e, new_name_expr ("super_class")));
|
||||
append_expr (super_block, e);
|
||||
|
||||
e = address_expr (super, 0, 0);
|
||||
|
|
|
@ -1231,7 +1231,7 @@ unary_expr
|
|||
| '(' expr ')' { $$ = $2; $$->paren = 1; }
|
||||
| unary_expr '(' opt_arg_list ')' { $$ = function_expr ($1, $3); }
|
||||
| unary_expr '[' expr ']' { $$ = array_expr ($1, $3); }
|
||||
| unary_expr '.' unary_expr { $$ = binary_expr ('.', $1, $3); }
|
||||
| unary_expr '.' unary_expr { $$ = field_expr ($1, $3); }
|
||||
| INCOP unary_expr { $$ = incop_expr ($1, $2, 0); }
|
||||
| unary_expr INCOP { $$ = incop_expr ($2, $1, 1); }
|
||||
| '+' cast_expr %prec UNARY { $$ = $2; }
|
||||
|
|
|
@ -624,7 +624,7 @@ vector_call (sblock_t *sblock, expr_t *earg, expr_t *param, int ind,
|
|||
for (i = 0; i < 3; i++) {
|
||||
n = new_name_expr (names[i]);
|
||||
v = new_float_expr (earg->e.value->v.vector_val[i]);
|
||||
a = assign_expr (binary_expr ('.', param, n), v);
|
||||
a = assign_expr (field_expr (param, n), v);
|
||||
param = new_param_expr (get_type (earg), ind);
|
||||
a->line = earg->line;
|
||||
a->file = earg->file;
|
||||
|
|
Loading…
Reference in a new issue