summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--parse.y23
1 files changed, 15 insertions, 8 deletions
diff --git a/parse.y b/parse.y
index 6bd46b1108..8ffb217fa0 100644
--- a/parse.y
+++ b/parse.y
@@ -8488,18 +8488,25 @@ parser_yylex(struct parser_params *parser)
return parse_numeric(parser, c);
case ')':
+ COND_LEXPOP();
+ CMDARG_LEXPOP();
+ SET_LEX_STATE(EXPR_ENDFN);
+ paren_nest--;
+ return c;
+
case ']':
+ COND_LEXPOP();
+ CMDARG_LEXPOP();
+ SET_LEX_STATE(EXPR_END);
+ paren_nest--;
+ return c;
+
case '}':
COND_LEXPOP();
CMDARG_LEXPOP();
- if (c == ')')
- SET_LEX_STATE(EXPR_ENDFN);
- else
- SET_LEX_STATE(EXPR_END);
- if (c == '}') {
- if (!brace_nest--) c = tSTRING_DEND;
- }
- if (c != tSTRING_DEND) paren_nest--;
+ SET_LEX_STATE(EXPR_END);
+ if (!brace_nest--) return tSTRING_DEND;
+ paren_nest--;
return c;
case ':':