* array.c (rb_ary_shuffle_bang): use RARRAY_PTR_USE() without WB
because there are not new relations. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43563 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
cf0838f414
commit
c2f3e600d0
@ -1,3 +1,8 @@
|
|||||||
|
Thu Nov 7 11:06:05 2013 Masaki Matsushita <glass.saga@gmail.com>
|
||||||
|
|
||||||
|
* array.c (rb_ary_shuffle_bang): use RARRAY_PTR_USE() without WB
|
||||||
|
because there are not new relations.
|
||||||
|
|
||||||
Thu Nov 7 10:34:12 2013 Masaki Matsushita <glass.saga@gmail.com>
|
Thu Nov 7 10:34:12 2013 Masaki Matsushita <glass.saga@gmail.com>
|
||||||
|
|
||||||
* array.c (rb_ary_sample): use rb_ary_dup().
|
* array.c (rb_ary_sample): use rb_ary_dup().
|
||||||
|
13
array.c
13
array.c
@ -4443,28 +4443,27 @@ static VALUE sym_random;
|
|||||||
static VALUE
|
static VALUE
|
||||||
rb_ary_shuffle_bang(int argc, VALUE *argv, VALUE ary)
|
rb_ary_shuffle_bang(int argc, VALUE *argv, VALUE ary)
|
||||||
{
|
{
|
||||||
VALUE *ptr, opts, *snap_ptr, randgen = rb_cRandom;
|
VALUE opts, randgen = rb_cRandom;
|
||||||
long i, snap_len;
|
long i, len;
|
||||||
|
|
||||||
if (OPTHASH_GIVEN_P(opts)) {
|
if (OPTHASH_GIVEN_P(opts)) {
|
||||||
randgen = rb_hash_lookup2(opts, sym_random, randgen);
|
randgen = rb_hash_lookup2(opts, sym_random, randgen);
|
||||||
}
|
}
|
||||||
rb_check_arity(argc, 0, 0);
|
rb_check_arity(argc, 0, 0);
|
||||||
rb_ary_modify(ary);
|
rb_ary_modify(ary);
|
||||||
i = RARRAY_LEN(ary);
|
i = len = RARRAY_LEN(ary);
|
||||||
ptr = RARRAY_PTR(ary);
|
RARRAY_PTR_USE(ary, ptr, {
|
||||||
snap_len = i;
|
|
||||||
snap_ptr = ptr;
|
|
||||||
while (i) {
|
while (i) {
|
||||||
long j = RAND_UPTO(i);
|
long j = RAND_UPTO(i);
|
||||||
VALUE tmp;
|
VALUE tmp;
|
||||||
if (snap_len != RARRAY_LEN(ary) || snap_ptr != RARRAY_PTR(ary)) {
|
if (len != RARRAY_LEN(ary) || ptr != RARRAY_CONST_PTR(ary)) {
|
||||||
rb_raise(rb_eRuntimeError, "modified during shuffle");
|
rb_raise(rb_eRuntimeError, "modified during shuffle");
|
||||||
}
|
}
|
||||||
tmp = ptr[--i];
|
tmp = ptr[--i];
|
||||||
ptr[i] = ptr[j];
|
ptr[i] = ptr[j];
|
||||||
ptr[j] = tmp;
|
ptr[j] = tmp;
|
||||||
}
|
}
|
||||||
|
}); /* WB: no new reference */
|
||||||
return ary;
|
return ary;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user