struct argument_expression_list {
struct assignment_expression *aexpr;
+ struct token *comma;
struct argument_expression_list *next;
};
struct argument_expression_list *parse_argument_expression_list(void)
{
- fprintf(stderr, "FIXME: %s() is not implemented\n", __func__);
+ struct argument_expression_list *list;
+ int pos;
+
+ list = argument_expression_list_new();
+
+ if(!list) {
+ return(NULL);
+ }
+
+ if((list->aexpr = parse_assignment_expression())) {
+ return(list);
+ }
+
+ pos = lex_getpos();
+
+ list->next = parse_argument_expression_list();
+ list->comma = lex_gettoken();
+ list->aexpr = parse_assignment_expression();
+
+ if(list->next && list->comma && list->aexpr && list->comma->type == TOKEN_COMMA) {
+ return(list);
+ }
+
+ argument_expression_list_free(list);
+ lex_setpos(pos);
+
return(NULL);
}