diff options
| author | Nobuyoshi Nakada <[email protected]> | 2014-04-19 18:46:07 +0900 |
|---|---|---|
| committer | Nobuyoshi Nakada <[email protected]> | 2014-04-19 18:46:07 +0900 |
| commit | b16697982eff27ef45d8c82b5e086cefd8716597 (patch) | |
| tree | c88ada396febdcb276c3b91e49dbe169fa29e681 /src/parse.y | |
| parent | 426f80b191a0130e94a1daebf204ece0433e9d78 (diff) | |
| download | mruby-b16697982eff27ef45d8c82b5e086cefd8716597.tar.gz mruby-b16697982eff27ef45d8c82b5e086cefd8716597.zip | |
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.
Diffstat (limited to 'src/parse.y')
| -rw-r--r-- | src/parse.y | 10 |
1 files changed, 8 insertions, 2 deletions
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 = $<stack>1; $$ = $3; } - | tLPAREN_ARG expr {p->lstate = EXPR_ENDARG;} rparen + | tLPAREN_ARG { - $$ = $2; + $<stack>1 = p->cmdarg_stack; + p->cmdarg_stack = 0; + } + expr {p->lstate = EXPR_ENDARG;} rparen + { + p->cmdarg_stack = $<stack>1; + $$ = $3; } | tLPAREN_ARG {p->lstate = EXPR_ENDARG;} rparen { |
