From a2210274eab85de9fbcf48a6509e8485482a083c Mon Sep 17 00:00:00 2001 From: Jun Hiroe Date: Sun, 30 Jun 2013 02:11:37 +0900 Subject: Refactor mrb_range_eq() func in range.c. --- src/range.c | 30 +++++++++++------------------- 1 file changed, 11 insertions(+), 19 deletions(-) (limited to 'src/range.c') diff --git a/src/range.c b/src/range.c index 7e3e03136..43de0e799 100644 --- a/src/range.c +++ b/src/range.c @@ -152,30 +152,22 @@ 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_obj_equal(mrb, rr->edges->beg, ro->edges->beg) || + !mrb_obj_equal(mrb, rr->edges->end, ro->edges->end) || + rr->excl != ro->excl) { + return mrb_false_value(); + } + return mrb_true_value(); } static int -- cgit v1.2.3 From 85ea2f61449ef42c834aceecddad8cadc61e05ae Mon Sep 17 00:00:00 2001 From: Jun Hiroe Date: Sun, 30 Jun 2013 21:30:22 +0900 Subject: Refactor range_eql() func in rangec.c --- src/range.c | 37 +++++++++++++------------------------ 1 file changed, 13 insertions(+), 24 deletions(-) (limited to 'src/range.c') diff --git a/src/range.c b/src/range.c index 43de0e799..73d532d94 100644 --- a/src/range.c +++ b/src/range.c @@ -377,34 +377,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; - } - 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_obj_equal(mrb, range, obj)) return mrb_true_value(); + if (!mrb_obj_is_kind_of(mrb, obj, RANGE_CLASS)) { + return mrb_false_value(); } + if (mrb_type(obj) != MRB_TT_RANGE) return mrb_false_value(); - return mrb_bool_value(eql_p); + 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_true_value(); } /* 15.2.14.4.15(x) */ -- cgit v1.2.3 From db0eaa6352da470fdeb735403b858738897e3871 Mon Sep 17 00:00:00 2001 From: h2so5 Date: Sun, 30 Jun 2013 23:40:53 +0900 Subject: Fix Range#== --- src/range.c | 4 ++-- test/t/range.rb | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) (limited to 'src/range.c') diff --git a/src/range.c b/src/range.c index 43de0e799..7dd16ad5f 100644 --- a/src/range.c +++ b/src/range.c @@ -162,8 +162,8 @@ mrb_range_eq(mrb_state *mrb, mrb_value range) 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) || + 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(); } diff --git a/test/t/range.rb b/test/t/range.rb index fdf6b415c..e8f57ecd5 100644 --- a/test/t/range.rb +++ b/test/t/range.rb @@ -12,6 +12,7 @@ end assert('Range#==', '15.2.14.4.1') do assert_true (1..10) == (1..10) assert_false (1..10) == (1..100) + assert_true (1..10) == Range.new(1.0, 10.0) end assert('Range#===', '15.2.14.4.2') do -- cgit v1.2.3