diff options
| author | Yukihiro Matz Matsumoto <[email protected]> | 2013-03-19 11:58:31 +0900 |
|---|---|---|
| committer | Yukihiro Matz Matsumoto <[email protected]> | 2013-03-19 11:58:31 +0900 |
| commit | dc2e1c1ce8ae6da16532337b85ea1064db8d0624 (patch) | |
| tree | fc389b0c1bc23dea76e92c5747a8905a31966844 /src/array.c | |
| parent | 5217d889633fc556458b2327c30ba483e02ce6d7 (diff) | |
| parent | 6ab9c389c43bdad2311b384852a1f448e56a527c (diff) | |
| download | mruby-dc2e1c1ce8ae6da16532337b85ea1064db8d0624.tar.gz mruby-dc2e1c1ce8ae6da16532337b85ea1064db8d0624.zip | |
Merge branch 'pr-add-new-api-mrb_true_or_false_value' of https://github.com/monaka/mruby into monaka-pr-add-new-api-mrb_true_or_false_value
Diffstat (limited to 'src/array.c')
| -rw-r--r-- | src/array.c | 58 |
1 files changed, 38 insertions, 20 deletions
diff --git a/src/array.c b/src/array.c index e704aa2c4..82c4625bd 100644 --- a/src/array.c +++ b/src/array.c @@ -878,7 +878,7 @@ mrb_ary_empty_p(mrb_state *mrb, mrb_value self) { struct RArray *a = mrb_ary_ptr(self); - return ((a->len == 0)? mrb_true_value(): mrb_false_value()); + return mrb_true_or_false_value(a->len == 0); } mrb_value @@ -1059,31 +1059,39 @@ static mrb_value mrb_ary_equal(mrb_state *mrb, mrb_value ary1) { mrb_value ary2; + mrb_bool equal_p; mrb_get_args(mrb, "o", &ary2); - if (mrb_obj_equal(mrb, ary1, ary2)) return mrb_true_value(); - if (mrb_special_const_p(ary2)) return mrb_false_value(); - if (!mrb_array_p(ary2)) { + if (mrb_obj_equal(mrb, ary1, ary2)) { + equal_p = 1; + } + else if (mrb_special_const_p(ary2)) { + equal_p = 0; + } + else if (!mrb_array_p(ary2)) { if (!mrb_respond_to(mrb, ary2, mrb_intern(mrb, "to_ary"))) { - return mrb_false_value(); - } - if (mrb_equal(mrb, ary2, ary1)){ - return mrb_true_value(); + equal_p = 0; } else { - return mrb_false_value(); + equal_p = mrb_equal(mrb, ary2, ary1); } } - if (RARRAY_LEN(ary1) != RARRAY_LEN(ary2)) return mrb_false_value(); + else if (RARRAY_LEN(ary1) != RARRAY_LEN(ary2)) { + equal_p = 0; + } else { mrb_int i; + equal_p = 1; for (i=0; i<RARRAY_LEN(ary1); i++) { - if (!mrb_equal(mrb, ary_elt(ary1, i), ary_elt(ary2, i))) - return mrb_false_value(); + if (!mrb_equal(mrb, ary_elt(ary1, i), ary_elt(ary2, i))) { + equal_p = 0; + break; + } } - return mrb_true_value(); } + + return mrb_true_or_false_value(equal_p); } /* 15.2.12.5.34 (x) */ @@ -1099,20 +1107,30 @@ static mrb_value mrb_ary_eql(mrb_state *mrb, mrb_value ary1) { mrb_value ary2; + mrb_bool eql_p; mrb_get_args(mrb, "o", &ary2); - if (mrb_obj_equal(mrb, ary1, ary2)) return mrb_true_value(); - if (!mrb_array_p(ary2)) return mrb_false_value(); - if (RARRAY_LEN(ary1) != RARRAY_LEN(ary2)) return mrb_false_value(); + if (mrb_obj_equal(mrb, ary1, ary2)) { + eql_p = 1; + } + else if (!mrb_array_p(ary2)) { + eql_p = 0; + } + else if (RARRAY_LEN(ary1) != RARRAY_LEN(ary2)) { + eql_p = 0; + } else { mrb_int i; - + eql_p = 1; for (i=0; i<RARRAY_LEN(ary1); i++) { - if (!mrb_eql(mrb, ary_elt(ary1, i), ary_elt(ary2, i))) - return mrb_false_value(); + if (!mrb_eql(mrb, ary_elt(ary1, i), ary_elt(ary2, i))) { + eql_p = 0; + break; + } } - return mrb_true_value(); } + + return mrb_true_or_false_value(eql_p); } void |
