From b16697982eff27ef45d8c82b5e086cefd8716597 Mon Sep 17 00:00:00 2001 From: Nobuyoshi Nakada Date: Sat, 19 Apr 2014 18:46:07 +0900 Subject: Allow parenthesed do-block in cmdarg Flush cmdarg flags inside left-paren in a command argument, to allow parenthesed `do-block` as an argument without arguments parentheses. `CMDARG_PUSH(0)` for tLPAREN_ARG is before `CMDARG_PUSH(1)` in `command_args` due to look-ahead. --- src/parse.y | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'src/parse.y') diff --git a/src/parse.y b/src/parse.y index 345ac5756..053b5f3e9 100644 --- a/src/parse.y +++ b/src/parse.y @@ -2039,9 +2039,15 @@ primary : literal p->cmdarg_stack = $1; $$ = $3; } - | tLPAREN_ARG expr {p->lstate = EXPR_ENDARG;} rparen + | tLPAREN_ARG { - $$ = $2; + $1 = p->cmdarg_stack; + p->cmdarg_stack = 0; + } + expr {p->lstate = EXPR_ENDARG;} rparen + { + p->cmdarg_stack = $1; + $$ = $3; } | tLPAREN_ARG {p->lstate = EXPR_ENDARG;} rparen { -- cgit v1.2.3