diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2012-07-07 08:27:58 -0700 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2012-07-07 08:27:58 -0700 |
| commit | 5b418a37ac770525951c3551421d4917f6ec7ffd (patch) | |
| tree | 25445086702753f80f745c8e505c21876a8548d9 | |
| parent | 7eb86a4aafdf81247bdf17a6806d44b916d8003f (diff) | |
| parent | 312b2c7b160b4eab5a07897d36e5abd8a6748085 (diff) | |
| download | mruby-5b418a37ac770525951c3551421d4917f6ec7ffd.tar.gz mruby-5b418a37ac770525951c3551421d4917f6ec7ffd.zip | |
Merge pull request #352 from monaka/pr-range-check-optimization-array.c
Optimize range check.
| -rw-r--r-- | src/array.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/src/array.c b/src/array.c index 981da7afb..29f58d17e 100644 --- a/src/array.c +++ b/src/array.c @@ -566,9 +566,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 +594,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; |
