diff options
| author | Masaki Muranaka <[email protected]> | 2012-07-07 16:30:52 +0900 |
|---|---|---|
| committer | Masaki Muranaka <[email protected]> | 2012-07-07 16:30:52 +0900 |
| commit | 312b2c7b160b4eab5a07897d36e5abd8a6748085 (patch) | |
| tree | ae3b73e6fcd06cc59e577da7d1a8c645e9544782 /src/array.c | |
| parent | 8268ba2755ec467d100c799dbf53c13f38fda436 (diff) | |
| download | mruby-312b2c7b160b4eab5a07897d36e5abd8a6748085.tar.gz mruby-312b2c7b160b4eab5a07897d36e5abd8a6748085.zip | |
Optimize range check.
Diffstat (limited to 'src/array.c')
| -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; |
