aboutsummaryrefslogtreecommitdiffstats
path: root/parse.y
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2017-05-09 17:20:00 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2017-05-09 17:20:00 +0000
commit0e10e9aa615e69a7e435cfdb549c7bad3c0c9a50 (patch)
tree30dbeb230c0a9caa11dbf7bdb99a3f3a822b7ee3 /parse.y
parenta6b3ad36dec0c52b4cb9619da15fb55b9feb209c (diff)
downloadruby-0e10e9aa615e69a7e435cfdb549c7bad3c0c9a50.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.y10
1 files changed, 6 insertions, 4 deletions
diff --git a/parse.y b/parse.y
index 3b9f8f03fa..1074d3ae10 100644
--- a/parse.y
+++ b/parse.y
@@ -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;