diff options
author | mame <mame@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2018-01-11 13:42:18 +0000 |
---|---|---|
committer | mame <mame@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2018-01-11 13:42:18 +0000 |
commit | 69c8feb253d7cd2f7fd6ec02763a35747f194bc4 (patch) | |
tree | 41a99895d35271e44085572b2fb6647bc3e892ff /parse.y | |
parent | f2bffa16864f3c3260b098f4bbc50cc13d6574c5 (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.y | 23 |
1 files changed, 15 insertions, 8 deletions
@@ -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 ':': |