%type <declarator> direct_declarator declarator pointer array parens postfix
%type <declarator> direct_declarator_ish declarator_ish parameter_type_list
%type <decl> declaration declarators declarator_wrap
-%type <decl> parameter parameters
+%type <decl> parameter
%type <strval> english_vla
%type <declspec> storage_func_specs post_specs
%type <declspec> type_qual_spec type_qual_specs typedef_name_qual
%type <declarator> english_declarator english_array english_function
%type <declarator> english_parameter_list null_decl
-%type <decl> english_parameter english_parameters
%type <decl> english english_declaration
+%type <decl> english_parameter
/*
* Harmless shift/reduce conflicts in english_parameter. See comments below
.declarators = $2);
}
-parameters: parameter | parameters T_COMMA parameter {
- $$ = $3;
- $$->next = $1;
-}
-
varargs: { $$ = false; } | T_COMMA T_ELLIPSIS { $$ = true; }
-parameter_type_list: parameters varargs {
- struct cdecl *p, *c, *n;
-
- /* Parameters were accumulated in reverse order. */
- for (p = NULL, c = $1; c; p = c, c = n) {
- n = c->next;
- c->next = p;
- }
-
+parameter_type_list: parameter varargs {
ALLOC_STRUCT($$, struct cdecl_declarator,
.type = CDECL_DECL_FUNCTION,
- .u.function.parameters = p,
+ .u.function.parameters = $1,
.u.function.variadic = $2);
+} | parameter T_COMMA parameter_type_list {
+ $$ = $3;
+ $1->next = $$->u.function.parameters;
+ $$->u.function.parameters = $1;
}
parens: T_LPAREN parameter_type_list T_RPAREN {
$$ = $3;
}
-english_parameter_list: english_parameters varargs {
- struct cdecl *p, *c, *n;
-
- /* Parameters were accumulated in reverse order. */
- for (p = NULL, c = $1; c; p = c, c = n) {
- n = c->next;
- c->next = p;
- }
-
+english_parameter_list: english_parameter varargs {
ALLOC_STRUCT($$, struct cdecl_declarator,
.type = CDECL_DECL_FUNCTION,
- .u.function.parameters = p,
+ .u.function.parameters = $1,
.u.function.variadic = $2);
-}
-
-english_parameters: english_parameters T_COMMA english_parameter {
+} | english_parameter T_COMMA english_parameter_list {
$$ = $3;
- $$->next = $1;
-} | english_parameter
+ $1->next = $$->u.function.parameters;
+ $$->u.function.parameters = $1;
+}
typedef_name_qual: T_IDENT qualifiers {
ALLOC_STRUCT($$, struct cdecl_declspec,