ruby-changes:60762
From: Nobuyoshi <ko1@a...>
Date: Mon, 13 Apr 2020 21:52:03 +0900 (JST)
Subject: [ruby-changes:60762] 67bcac879a (master): Allow simple R-assign in endless def
https://git.ruby-lang.org/ruby.git/commit/?id=67bcac879a From 67bcac879a2e0ddfb4e7bbd7cb5e5401422de76a Mon Sep 17 00:00:00 2001 From: Nobuyoshi Nakada <nobu@r...> Date: Mon, 13 Apr 2020 18:44:33 +0900 Subject: Allow simple R-assign in endless def diff --git a/parse.y b/parse.y index 2c5eaf1..ca2d1fe 100644 --- a/parse.y +++ b/parse.y @@ -1104,7 +1104,7 @@ static int looking_at_eol_p(struct parser_params *p); https://github.com/ruby/ruby/blob/trunk/parse.y#L1104 %type <node> string_contents xstring_contents regexp_contents string_content %type <node> words symbols symbol_list qwords qsymbols word_list qword_list qsym_list word %type <node> literal numeric simple_numeric ssym dsym symbol cpath def_name defn_head defs_head -%type <node> top_compstmt top_stmts top_stmt begin_block rassign +%type <node> top_compstmt top_stmts top_stmt begin_block rassign arg_rassign %type <node> bodystmt compstmt stmts stmt_or_begin stmt expr arg primary command command_call method_call %type <node> expr_value expr_value_do arg_value primary_value fcall rel_expr %type <node> if_tail opt_else case_body case_args cases opt_rescue exc_list exc_var opt_ensure @@ -1195,6 +1195,7 @@ static int looking_at_eol_p(struct parser_params *p); https://github.com/ruby/ruby/blob/trunk/parse.y#L1195 %nonassoc tLOWEST %nonassoc tLBRACE_ARG +%left tASSOC %nonassoc modifier_if modifier_unless modifier_while modifier_until keyword_in %left keyword_or keyword_and @@ -1536,6 +1537,19 @@ rassign : arg_value tASSOC lhs https://github.com/ruby/ruby/blob/trunk/parse.y#L1537 } ; +arg_rassign : arg tASSOC lhs %prec tLOWEST + { + /*%%%*/ + $$ = node_assign(p, $3, $1, &@$); + /*% %*/ + /*% ripper: assign!($3, $1) %*/ + } + | arg %prec tLOWEST + { + $$ = $1; + } + ; + command_asgn : lhs '=' command_rhs { /*%%%*/ @@ -2449,7 +2463,7 @@ arg : lhs '=' arg_rhs https://github.com/ruby/ruby/blob/trunk/parse.y#L2463 /*% %*/ /*% ripper: ifop!($1, $3, $6) %*/ } - | defn_head f_arglist_opt '=' arg + | defn_head f_arglist_opt '=' arg_rassign { restore_defun(p, $<node>1->nd_defn); /*%%%*/ @@ -2458,7 +2472,7 @@ arg : lhs '=' arg_rhs https://github.com/ruby/ruby/blob/trunk/parse.y#L2472 /*% ripper: def!(get_value($1), $2, $4) %*/ local_pop(p); } - | defs_head f_arglist_opt '=' arg + | defs_head f_arglist_opt '=' arg_rassign { restore_defun(p, $<node>1->nd_defn); /*%%%*/ diff --git a/test/ruby/test_syntax.rb b/test/ruby/test_syntax.rb index 29813ce..b0d9e82 100644 --- a/test/ruby/test_syntax.rb +++ b/test/ruby/test_syntax.rb @@ -1419,6 +1419,7 @@ eom https://github.com/ruby/ruby/blob/trunk/test/ruby/test_syntax.rb#L1419 assert_valid_syntax('private def inc(x) = x + 1') assert_valid_syntax('private def obj.foo = 42') assert_valid_syntax('private def obj.inc(x) = x + 1') + assert_valid_syntax('private def obj.inc(x) = x + 1 => @x') end def test_methoddef_in_cond -- cgit v0.10.2 -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/