diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2017-05-09 17:20:00 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2017-05-09 17:20:00 +0000 |
commit | 99871095e6b94d4851daec10ccc601bd3b23316f (patch) | |
tree | 30dbeb230c0a9caa11dbf7bdb99a3f3a822b7ee3 /parse.y | |
parent | 046c94380bda1aafe99f56a854f9d44478381b1d (diff) | |
download | ruby-99871095e6b94d4851daec10ccc601bd3b23316f.tar.gz |
parse.y: brace after literal arg
* parse.y (symbol, dsym, parser_set_number_literal, parser_yylex):
set state to END too not only ENDARG and after a literal, so
that a left brace after it should be a primary block bound to
the literal, which causes syntax error.
[ruby-core:81037] [Bug #13547]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58641 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'parse.y')
-rw-r--r-- | parse.y | 10 |
1 files changed, 6 insertions, 4 deletions
@@ -4049,7 +4049,7 @@ string_dvar : tGVAR symbol : tSYMBEG sym { - SET_LEX_STATE(EXPR_ENDARG); + SET_LEX_STATE(EXPR_END|EXPR_ENDARG); /*%%%*/ $$ = $2; /*% @@ -4066,7 +4066,7 @@ sym : fname dsym : tSYMBEG xstring_contents tSTRING_END { - SET_LEX_STATE(EXPR_ENDARG); + SET_LEX_STATE(EXPR_END|EXPR_ENDARG); /*%%%*/ $$ = dsym_node($2); /*% @@ -6526,7 +6526,7 @@ parser_set_number_literal(struct parser_params *parser, VALUE v, int type, int s type = tIMAGINARY; } set_yylval_literal(v); - SET_LEX_STATE(EXPR_ENDARG); + SET_LEX_STATE(EXPR_END|EXPR_ENDARG); return type; } @@ -7884,9 +7884,11 @@ parser_yylex(struct parser_params *parser) } } if (token == tSTRING_END || token == tREGEXP_END || token == tLABEL_END) { + const enum lex_state_e next_state = + token == tLABEL_END ? EXPR_BEG|EXPR_LABEL : EXPR_END|EXPR_ENDARG; rb_gc_force_recycle((VALUE)lex_strterm); lex_strterm = 0; - SET_LEX_STATE(token == tLABEL_END ? EXPR_BEG|EXPR_LABEL : EXPR_ENDARG); + SET_LEX_STATE(next_state); } } return token; |