[前][次][番号順一覧][スレッド一覧]

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/

[前][次][番号順一覧][スレッド一覧]