summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/proc.c2
-rw-r--r--test/t/proc.rb8
2 files changed, 9 insertions, 1 deletions
diff --git a/src/proc.c b/src/proc.c
index 4cb9ffe18..61524f00c 100644
--- a/src/proc.c
+++ b/src/proc.c
@@ -216,7 +216,7 @@ mrb_proc_arity(mrb_state *mrb, mrb_value self)
ma = MRB_ASPEC_REQ(aspec);
ra = MRB_ASPEC_REST(aspec);
pa = MRB_ASPEC_POST(aspec);
- arity = ra ? -(ma + pa + 1) : ma + pa;
+ arity = ra || MRB_PROC_STRICT_P(p) ? -(ma + pa + 1) : ma + pa;
return mrb_fixnum_value(arity);
}
diff --git a/test/t/proc.rb b/test/t/proc.rb
index 22ccceb68..888b7d56a 100644
--- a/test/t/proc.rb
+++ b/test/t/proc.rb
@@ -36,6 +36,14 @@ assert('Proc#arity', '15.2.17.4.2') do
assert_equal(-3, b)
assert_equal 1, c
assert_equal 1, d
+
+ e = ->(x=0, y){}.arity
+ f = ->((x, y), z=0){}.arity
+ g = ->(x=0){}.arity
+
+ assert_equal(-2, e)
+ assert_equal(-2, f)
+ assert_equal(-1, g)
end
assert('Proc#call', '15.2.17.4.3') do