diff options
| author | Daniel Bovensiepen <[email protected]> | 2013-06-15 03:53:50 +0800 |
|---|---|---|
| committer | Daniel Bovensiepen <[email protected]> | 2013-06-15 03:53:50 +0800 |
| commit | 373122a299ebec890cfaa95ee41fde221ac6a543 (patch) | |
| tree | 346e79bb8a30a4e0b4102babf7dd9407beb36979 /src/range.c | |
| parent | ad07d41bd1b42fe7d23e04361839f511c5f9cd7f (diff) | |
| parent | 961cd408a86580c4d428f56153da00fd46738e35 (diff) | |
| download | mruby-373122a299ebec890cfaa95ee41fde221ac6a543.tar.gz mruby-373122a299ebec890cfaa95ee41fde221ac6a543.zip | |
Merge upstream
Diffstat (limited to 'src/range.c')
| -rw-r--r-- | src/range.c | 80 |
1 files changed, 29 insertions, 51 deletions
diff --git a/src/range.c b/src/range.c index 10a03ddb4..1d6519a6e 100644 --- a/src/range.c +++ b/src/range.c @@ -152,33 +152,25 @@ mrb_range_eq(mrb_state *mrb, mrb_value range) struct RRange *rr; struct RRange *ro; mrb_value obj; - mrb_bool eq_p; mrb_get_args(mrb, "o", &obj); - if (mrb_obj_equal(mrb, range, obj)) { - eq_p = 1; - } - else if (!mrb_obj_is_instance_of(mrb, obj, mrb_obj_class(mrb, range))) { /* same class? */ - eq_p = 0; - } - else { - rr = mrb_range_ptr(range); - ro = mrb_range_ptr(obj); - if (!mrb_obj_equal(mrb, rr->edges->beg, ro->edges->beg) || - !mrb_obj_equal(mrb, rr->edges->end, ro->edges->end) || - rr->excl != ro->excl) { - eq_p = 0; - } - else { - eq_p = 1; - } + if (mrb_obj_equal(mrb, range, obj)) return mrb_true_value(); + if (!mrb_obj_is_instance_of(mrb, obj, mrb_obj_class(mrb, range))) { /* same class? */ + return mrb_false_value(); } - return mrb_bool_value(eq_p); + rr = mrb_range_ptr(range); + ro = mrb_range_ptr(obj); + if (!mrb_bool(mrb_funcall(mrb, rr->edges->beg, "==", 1, ro->edges->beg)) || + !mrb_bool(mrb_funcall(mrb, rr->edges->end, "==", 1, ro->edges->end)) || + rr->excl != ro->excl) { + return mrb_false_value(); + } + return mrb_true_value(); } -static int +static mrb_bool r_le(mrb_state *mrb, mrb_value a, mrb_value b) { mrb_value r = mrb_funcall(mrb, a, "<=>", 1, b); /* compare result */ @@ -192,7 +184,7 @@ r_le(mrb_state *mrb, mrb_value a, mrb_value b) return FALSE; } -static int +static mrb_bool r_gt(mrb_state *mrb, mrb_value a, mrb_value b) { mrb_value r = mrb_funcall(mrb, a, "<=>", 1, b); @@ -205,7 +197,7 @@ r_gt(mrb_state *mrb, mrb_value a, mrb_value b) return FALSE; } -static int +static mrb_bool r_ge(mrb_state *mrb, mrb_value a, mrb_value b) { mrb_value r = mrb_funcall(mrb, a, "<=>", 1, b); /* compare result */ @@ -284,10 +276,10 @@ mrb_range_beg_len(mrb_state *mrb, mrb_value range, mrb_int *begp, mrb_int *lenp, if (beg < 0) { beg += len; - if (beg < 0) goto out_of_range; + if (beg < 0) return FALSE; } - if (beg > len) goto out_of_range; + if (beg > len) return FALSE; if (end > len) end = len; if (end < 0) end += len; @@ -298,9 +290,6 @@ mrb_range_beg_len(mrb_state *mrb, mrb_value range, mrb_int *begp, mrb_int *lenp, *begp = beg; *lenp = len; return TRUE; - -out_of_range: - return FALSE; } /* 15.2.14.4.12(x) */ @@ -385,34 +374,23 @@ range_eql(mrb_state *mrb, mrb_value range) { mrb_value obj; struct RRange *r, *o; - mrb_bool eql_p; mrb_get_args(mrb, "o", &obj); - if (mrb_obj_equal(mrb, range, obj)) { - eql_p = 1; - } - else if (!mrb_obj_is_kind_of(mrb, obj, RANGE_CLASS)) { - eql_p = 0; + + if (mrb_obj_equal(mrb, range, obj)) return mrb_true_value(); + if (!mrb_obj_is_kind_of(mrb, obj, RANGE_CLASS)) { + return mrb_false_value(); } - else { - r = mrb_range_ptr(range); - if (mrb_type(obj) != MRB_TT_RANGE) { - eql_p = 0; - } - else { - o = mrb_range_ptr(obj); - if (!mrb_eql(mrb, r->edges->beg, o->edges->beg) || - !mrb_eql(mrb, r->edges->end, o->edges->end) || - (r->excl != o->excl)) { - eql_p = 0; - } - else { - eql_p = 1; - } - } + if (mrb_type(obj) != MRB_TT_RANGE) return mrb_false_value(); + + r = mrb_range_ptr(range); + o = mrb_range_ptr(obj); + if (!mrb_eql(mrb, r->edges->beg, o->edges->beg) || + !mrb_eql(mrb, r->edges->end, o->edges->end) || + (r->excl != o->excl)) { + return mrb_false_value(); } - - return mrb_bool_value(eql_p); + return mrb_true_value(); } /* 15.2.14.4.15(x) */ |
