summaryrefslogtreecommitdiffhomepage
path: root/src/array.c
diff options
context:
space:
mode:
authorYukihiro Matsumoto <[email protected]>2012-07-09 11:42:24 +0900
committerYukihiro Matsumoto <[email protected]>2012-07-09 11:42:24 +0900
commitc3201370554a5d48c59f97daf61a725310d4bbbc (patch)
tree061650ef60a9d2b30929f1b3782911ea45f53e53 /src/array.c
parent0e2a81740a284e823894ec5b1d804e282df15b7e (diff)
parent8cef93d228ec5d2cb57b84cf0ae3945363080546 (diff)
downloadmruby-c3201370554a5d48c59f97daf61a725310d4bbbc.tar.gz
mruby-c3201370554a5d48c59f97daf61a725310d4bbbc.zip
Merge branch 'master' of github.com:mruby/mruby
Diffstat (limited to 'src/array.c')
-rw-r--r--src/array.c15
1 files changed, 9 insertions, 6 deletions
diff --git a/src/array.c b/src/array.c
index 981da7afb..d65a99cc4 100644
--- a/src/array.c
+++ b/src/array.c
@@ -46,8 +46,7 @@ ary_new_capa(mrb_state *mrb, int capa)
}
a = (struct RArray*)mrb_obj_alloc(mrb, MRB_TT_ARRAY, mrb->array_class);
- a->ptr = mrb_malloc(mrb, blen);
- memset(a->ptr, 0, blen);
+ a->ptr = mrb_calloc(mrb, blen, 1);
a->aux.capa = capa;
a->len = 0;
@@ -566,9 +565,11 @@ mrb_ary_set(mrb_state *mrb, mrb_value ary, mrb_int n, mrb_value val) /* rb_ary_s
ary_modify(mrb, a);
/* range check */
- if (n < 0) n += a->len;
if (n < 0) {
- mrb_raise(mrb, E_INDEX_ERROR, "index %ld out of array", n - a->len);
+ n += a->len;
+ if (n < 0) {
+ mrb_raise(mrb, E_INDEX_ERROR, "index %ld out of array", n - a->len);
+ }
}
if (a->len <= (int)n) {
if (a->aux.capa <= (int)n)
@@ -592,9 +593,11 @@ mrb_ary_splice(mrb_state *mrb, mrb_value ary, mrb_int head, mrb_int len, mrb_val
ary_modify(mrb, a);
/* range check */
- if (head < 0) head += a->len;
if (head < 0) {
- mrb_raise(mrb, E_INDEX_ERROR, "index is out of array");
+ head += a->len;
+ if (head < 0) {
+ mrb_raise(mrb, E_INDEX_ERROR, "index is out of array");
+ }
}
tail = head + len;