diff --git a/parse.y b/parse.y index 3ae456ca4c..bf0d33a491 100644 --- a/parse.y +++ b/parse.y @@ -1586,7 +1586,6 @@ stmt : keyword_alias fitem {SET_LEX_STATE(EXPR_FNAME|EXPR_FITEM);} fitem | lhs '=' lex_ctxt mrhs { /*%%%*/ - value_expr($4); $$ = node_assign(p, $1, $4, $3, &@$); /*% %*/ /*% ripper: assign!($1, $4) %*/ @@ -1595,7 +1594,6 @@ stmt : keyword_alias fitem {SET_LEX_STATE(EXPR_FNAME|EXPR_FITEM);} fitem { /*%%%*/ YYLTYPE loc = code_loc_gen(&@5, &@6); - value_expr($4); $$ = node_assign(p, $1, NEW_RESCUE($4, NEW_RESBODY(0, remove_begin($6), 0, &loc), 0, &@$), $3, &@$); /*% %*/ /*% ripper: massign!($1, rescue_mod!($4, $6)) %*/ @@ -2861,6 +2859,7 @@ opt_block_arg : ',' block_arg } ; +/* value */ args : arg_value { /*%%%*/ @@ -2891,10 +2890,12 @@ args : arg_value } ; +/* value */ mrhs_arg : mrhs | arg_value ; +/* value */ mrhs : args ',' arg_value { /*%%%*/ diff --git a/test/ruby/test_parse.rb b/test/ruby/test_parse.rb index a9e8417357..3120016e60 100644 --- a/test/ruby/test_parse.rb +++ b/test/ruby/test_parse.rb @@ -1231,10 +1231,12 @@ x = __ENCODING__ assert_valid_syntax('let () { m(a) do; end }') end - def test_void_value_in_command_rhs + def test_void_value_in_rhs w = "void value expression" - ex = assert_syntax_error("x = return 1", w) - assert_equal(1, ex.message.scan(w).size, "same #{w.inspect} warning should be just once") + ["x = return 1", "x = return, 1", "x = 1, return", "x, y = return"].each do |code| + ex = assert_syntax_error(code, w) + assert_equal(1, ex.message.scan(w).size, ->{"same #{w.inspect} warning should be just once\n#{w.message}"}) + end end def eval_separately(code)