From a24eeee5567a14841b37d9a3428e14e4f3c45c07 Mon Sep 17 00:00:00 2001 From: Koichi Sasada Date: Sat, 13 Nov 2021 02:15:09 +0900 Subject: [PATCH] Use `Primitive.mandatory_only?` for `Array#sample` --- array.c | 8 +++++++- array.rb | 8 +++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/array.c b/array.c index be09151f43..240fb7e0f5 100644 --- a/array.c +++ b/array.c @@ -6337,7 +6337,7 @@ rb_ary_shuffle(rb_execution_context_t *ec, VALUE ary, VALUE randgen) } static VALUE -rb_ary_sample(rb_execution_context_t *ec, VALUE ary, VALUE randgen, VALUE nv, VALUE to_array) +ary_sample(rb_execution_context_t *ec, VALUE ary, VALUE randgen, VALUE nv, VALUE to_array) { VALUE result; long n, len, i, j, k, idx[10]; @@ -6466,6 +6466,12 @@ rb_ary_sample(rb_execution_context_t *ec, VALUE ary, VALUE randgen, VALUE nv, VA return result; } +static VALUE +ary_sample0(rb_execution_context_t *ec, VALUE ary) +{ + return ary_sample(ec, ary, rb_cRandom, Qfalse, Qfalse); +} + static VALUE rb_ary_cycle_size(VALUE self, VALUE args, VALUE eobj) { diff --git a/array.rb b/array.rb index 05ce60773e..b9fa9844e6 100644 --- a/array.rb +++ b/array.rb @@ -58,6 +58,12 @@ class Array # a.sample(random: Random.new(1)) #=> 6 # a.sample(4, random: Random.new(1)) #=> [6, 10, 9, 2] def sample(n = (ary = false), random: Random) - Primitive.rb_ary_sample(random, n, ary) + if Primitive.mandatory_only? + # Primitive.cexpr! %{ rb_ary_sample(self, rb_cRandom, Qfalse, Qfalse) } + Primitive.ary_sample0 + else + # Primitive.cexpr! %{ rb_ary_sample(self, random, n, ary) } + Primitive.ary_sample(random, n, ary) + end end end