summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2014-05-08 11:06:41 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2014-05-08 11:06:41 +0900
commitb34e24b07d2ec762e9fdb483b870cdc9c02c6ba2 (patch)
tree281686773766b84690dbb4829cef65bb845cff77
parent606cb68c16fd48bc29e5329f13d24a1e8eff7930 (diff)
downloadmruby-b34e24b07d2ec762e9fdb483b870cdc9c02c6ba2.tar.gz
mruby-b34e24b07d2ec762e9fdb483b870cdc9c02c6ba2.zip
use mrb_field_write_barrier_value() in array.c
-rw-r--r--src/array.c11
1 files changed, 7 insertions, 4 deletions
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;