diff --git a/data/parsing.qc b/data/parsing.qc index d106a1c..b0bcfc1 100644 --- a/data/parsing.qc +++ b/data/parsing.qc @@ -68,3 +68,9 @@ void() main = { print3("memb = ", ftos(pawn.memb), "\n"); print3("Frame stand3 is ", ftos($stand3), " wooh\n"); }; + +float() exprtest = { + local float x; + x = 3; + return (x); /* parens */ +} diff --git a/parser.c b/parser.c index 294fca1..a70b907 100644 --- a/parser.c +++ b/parser.c @@ -977,10 +977,12 @@ static bool parser_close_paren(parser_t *parser, shunt *sy, bool functions_only) parseerror(parser, "unmatched closing paren"); return false; } + /* this would for bit a + (x) because there are no operators inside (x) if (sy->ops[sy->ops_count-1].paren == 1) { parseerror(parser, "empty parenthesis expression"); return false; } + */ while (sy->ops_count) { if (sy->ops[sy->ops_count-1].paren == 'f') { if (!parser_close_call(parser, sy)) @@ -1240,7 +1242,7 @@ static ast_expression* parser_expression_leave(parser_t *parser, bool stopatcomm if (op->id == opid1('(')) { if (wantop) { - DEBUGSHUNTDO(printf("push (\n")); + DEBUGSHUNTDO(printf("push [op] (\n")); ++parens; /* we expected an operator, this is the function-call operator */ if (!shunt_ops_add(&sy, syparen(parser_ctx(parser), 'f', sy.out_count-1))) { @@ -1253,7 +1255,7 @@ static ast_expression* parser_expression_leave(parser_t *parser, bool stopatcomm parseerror(parser, "out of memory"); goto onerr; } - DEBUGSHUNTDO(printf("push (\n")); + DEBUGSHUNTDO(printf("push [nop] (\n")); } wantop = false; } else {