summaryrefslogtreecommitdiffhomepage
path: root/mrbgems
diff options
context:
space:
mode:
Diffstat (limited to 'mrbgems')
-rw-r--r--mrbgems/mruby-struct/src/struct.c67
-rw-r--r--mrbgems/mruby-time/src/time.c18
2 files changed, 52 insertions, 33 deletions
diff --git a/mrbgems/mruby-struct/src/struct.c b/mrbgems/mruby-struct/src/struct.c
index b1ee9579f..f8f170cf6 100644
--- a/mrbgems/mruby-struct/src/struct.c
+++ b/mrbgems/mruby-struct/src/struct.c
@@ -691,21 +691,34 @@ mrb_struct_equal(mrb_state *mrb, mrb_value s)
mrb_value s2;
mrb_value *ptr, *ptr2;
mrb_int i, len;
+ mrb_bool equal_p;
mrb_get_args(mrb, "o", &s2);
- if (mrb_obj_equal(mrb, s, s2)) return mrb_true_value();
- if (!strcmp(mrb_class_name(mrb, mrb_obj_class(mrb, s)), "Struct")) return mrb_false_value();
- if (mrb_obj_class(mrb, s) != mrb_obj_class(mrb, s2)) return mrb_false_value();
- if (RSTRUCT_LEN(s) != RSTRUCT_LEN(s2)) {
+ if (mrb_obj_equal(mrb, s, s2)) {
+ equal_p = 1;
+ }
+ else if (!strcmp(mrb_class_name(mrb, mrb_obj_class(mrb, s)), "Struct") ||
+ mrb_obj_class(mrb, s) != mrb_obj_class(mrb, s2)) {
+ equal_p = 0;
+ }
+ else if (RSTRUCT_LEN(s) != RSTRUCT_LEN(s2)) {
mrb_bug("inconsistent struct"); /* should never happen */
+ equal_p = 0; /* This substuture is just to suppress warnings. never called. */
}
- 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();
+ else {
+ ptr = RSTRUCT_PTR(s);
+ ptr2 = RSTRUCT_PTR(s2);
+ len = RSTRUCT_LEN(s);
+ equal_p = 1;
+ for (i=0; i<len; i++) {
+ if (!mrb_equal(mrb, ptr[i], ptr2[i])) {
+ equal_p = 0;
+ break;
+ }
+ }
}
- return mrb_true_value();
+
+ return mrb_true_or_false_value(equal_p);
}
/* 15.2.18.4.12(x) */
@@ -722,22 +735,34 @@ mrb_struct_eql(mrb_state *mrb, mrb_value s)
mrb_value s2;
mrb_value *ptr, *ptr2;
mrb_int i, len;
+ mrb_bool eql_p;
mrb_get_args(mrb, "o", &s2);
- if (mrb_obj_equal(mrb, s, s2)) return mrb_true_value();
- if (strcmp(mrb_class_name(mrb, mrb_obj_class(mrb, s2)), "Struct")) return mrb_false_value();
- if (mrb_obj_class(mrb, s) != mrb_obj_class(mrb, s2)) return mrb_false_value();
- if (RSTRUCT_LEN(s) != RSTRUCT_LEN(s2)) {
+ if (mrb_obj_equal(mrb, s, s2)) {
+ eql_p = 1;
+ }
+ else if (strcmp(mrb_class_name(mrb, mrb_obj_class(mrb, s2)), "Struct") ||
+ mrb_obj_class(mrb, s) != mrb_obj_class(mrb, s2)) {
+ eql_p = 0;
+ }
+ else if (RSTRUCT_LEN(s) != RSTRUCT_LEN(s2)) {
mrb_bug("inconsistent struct"); /* should never happen */
+ eql_p = 0; /* This substuture is just to suppress warnings. never called. */
}
-
- 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();
+ else {
+ ptr = RSTRUCT_PTR(s);
+ ptr2 = RSTRUCT_PTR(s2);
+ len = RSTRUCT_LEN(s);
+ eql_p = 1;
+ for (i=0; i<len; i++) {
+ if (!mrb_eql(mrb, ptr[i], ptr2[i])) {
+ eql_p = 0;
+ break;
+ }
+ }
}
- return mrb_true_value();
+
+ return mrb_true_or_false_value(eql_p);
}
/*
diff --git a/mrbgems/mruby-time/src/time.c b/mrbgems/mruby-time/src/time.c
index 524077941..075f234b5 100644
--- a/mrbgems/mruby-time/src/time.c
+++ b/mrbgems/mruby-time/src/time.c
@@ -86,11 +86,6 @@ timegm(struct tm *tm)
* second level. Also, there are only 2 timezones, namely UTC and LOCAL.
*/
-#ifndef mrb_bool_value
-#define mrb_bool_value(val) ((val) ? mrb_true_value() : mrb_false_value())
-#endif
-
-
enum mrb_timezone {
MRB_TIMEZONE_NONE = 0,
MRB_TIMEZONE_UTC = 1,
@@ -300,15 +295,14 @@ mrb_time_eq(mrb_state *mrb, mrb_value self)
{
mrb_value other;
struct mrb_time *tm1, *tm2;
+ mrb_bool eq_p;
mrb_get_args(mrb, "o", &other);
tm1 = (struct mrb_time *)mrb_get_datatype(mrb, self, &mrb_time_type);
tm2 = (struct mrb_time *)mrb_get_datatype(mrb, other, &mrb_time_type);
- if (!tm1 || !tm2) return mrb_false_value();
- if (tm1->sec == tm2->sec && tm1->usec == tm2->usec) {
- return mrb_true_value();
- }
- return mrb_false_value();
+ eq_p = tm1 && tm2 && tm1->sec == tm2->sec && tm1->usec == tm2->usec;
+
+ return mrb_true_or_false_value(eq_p);
}
static mrb_value
@@ -465,7 +459,7 @@ mrb_time_dstp(mrb_state *mrb, mrb_value self)
tm = (struct mrb_time *)mrb_get_datatype(mrb, self, &mrb_time_type);
if (!tm) return mrb_nil_value();
- return mrb_bool_value(tm->datetime.tm_isdst);
+ return mrb_true_or_false_value(tm->datetime.tm_isdst);
}
/* 15.2.19.7.8 */
@@ -684,7 +678,7 @@ mrb_time_utcp(mrb_state *mrb, mrb_value self)
struct mrb_time *tm;
tm = (struct mrb_time *)mrb_get_datatype(mrb, self, &mrb_time_type);
if (!tm) return mrb_nil_value();
- return mrb_bool_value(tm->timezone == MRB_TIMEZONE_UTC);
+ return mrb_true_or_false_value(tm->timezone == MRB_TIMEZONE_UTC);
}