aboutsummaryrefslogtreecommitdiff
path: root/src/parser.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/parser.c')
-rw-r--r--src/parser.c28
1 files changed, 25 insertions, 3 deletions
diff --git a/src/parser.c b/src/parser.c
index af0d0ab..0b524fc 100644
--- a/src/parser.c
+++ b/src/parser.c
@@ -84,6 +84,7 @@ print_token(TOKSTK *tokptr)
case WORD:
case MODIFIER:
case STRUCT:
+ case PARM_WRAPPER:
fprintf(stderr, "`%s'", tokptr->token);
break;
case LBRACE0:
@@ -106,6 +107,9 @@ print_token(TOKSTK *tokptr)
case OP:
fprintf(stderr, "OP"); /* ouch!!! */
break;
+ case STRING:
+ fprintf(stderr, "\"%s\"", tokptr->token);
+ break;
default:
fprintf(stderr, "`%c'", tokptr->type);
}
@@ -214,6 +218,7 @@ save_token(TOKSTK *tokptr)
case STRUCT:
case PARM_WRAPPER:
case WORD:
+ case QUALIFIER:
if (need_space)
obstack_1grow(&text_stk, ' ');
len = strlen(tokptr->token);
@@ -233,13 +238,23 @@ save_token(TOKSTK *tokptr)
case EXTERN: /* storage class specifiers are already taken care of */
case STATIC:
break;
+ case ',':
+ obstack_1grow(&text_stk, ',');
+ need_space = 1;
+ break;
case '(':
if (need_space)
obstack_1grow(&text_stk, ' ');
- /*FALLTHRU*/
- default:
obstack_1grow(&text_stk, tokptr->type);
need_space = 0;
+ break;
+ case ')':
+ obstack_1grow(&text_stk, tokptr->type);
+ need_space = 1;
+ break;
+ default:
+ if (verbose)
+ file_error(_("unrecognized definition"), 1);
}
}
@@ -339,6 +354,8 @@ yyparse()
switch (tok.type) {
case 0:
return 0;
+ case QUALIFIER:
+ continue;
case TYPEDEF:
parse_typedef();
break;
@@ -477,6 +494,12 @@ parse_function_declaration(Ident *ident, int parm)
}
goto restart;
+
+ case PARM_WRAPPER:
+ if (skip_balanced('(', ')', 0) == -1)
+ file_error(_("unexpected end of file in wrapper"), 0);
+ goto restart;
+
case ';':
case ',':
break;
@@ -842,7 +865,6 @@ maybe_parm_list(int *parm_cnt_return)
case IDENTIFIER:
case STRUCT:
case UNION:
- case ENUM:
case TYPE:
parmcnt++;
ident.storage = AutoStorage;

Return to:

Send suggestions and report system problems to the System administrator.