summaryrefslogtreecommitdiffhomepage
path: root/src/range.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/range.c')
-rw-r--r--src/range.c24
1 files changed, 9 insertions, 15 deletions
diff --git a/src/range.c b/src/range.c
index 2cdc34f5c..2e9ec26ed 100644
--- a/src/range.c
+++ b/src/range.c
@@ -10,10 +10,6 @@
#include "mruby/string.h"
#include <string.h>
-#ifndef OTHER
-#define OTHER 2
-#endif
-
#define RANGE_CLASS (mrb_class_obj_get(mrb, "Range"))
static void
@@ -274,12 +270,14 @@ mrb_range_each(mrb_state *mrb, mrb_value range)
}
mrb_int
-mrb_range_beg_len(mrb_state *mrb, mrb_value range, mrb_int *begp, mrb_int *lenp, mrb_int len, mrb_int err)
+mrb_range_beg_len(mrb_state *mrb, mrb_value range, mrb_int *begp, mrb_int *lenp, mrb_int len)
{
mrb_int beg, end, b, e;
struct RRange *r = mrb_range_ptr(range);
- if (mrb_type(range) != MRB_TT_RANGE) return FALSE;
+ if (mrb_type(range) != MRB_TT_RANGE) {
+ mrb_raise(mrb, E_TYPE_ERROR, "expected Range.");
+ }
beg = b = mrb_fixnum(r->edges->beg);
end = e = mrb_fixnum(r->edges->end);
@@ -288,10 +286,10 @@ mrb_range_beg_len(mrb_state *mrb, mrb_value range, mrb_int *begp, mrb_int *lenp,
beg += len;
if (beg < 0) goto out_of_range;
}
- if (err == 0 || err == 2) {
- if (beg > len) goto out_of_range;
- if (end > len) end = len;
- }
+
+ if (beg > len) goto out_of_range;
+ if (end > len) end = len;
+
if (end < 0) end += len;
if (!r->excl && end < len) end++; /* include end point */
len = end - beg;
@@ -302,11 +300,7 @@ mrb_range_beg_len(mrb_state *mrb, mrb_value range, mrb_int *begp, mrb_int *lenp,
return TRUE;
out_of_range:
- if (err) {
- mrb_raisef(mrb, E_RANGE_ERROR, "%ld..%s%ld out of range",
- b, r->excl? "." : "", e);
- }
- return OTHER;
+ return FALSE;
}
/* 15.2.14.4.12(x) */