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
This commit is contained in:
mame 2018-01-11 13:42:18 +00:00
Родитель f2bffa1686
Коммит 69c8feb253
1 изменённых файлов: 15 добавлений и 8 удалений

23
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 ':':