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

ruby-changes:70162

From: Koichi <ko1@a...>
Date: Mon, 13 Dec 2021 10:24:08 +0900 (JST)
Subject: [ruby-changes:70162] fdfb43b2b1 (master): fix Struct's setter arity

https://git.ruby-lang.org/ruby.git/commit/?id=fdfb43b2b1

From fdfb43b2b129afb78c352c95776118eeceb245a2 Mon Sep 17 00:00:00 2001
From: Koichi Sasada <ko1@a...>
Date: Mon, 13 Dec 2021 02:02:41 +0900
Subject: fix Struct's setter arity

https://github.com/ruby/ruby/pull/5131/files#diff-b2553d23e6b1fe76e20608d06c25f6acca06279100f1a9c24febcd79a82fac3cR2689
---
 proc.c                   |  2 +-
 test/ruby/test_struct.rb | 14 ++++++++++++++
 2 files changed, 15 insertions(+), 1 deletion(-)

diff --git a/proc.c b/proc.c
index d0451244ce1..cff8e9e7af3 100644
--- a/proc.c
+++ b/proc.c
@@ -2684,7 +2684,7 @@ method_def_min_max_arity(const rb_method_definition_t *def, int *max) https://github.com/ruby/ruby/blob/trunk/proc.c#L2684
             return 0;
           case OPTIMIZED_METHOD_TYPE_STRUCT_ASET:
             *max = 1;
-            return 0;
+            return 1;
 	  default:
 	    break;
 	}
diff --git a/test/ruby/test_struct.rb b/test/ruby/test_struct.rb
index b0e6bae9e3f..5a39ecc3aa3 100644
--- a/test/ruby/test_struct.rb
+++ b/test/ruby/test_struct.rb
@@ -497,6 +497,20 @@ module TestStruct https://github.com/ruby/ruby/blob/trunk/test/ruby/test_struct.rb#L497
     assert_equal(42, x.public_send("a"))
   end
 
+  def test_arity
+    klass = @Struct.new(:a)
+    assert_equal 0, klass.instance_method(:a).arity
+    assert_equal 1, klass.instance_method(:a=).arity
+
+    klass.module_eval do
+      define_method(:b=, &klass.new.method(:a=).to_proc)
+      alias c= a=
+    end
+
+    assert_equal 1, klass.instance_method(:b=).arity
+    assert_equal 1, klass.instance_method(:c=).arity
+  end
+
   def test_parameters
     klass = @Struct.new(:a)
     assert_equal [], klass.instance_method(:a).parameters
-- 
cgit v1.2.1


--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

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