Support direct struct/union field access.

This commit is contained in:
Bill Currie 2011-02-08 14:48:26 +09:00
parent 3c849b970b
commit 93a5808659

View file

@ -873,6 +873,18 @@ field_expr (expr_t *e1, expr_t *e2)
} else if (t1->type == ev_vector) {
} else if (t1->type == ev_quat) {
} else if (is_struct (t1)) {
symtab_t *strct = t1->t.symtab;
symbol_t *sym = e2->e.symbol;//FIXME need to check
symbol_t *field;
field = symtab_lookup (strct, sym->name);
if (!field)
return new_error_expr ();
e2->type = ex_value;
e2->e.value.type = ev_short;
e2->e.value.v.short_val = field->s.offset;
e = address_expr (e1, e2, field->type);
return unary_expr ('.', e);
} else if (is_class (t1)) {
}
return type_mismatch (e1, e2, '.');