clarify post_type() VT_STORAGE handling by moving it out

This commit is contained in:
Joe Soroka 2011-04-06 12:08:50 -07:00
parent ace0f7f259
commit 810aca9e68

View File

@ -3168,11 +3168,9 @@ static void post_type(CType *type, AttributeDef *ad)
} }
/* we push a anonymous symbol which will contain the function prototype */ /* we push a anonymous symbol which will contain the function prototype */
ad->func_args = arg_size; ad->func_args = arg_size;
t1 = type->t & VT_STORAGE;
type->t &= ~VT_STORAGE;
s = sym_push(SYM_FIELD, type, INT_ATTR(ad), l); s = sym_push(SYM_FIELD, type, INT_ATTR(ad), l);
s->next = first; s->next = first;
type->t = t1 | VT_FUNC; type->t = VT_FUNC;
type->ref = s; type->ref = s;
} else if (tok == '[') { } else if (tok == '[') {
SValue *last_vtop = NULL; SValue *last_vtop = NULL;
@ -3182,6 +3180,7 @@ static void post_type(CType *type, AttributeDef *ad)
if (tok == TOK_RESTRICT1) if (tok == TOK_RESTRICT1)
next(); next();
n = -1; n = -1;
t1 = 0;
if (tok != ']') { if (tok != ']') {
gexpr(); gexpr();
if ((vtop->r & (VT_VALMASK | VT_LVAL | VT_SYM)) == VT_CONST) { if ((vtop->r & (VT_VALMASK | VT_LVAL | VT_SYM)) == VT_CONST) {
@ -3192,14 +3191,12 @@ static void post_type(CType *type, AttributeDef *ad)
} else { } else {
if (!is_integer_btype(vtop->type.t & VT_BTYPE)) if (!is_integer_btype(vtop->type.t & VT_BTYPE))
error("size of variable length array should be an integer"); error("size of variable length array should be an integer");
type->t |= VT_VLA; t1 = VT_VLA;
last_vtop = vtop; last_vtop = vtop;
} }
} }
skip(']'); skip(']');
/* parse next post type */ /* parse next post type */
t1 = type->t & (VT_STORAGE|VT_VLA);
type->t &= ~(VT_STORAGE|VT_VLA);
post_type(type, ad); post_type(type, ad);
t1 |= type->t & VT_VLA; t1 |= type->t & VT_VLA;
@ -3227,7 +3224,7 @@ static void type_decl(CType *type, AttributeDef *ad, int *v, int td)
{ {
Sym *s; Sym *s;
CType type1, *type2; CType type1, *type2;
int qualifiers; int qualifiers, storage;
while (tok == '*') { while (tok == '*') {
qualifiers = 0; qualifiers = 0;
@ -3279,7 +3276,10 @@ static void type_decl(CType *type, AttributeDef *ad, int *v, int td)
*v = 0; *v = 0;
} }
} }
storage = type->t & VT_STORAGE;
type->t &= ~VT_STORAGE;
post_type(type, ad); post_type(type, ad);
type->t |= storage;
if (tok == TOK_ATTRIBUTE1 || tok == TOK_ATTRIBUTE2) if (tok == TOK_ATTRIBUTE1 || tok == TOK_ATTRIBUTE2)
parse_attribute(ad); parse_attribute(ad);