Skip to content

Commit

Permalink
* array.c (ary_memfill): added.
Browse files Browse the repository at this point in the history
* array.c (rb_ary_initialize): use ary_memfill().
* array.c (rb_ary_fill): ditto.
* array.c (rb_ary_slice_bang): use RARRAY_RAWPTR() because
  this code creates no new references.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42105 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
  • Loading branch information
ko1 committed Jul 22, 2013
1 parent 4132ac3 commit 8eb0a3c
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 8 deletions.
11 changes: 11 additions & 0 deletions ChangeLog
Original file line number Diff line number Diff line change
@@ -1,3 +1,14 @@
Mon Jul 22 12:58:18 2013 Koichi Sasada <ko1@atdot.net>

* array.c (ary_memfill): added.

* array.c (rb_ary_initialize): use ary_memfill().

* array.c (rb_ary_fill): ditto.

* array.c (rb_ary_slice_bang): use RARRAY_RAWPTR() because
this code creates no new references.

Mon Jul 22 10:09:46 2013 Koichi Sasada <ko1@atdot.net>

* gc.c (gc_slot_sweep): need to add empty RVALUE as freeobj.
Expand Down
20 changes: 12 additions & 8 deletions array.c
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,15 @@ memfill(register VALUE *mem, register long size, register VALUE val)
}
}

static void
ary_memfill(VALUE ary, long beg, long size, VALUE val)
{
RARRAY_PTR_USE(ary, ptr, {
memfill(ptr + beg, size, val);
OBJ_WRITTEN(ary, Qundef, val);
});
}

static void
ary_memcpy(VALUE ary, long beg, long argc, const VALUE *argv)
{
Expand Down Expand Up @@ -787,10 +796,7 @@ rb_ary_initialize(int argc, VALUE *argv, VALUE ary)
}
}
else {
RARRAY_PTR_USE(ary, ptr, {
memfill((VALUE *)ptr, len, val);
});
OBJ_WRITTEN(ary, Qundef, val);
ary_memfill(ary, 0, len, val);
ARY_SET_LEN(ary, len);
}
return ary;
Expand Down Expand Up @@ -2999,7 +3005,7 @@ rb_ary_slice_bang(int argc, VALUE *argv, VALUE ary)
len = orig_len - pos;
}
if (len == 0) return rb_ary_new2(0);
arg2 = rb_ary_new4(len, RARRAY_PTR(ary)+pos);
arg2 = rb_ary_new4(len, RARRAY_RAWPTR(ary)+pos);
RBASIC_SET_CLASS(arg2, rb_obj_class(ary));
rb_ary_splice(ary, pos, len, Qundef);
return arg2;
Expand Down Expand Up @@ -3372,7 +3378,6 @@ rb_ary_fill(int argc, VALUE *argv, VALUE ary)
{
VALUE item, arg1, arg2;
long beg = 0, end = 0, len = 0;
VALUE *p;
int block_p = FALSE;

if (rb_block_given_p()) {
Expand Down Expand Up @@ -3429,8 +3434,7 @@ rb_ary_fill(int argc, VALUE *argv, VALUE ary)
}
}
else {
p = RARRAY_PTR(ary) + beg;
memfill(p, len, item);
ary_memfill(ary, beg, len, item);
}
return ary;
}
Expand Down

0 comments on commit 8eb0a3c

Please sign in to comment.