mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
merge revision(s) 58641: [Backport #13547]
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/branches/ruby_2_4@59409 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
e7358e6063
commit
fd2fca8395
3 changed files with 17 additions and 5 deletions
10
parse.y
10
parse.y
|
@ -4254,7 +4254,7 @@ string_dvar : tGVAR
|
||||||
|
|
||||||
symbol : tSYMBEG sym
|
symbol : tSYMBEG sym
|
||||||
{
|
{
|
||||||
SET_LEX_STATE(EXPR_ENDARG);
|
SET_LEX_STATE(EXPR_END|EXPR_ENDARG);
|
||||||
/*%%%*/
|
/*%%%*/
|
||||||
$$ = $2;
|
$$ = $2;
|
||||||
/*%
|
/*%
|
||||||
|
@ -4271,7 +4271,7 @@ sym : fname
|
||||||
|
|
||||||
dsym : tSYMBEG xstring_contents tSTRING_END
|
dsym : tSYMBEG xstring_contents tSTRING_END
|
||||||
{
|
{
|
||||||
SET_LEX_STATE(EXPR_ENDARG);
|
SET_LEX_STATE(EXPR_END|EXPR_ENDARG);
|
||||||
/*%%%*/
|
/*%%%*/
|
||||||
$$ = dsym_node($2);
|
$$ = dsym_node($2);
|
||||||
/*%
|
/*%
|
||||||
|
@ -6659,7 +6659,7 @@ parser_set_number_literal(struct parser_params *parser, VALUE v, int type, int s
|
||||||
type = tIMAGINARY;
|
type = tIMAGINARY;
|
||||||
}
|
}
|
||||||
set_yylval_literal(v);
|
set_yylval_literal(v);
|
||||||
SET_LEX_STATE(EXPR_ENDARG);
|
SET_LEX_STATE(EXPR_END|EXPR_ENDARG);
|
||||||
return type;
|
return type;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -8017,9 +8017,11 @@ parser_yylex(struct parser_params *parser)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (token == tSTRING_END || token == tREGEXP_END || token == tLABEL_END) {
|
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);
|
rb_gc_force_recycle((VALUE)lex_strterm);
|
||||||
lex_strterm = 0;
|
lex_strterm = 0;
|
||||||
SET_LEX_STATE(token == tLABEL_END ? EXPR_BEG|EXPR_LABEL : EXPR_ENDARG);
|
SET_LEX_STATE(next_state);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return token;
|
return token;
|
||||||
|
|
|
@ -952,6 +952,16 @@ eom
|
||||||
assert_equal(:ok, result)
|
assert_equal(:ok, result)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_brace_after_literal_argument
|
||||||
|
bug = '[ruby-core:81037] [Bug #13547]'
|
||||||
|
error = /unexpected '{'/
|
||||||
|
assert_syntax_error('m "x" {}', error)
|
||||||
|
assert_syntax_error('m 1 {}', error, bug)
|
||||||
|
assert_syntax_error('m 1.0 {}', error, bug)
|
||||||
|
assert_syntax_error('m :m {}', error, bug)
|
||||||
|
assert_syntax_error('m :"#{m}" {}', error, bug)
|
||||||
|
end
|
||||||
|
|
||||||
def test_return_toplevel
|
def test_return_toplevel
|
||||||
feature4840 = '[ruby-core:36785] [Feature #4840]'
|
feature4840 = '[ruby-core:36785] [Feature #4840]'
|
||||||
code = "#{<<~"begin;"}\n#{<<~"end;"}"
|
code = "#{<<~"begin;"}\n#{<<~"end;"}"
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
#define RUBY_VERSION "2.4.2"
|
#define RUBY_VERSION "2.4.2"
|
||||||
#define RUBY_RELEASE_DATE "2017-07-23"
|
#define RUBY_RELEASE_DATE "2017-07-23"
|
||||||
#define RUBY_PATCHLEVEL 160
|
#define RUBY_PATCHLEVEL 161
|
||||||
|
|
||||||
#define RUBY_RELEASE_YEAR 2017
|
#define RUBY_RELEASE_YEAR 2017
|
||||||
#define RUBY_RELEASE_MONTH 7
|
#define RUBY_RELEASE_MONTH 7
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue