revert last 3 commits. will find better way.

This commit is contained in:
Joe Soroka 2011-03-08 12:56:13 -08:00
parent 2d292e69a1
commit b3a8eed49e

View File

@ -3048,17 +3048,16 @@ static void asm_label_instr(CString *astr)
#endif #endif
} }
static void post_type_array(CType *type, AttributeDef *ad); static void post_type(CType *type, AttributeDef *ad)
static void post_type_args(CType *type, AttributeDef *ad)
{ {
int n, l, t1, arg_size, align; int n, l, t1, arg_size, align;
Sym **plast, *s, *first; Sym **plast, *s, *first;
AttributeDef ad1; AttributeDef ad1;
CType pt; CType pt;
if (tok == '(') {
/* function declaration */ /* function declaration */
skip('('); next();
l = 0; l = 0;
first = NULL; first = NULL;
plast = &first; plast = &first;
@ -3115,23 +3114,16 @@ static void post_type_args(CType *type, AttributeDef *ad)
/* some ancient pre-K&R C allows a function to return an array /* some ancient pre-K&R C allows a function to return an array
and the array brackets to be put after the arguments, such and the array brackets to be put after the arguments, such
that "int c()[]" means the same as "int[] c()" */ that "int c()[]" means the same as "int[] c()" */
if (tok == '[') post_type(type, ad);
post_type_array(type, 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;
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 = t1 | VT_FUNC;
type->ref = s; type->ref = s;
} } else if (tok == '[') {
static void post_type_array(CType *type, AttributeDef *ad)
{
int n, t1;
Sym *s;
/* array definition */ /* array definition */
skip('['); next();
if (tok == TOK_RESTRICT1) if (tok == TOK_RESTRICT1)
next(); next();
n = -1; n = -1;
@ -3144,8 +3136,7 @@ static void post_type_array(CType *type, AttributeDef *ad)
/* parse next post type */ /* parse next post type */
t1 = type->t & VT_STORAGE; t1 = type->t & VT_STORAGE;
type->t &= ~VT_STORAGE; type->t &= ~VT_STORAGE;
if (tok == '[') post_type(type, ad);
post_type_array(type, ad);
/* we push a anonymous symbol which will contain the array /* we push a anonymous symbol which will contain the array
element type */ element type */
@ -3154,6 +3145,7 @@ static void post_type_array(CType *type, AttributeDef *ad)
ARRAY_RESIZE(s->r) = 1; ARRAY_RESIZE(s->r) = 1;
type->t = t1 | VT_ARRAY | VT_PTR; type->t = t1 | VT_ARRAY | VT_PTR;
type->ref = s; type->ref = s;
}
} }
/* Parse a type declaration (except basic type), and return the type /* Parse a type declaration (except basic type), and return the type
@ -3218,10 +3210,7 @@ static void type_decl(CType *type, AttributeDef *ad, int *v, int td)
*v = 0; *v = 0;
} }
} }
if (tok == '(') post_type(type, ad);
post_type_args(type, ad);
else if (tok == '[')
post_type_array(type, ad);
if (tok == TOK_ATTRIBUTE1 || tok == TOK_ATTRIBUTE2) if (tok == TOK_ATTRIBUTE1 || tok == TOK_ATTRIBUTE2)
parse_attribute(ad); parse_attribute(ad);