diff options
author | mrkn <mrkn@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2010-08-19 03:10:15 +0000 |
---|---|---|
committer | mrkn <mrkn@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2010-08-19 03:10:15 +0000 |
commit | 1d04aedb5a913a3e89bfe50550344dc698c7b3d9 (patch) | |
tree | 13bc0688910605f329870e1488ceef7db797e388 /array.c | |
parent | fee5e4ff5f427ac06b6ffd2891c7ef775324d483 (diff) | |
download | ruby-1d04aedb5a913a3e89bfe50550344dc698c7b3d9.tar.gz |
* array.c (rb_ary_permutation, rb_ary_repeated_permutation, rb_ary_repeated_combination, rb_ary_product): use ary_make_shared_copy instead of ary_make_substitution. [ruby-dev:42067] [Bug #3708]
* test/ruby/test_array.rb (test_product, test_repeated_permutation, test_repeated_combination): append assertions against [Bug #3708].
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@29044 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'array.c')
-rw-r--r-- | array.c | 8 |
1 files changed, 4 insertions, 4 deletions
@@ -4010,7 +4010,7 @@ rb_ary_permutation(int argc, VALUE *argv, VALUE ary) long *p = (long*)RSTRING_PTR(t0); volatile VALUE t1 = tmpbuf(n,sizeof(char)); char *used = (char*)RSTRING_PTR(t1); - VALUE ary0 = ary_make_substitution(ary); /* private defensive copy of ary */ + VALUE ary0 = ary_make_shared_copy(ary); /* private defensive copy of ary */ RBASIC(ary0)->klass = 0; MEMZERO(used, char, n); /* initialize array */ @@ -4180,7 +4180,7 @@ rb_ary_repeated_permutation(VALUE ary, VALUE num) else { /* this is the general case */ volatile VALUE t0 = tmpbuf(r, sizeof(long)); long *p = (long*)RSTRING_PTR(t0); - VALUE ary0 = ary_make_substitution(ary); /* private defensive copy of ary */ + VALUE ary0 = ary_make_shared_copy(ary); /* private defensive copy of ary */ RBASIC(ary0)->klass = 0; rpermute0(n, r, p, 0, ary0); /* compute and yield repeated permutations */ @@ -4266,7 +4266,7 @@ rb_ary_repeated_combination(VALUE ary, VALUE num) else { volatile VALUE t0 = tmpbuf(n, sizeof(long)); long *p = (long*)RSTRING_PTR(t0); - VALUE ary0 = ary_make_substitution(ary); /* private defensive copy of ary */ + VALUE ary0 = ary_make_shared_copy(ary); /* private defensive copy of ary */ RBASIC(ary0)->klass = 0; rcombinate0(len, n, p, 0, n, ary0); /* compute and yield repeated combinations */ @@ -4325,7 +4325,7 @@ rb_ary_product(int argc, VALUE *argv, VALUE ary) /* Make defensive copies of arrays; exit if any is empty */ for (i = 0; i < n; i++) { if (RARRAY_LEN(arrays[i]) == 0) goto done; - arrays[i] = ary_make_substitution(arrays[i]); + arrays[i] = ary_make_shared_copy(arrays[i]); } } else { |