diff options
author | shyouhei <shyouhei@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2018-01-19 07:16:54 +0000 |
---|---|---|
committer | shyouhei <shyouhei@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2018-01-19 07:16:54 +0000 |
commit | 66bd6ffcbcc2147b2696087266f4f6db8b38cce9 (patch) | |
tree | f61902c6d6c40a577eb76a376466dbdc566553da /array.c | |
parent | 40b95f085653c8cc6a975e8f7a6789832be1e07b (diff) |
svn merge -c -61947 .
Previous commit fails in CI.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61948 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'array.c')
-rw-r--r-- | array.c | 8 |
1 files changed, 5 insertions, 3 deletions
@@ -5064,6 +5064,8 @@ rb_ary_cycle(int argc, VALUE *argv, VALUE ary) return Qnil; } +#define tmpbuf(n, size) rb_str_tmp_new((n)*(size)) +#define tmpbuf_discard(s) (rb_str_resize((s), 0L), RBASIC_SET_CLASS_RAW(s, rb_cString)) #define tmpary(n) rb_ary_tmp_new(n) #define tmpary_discard(a) (ary_discard(a), RBASIC_SET_CLASS_RAW(a, rb_cArray)) @@ -5566,9 +5568,9 @@ rb_ary_product(int argc, VALUE *argv, VALUE ary) { int n = argc+1; /* How many arrays we're operating on */ volatile VALUE t0 = tmpary(n); - volatile VALUE t1 = Qundef; + volatile VALUE t1 = tmpbuf(n, sizeof(int)); VALUE *arrays = RARRAY_PTR(t0); /* The arrays we're computing the product of */ - int *counters = ALLOCV_N(int, t1, n); /* The current position in each one */ + int *counters = (int*)RSTRING_PTR(t1); /* The current position in each one */ VALUE result = Qnil; /* The array we'll be returning, when no block given */ long i,j; long resultlen = 1; @@ -5645,7 +5647,7 @@ rb_ary_product(int argc, VALUE *argv, VALUE ary) } done: tmpary_discard(t0); - ALLOCV_END(t1); + tmpbuf_discard(t1); return NIL_P(result) ? ary : result; } |