|
@@ -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;
|
|
|
}
|
|
|
|