diff options
| author | Yukihiro Matsumoto <[email protected]> | 2012-06-03 17:59:59 +0900 |
|---|---|---|
| committer | Yukihiro Matsumoto <[email protected]> | 2012-06-03 17:59:59 +0900 |
| commit | 80c8908c4e6672670a0fef426baa6e79d1dcd518 (patch) | |
| tree | ae3b028821951061c22e3a65993dff98b273a30c | |
| parent | 4e46abb86914b36e70b5f3ad0826d0b648e9b4ef (diff) | |
| download | mruby-80c8908c4e6672670a0fef426baa6e79d1dcd518.tar.gz mruby-80c8908c4e6672670a0fef426baa6e79d1dcd518.zip | |
remove mrb_exec_recursive
| -rw-r--r-- | src/range.c | 33 | ||||
| -rw-r--r-- | src/struct.c | 57 |
2 files changed, 30 insertions, 60 deletions
diff --git a/src/range.c b/src/range.c index c1fb580b5..b8b1d3926 100644 --- a/src/range.c +++ b/src/range.c @@ -29,9 +29,6 @@ #define RANGE_CLASS (mrb_class_obj_get(mrb, "Range")) -mrb_value mrb_exec_recursive_paired(mrb_state *mrb, mrb_value (*func) (mrb_state *, mrb_value, mrb_value, int), - mrb_value obj, mrb_value paired_obj, void* arg); - mrb_value mrb_range_new(mrb_state *mrb, mrb_value beg, mrb_value end, int excl) { @@ -397,23 +394,6 @@ range_inspect(mrb_state *mrb, mrb_value range) return inspect_range(mrb, range, range, 0); } -static mrb_value -recursive_eql(mrb_state *mrb, mrb_value range, mrb_value obj, int recur) -{ - struct RRange *r = mrb_range_ptr(range); - struct RRange *o = mrb_range_ptr(obj); - - if (recur) return mrb_true_value(); /* Subtle! */ - if (!mrb_eql(mrb, r->edges->beg, o->edges->beg)) - return mrb_false_value(); - if (!mrb_eql(mrb, r->edges->end, o->edges->end)) - return mrb_false_value(); - - if (r->excl != o->excl) - return mrb_false_value(); - return mrb_true_value(); -} - /* 15.2.14.4.14(x) */ /* * call-seq: @@ -433,13 +413,24 @@ static mrb_value range_eql(mrb_state *mrb, mrb_value range) { mrb_value obj; + struct RRange *r, *o; mrb_get_args(mrb, "o", &obj); 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(); - return mrb_exec_recursive_paired(mrb, recursive_eql, range, obj, &obj); + + r = mrb_range_ptr(range); + if (obj.tt != MRB_TT_RANGE) return mrb_false_value(); + o = mrb_range_ptr(obj); + if (!mrb_eql(mrb, r->edges->beg, o->edges->beg)) + return mrb_false_value(); + if (!mrb_eql(mrb, r->edges->end, o->edges->end)) + return mrb_false_value(); + if (r->excl != o->excl) + return mrb_false_value(); + return mrb_true_value(); } /* 15.2.14.4.15(x) */ diff --git a/src/struct.c b/src/struct.c index 9f7010e0b..e9266ad17 100644 --- a/src/struct.c +++ b/src/struct.c @@ -15,10 +15,6 @@ #ifdef INCLUDE_REGEXP #include "encoding.h" #endif -mrb_sym rb_frame_this_func(mrb_state *mrb); -mrb_sym mrb_frame_callee(mrb_state *mrb); -mrb_value mrb_exec_recursive_paired(mrb_state *mrb, mrb_value (*func) (mrb_state *, mrb_value, mrb_value, int), - mrb_value obj, mrb_value paired_obj, void* arg); #include "mruby/numeric.h" #include "mruby/hash.h" @@ -688,22 +684,6 @@ mrb_struct_aset(mrb_state *mrb, mrb_value s) return RSTRUCT_PTR(s)[i] = val; } -static mrb_value -recursive_equal(mrb_state *mrb, mrb_value s, mrb_value s2, int recur) -{ - mrb_value *ptr, *ptr2; - long i, len; - - if (recur) return mrb_true_value(); /* Subtle! */ - ptr = RSTRUCT_PTR(s); - ptr2 = RSTRUCT_PTR(s2); - len = RSTRUCT_LEN(s); - for (i=0; i<len; i++) { - if (!mrb_equal(mrb, ptr[i], ptr2[i])) return mrb_false_value(); - } - return mrb_true_value(); -} - /* 15.2.18.4.1 */ /* * call-seq: @@ -726,6 +706,8 @@ static mrb_value mrb_struct_equal(mrb_state *mrb, mrb_value s) { mrb_value s2; + mrb_value *ptr, *ptr2; + long i, len; mrb_get_args(mrb, "o", &s2); if (mrb_obj_equal(mrb, s, s2)) return mrb_true_value(); @@ -734,24 +716,13 @@ mrb_struct_equal(mrb_state *mrb, mrb_value s) if (RSTRUCT_LEN(s) != RSTRUCT_LEN(s2)) { mrb_bug("inconsistent struct"); /* should never happen */ } - - return mrb_exec_recursive_paired(mrb, recursive_equal, s, s2, (void*)0); -} - -static mrb_value -recursive_eql(mrb_state *mrb, mrb_value s, mrb_value s2, int recur) -{ - mrb_value *ptr, *ptr2; - long i, len; - - if (recur) return mrb_true_value(); /* Subtle! */ - ptr = RSTRUCT_PTR(s); - ptr2 = RSTRUCT_PTR(s2); - len = RSTRUCT_LEN(s); - for (i=0; i<len; i++) { - if (!mrb_eql(mrb, ptr[i], ptr2[i])) return mrb_false_value(); - } - return mrb_true_value(); + ptr = RSTRUCT_PTR(s); + ptr2 = RSTRUCT_PTR(s2); + len = RSTRUCT_LEN(s); + for (i=0; i<len; i++) { + if (!mrb_equal(mrb, ptr[i], ptr2[i])) return mrb_false_value(); + } + return mrb_true_value(); } /* 15.2.18.4.12(x) */ @@ -766,6 +737,8 @@ static mrb_value mrb_struct_eql(mrb_state *mrb, mrb_value s) { mrb_value s2; + mrb_value *ptr, *ptr2; + long i, len; mrb_get_args(mrb, "o", &s2); if (mrb_obj_equal(mrb, s, s2)) return mrb_true_value(); @@ -775,7 +748,13 @@ mrb_struct_eql(mrb_state *mrb, mrb_value s) mrb_bug("inconsistent struct"); /* should never happen */ } - return mrb_exec_recursive_paired(mrb, recursive_eql, s, s2, (void*)0); + ptr = RSTRUCT_PTR(s); + ptr2 = RSTRUCT_PTR(s2); + len = RSTRUCT_LEN(s); + for (i=0; i<len; i++) { + if (!mrb_eql(mrb, ptr[i], ptr2[i])) return mrb_false_value(); + } + return mrb_true_value(); } /* |
