--- a/c2iec.y +++ b/c2iec.y @@ -31,6 +31,7 @@ typedef enum { decl_all, + decl_param, decl_func, fifo_entry_num /* reflects the number of enum entries */ } fifo_entry_t; @@ -298,13 +299,16 @@ while( (p=fifo_pop(decl_func)) != NULL) { printf(p, $<str>1); - strcpy($<str>$, ""); + } + while( (p=fifo_pop(decl_param)) != NULL) + { + printf(p, $<str>1); } while( (p=fifo_pop(decl_all)) != NULL) { printf(p, $<str>1); - strcpy($<str>$, ""); - } + } + strcpy($<str>$, ""); } ; @@ -473,8 +477,11 @@ type_qualifier : CONST + { strcpy($<str>$, ""); } | RESTRICT + { strcpy($<str>$, ""); } | VOLATILE + { strcpy($<str>$, ""); } ; function_specifier : INLINE @@ -585,6 +592,16 @@ parameter_declaration : declaration_specifiers declarator + { + char *p; + while (p = fifo_pop(decl_all)) + { +// printf(";;; %s :: %s\n\n", $<str>1, p); + sprintf($<str>$, p, $<str>1); + fifo_push(decl_param, $<str>$); + + } + } | declaration_specifiers abstract_declarator | declaration_specifiers ; @@ -745,6 +762,10 @@ { char *p; while( (p=fifo_pop(decl_func)) != NULL) + { + printf(p, $<str>1); + } + while( (p=fifo_pop(decl_param)) != NULL) { printf(p, $<str>1); }