summaryrefslogtreecommitdiff
path: root/parse.y
diff options
context:
space:
mode:
authormame <mame@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2018-01-11 13:42:18 +0000
committermame <mame@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2018-01-11 13:42:18 +0000
commit69c8feb253d7cd2f7fd6ec02763a35747f194bc4 (patch)
tree41a99895d35271e44085572b2fb6647bc3e892ff /parse.y
parentf2bffa16864f3c3260b098f4bbc50cc13d6574c5 (diff)
parse.y: disentangle the lexer handling of ')', ']', and '}'
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61769 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'parse.y')
-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 ':':