txlyre 2 days ago
parent
commit
35615e361c
1 changed files with 7 additions and 5 deletions
  1. 7 5
      qic.c

+ 7 - 5
qic.c

@@ -1583,7 +1583,9 @@ size_t get_lineno(token_t *tok) {
                    ->data[(*pos) + 1 >= tokens->length ? tokens->length - 1    \
                                                        : (*pos) + 1])))
 
-node_t *parse_stmt(list_t *tokens, size_t *pos);
+node_t *_parse_stmt(list_t *tokens, size_t *pos, int allow_comma);
+#define parse_stmt(t, p) (_parse_stmt((t), (p), 0))
+#define parse_stmt_c(t, p) (_parse_stmt((t), (p), 1))
 
 node_t *parse_call(list_t *tokens, size_t *pos) {
   node_t *a = parse_primary(tokens, pos);
@@ -2060,7 +2062,7 @@ node_t *parse_block(list_t *tokens, size_t *pos) {
 
   list_t *stmts = list_new();
   while (!AT(EOF) && !AT(RCB)) {
-    list_push(stmts, parse_stmt(tokens, pos));
+    list_push(stmts, parse_stmt_c(tokens, pos));
 
     MATCH(SEMI);
   }
@@ -2224,7 +2226,7 @@ node_t *parse_func(list_t *tokens, size_t *pos, int is_expr) {
   return NODEF(FUNCDEF, name, params, captured, body);
 }
 
-node_t *parse_stmt(list_t *tokens, size_t *pos) {
+node_t *_parse_stmt(list_t *tokens, size_t *pos, int allow_comma) {
   if (MATCH(LCB)) {
     list_t *stmts = list_new();
 
@@ -2591,7 +2593,7 @@ node_t *parse_stmt(list_t *tokens, size_t *pos) {
     return NODET(INLINE, t);
   }
 
-  return NODE1(EXPRSTMT, parse_comma_expr(tokens, pos));
+  return NODE1(EXPRSTMT, allow_comma? parse_comma_expr(tokens, pos): parse_expr(tokens, pos));
 }
 
 #define ATM(t)                                                                 \
@@ -2933,7 +2935,7 @@ node_t *parse_program(list_t *tokens, size_t *pos) {
 
       list_push(ms, m);
     } else {
-      n = parse_stmt(tokens, pos);
+      n = parse_stmt_c(tokens, pos);
       flag = 1;
     }