From b34e24b07d2ec762e9fdb483b870cdc9c02c6ba2 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Thu, 8 May 2014 11:06:41 +0900 Subject: use mrb_field_write_barrier_value() in array.c --- src/array.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/array.c b/src/array.c index 7e9c0139d..d008e52cf 100644 --- a/src/array.c +++ b/src/array.c @@ -401,7 +401,7 @@ mrb_ary_push(mrb_state *mrb, mrb_value ary, mrb_value elem) if (a->len == a->aux.capa) ary_expand_capa(mrb, a, a->len + 1); a->ptr[a->len++] = elem; - mrb_write_barrier(mrb, (struct RBasic*)a); + mrb_field_write_barrier_value(mrb, (struct RBasic*)a, elem); } static mrb_value @@ -484,7 +484,7 @@ mrb_ary_unshift(mrb_state *mrb, mrb_value self, mrb_value item) a->ptr[0] = item; } a->len++; - mrb_write_barrier(mrb, (struct RBasic*)a); + mrb_field_write_barrier_value(mrb, (struct RBasic*)a, item); return self; } @@ -511,7 +511,9 @@ mrb_ary_unshift_m(mrb_state *mrb, mrb_value self) } array_copy(a->ptr, vals, len); a->len += len; - mrb_write_barrier(mrb, (struct RBasic*)a); + while (len--) { + mrb_field_write_barrier_value(mrb, (struct RBasic*)a, vals[len]); + } return self; } @@ -549,7 +551,7 @@ mrb_ary_set(mrb_state *mrb, mrb_value ary, mrb_int n, mrb_value val) } a->ptr[n] = val; - mrb_write_barrier(mrb, (struct RBasic*)a); + mrb_field_write_barrier_value(mrb, (struct RBasic*)a, val); } mrb_value @@ -601,6 +603,7 @@ mrb_ary_splice(mrb_state *mrb, mrb_value ary, mrb_int head, mrb_int len, mrb_val for (i = 0; i < argc; i++) { *(a->ptr + head + i) = *(argv + i); + mrb_field_write_barrier_value(mrb, (struct RBasic*)a, argv[i]); } a->len = size; -- cgit v1.2.3