summaryrefslogtreecommitdiffhomepage
path: root/src/array.c
diff options
context:
space:
mode:
authorDaniel Bovensiepen <[email protected]>2013-06-15 03:53:50 +0800
committerDaniel Bovensiepen <[email protected]>2013-06-15 03:53:50 +0800
commit373122a299ebec890cfaa95ee41fde221ac6a543 (patch)
tree346e79bb8a30a4e0b4102babf7dd9407beb36979 /src/array.c
parentad07d41bd1b42fe7d23e04361839f511c5f9cd7f (diff)
parent961cd408a86580c4d428f56153da00fd46738e35 (diff)
downloadmruby-373122a299ebec890cfaa95ee41fde221ac6a543.tar.gz
mruby-373122a299ebec890cfaa95ee41fde221ac6a543.zip
Merge upstream
Diffstat (limited to 'src/array.c')
-rw-r--r--src/array.c70
1 files changed, 23 insertions, 47 deletions
diff --git a/src/array.c b/src/array.c
index a4a09ec0a..ceda884c0 100644
--- a/src/array.c
+++ b/src/array.c
@@ -19,7 +19,7 @@
#define ARY_DEFAULT_LEN 4
#define ARY_SHRINK_RATIO 5 /* must be larger than 2 */
#define ARY_C_MAX_SIZE (SIZE_MAX / sizeof(mrb_value))
-#define ARY_MAX_SIZE ((ARY_C_MAX_SIZE < (size_t)MRB_INT_MAX) ? (mrb_int)ARY_C_MAX_SIZE : MRB_INT_MAX)
+#define ARY_MAX_SIZE ((ARY_C_MAX_SIZE < (size_t)MRB_INT_MAX) ? (mrb_int)ARY_C_MAX_SIZE : MRB_INT_MAX-1)
static inline mrb_value
ary_elt(mrb_value ary, mrb_int offset)
@@ -40,7 +40,7 @@ ary_new_capa(mrb_state *mrb, mrb_int capa)
if (capa > ARY_MAX_SIZE) {
mrb_raise(mrb, E_ARGUMENT_ERROR, "array size too big");
}
- blen = capa * sizeof(mrb_value) ;
+ blen = capa * sizeof(mrb_value);
if (blen < capa) {
mrb_raise(mrb, E_ARGUMENT_ERROR, "array size too big");
}
@@ -926,7 +926,8 @@ inspect_ary(mrb_state *mrb, mrb_value ary, mrb_value list)
}
if (mrb_array_p(RARRAY_PTR(ary)[i])) {
s = inspect_ary(mrb, RARRAY_PTR(ary)[i], list);
- } else {
+ }
+ else {
s = mrb_inspect(mrb, RARRAY_PTR(ary)[i]);
}
mrb_str_buf_cat(mrb, arystr, RSTRING_PTR(s), RSTRING_LEN(s));
@@ -1056,39 +1057,26 @@ static mrb_value
mrb_ary_equal(mrb_state *mrb, mrb_value ary1)
{
mrb_value ary2;
- mrb_bool equal_p;
+ mrb_int i;
mrb_get_args(mrb, "o", &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_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_respond_to(mrb, ary2, mrb_intern2(mrb, "to_ary", 6))) {
- equal_p = 0;
+ return mrb_false_value();
}
else {
- equal_p = mrb_equal(mrb, ary2, ary1);
+ return mrb_bool_value(mrb_equal(mrb, ary2, ary1));
}
}
- 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))) {
- equal_p = 0;
- break;
- }
+ if (RARRAY_LEN(ary1) != RARRAY_LEN(ary2)) return mrb_false_value();
+ for (i=0; i<RARRAY_LEN(ary1); i++) {
+ if (!mrb_equal(mrb, ary_elt(ary1, i), ary_elt(ary2, i))) {
+ return mrb_false_value();
}
}
-
- return mrb_bool_value(equal_p);
+ return mrb_true_value();
}
/* 15.2.12.5.34 (x) */
@@ -1104,30 +1092,18 @@ static mrb_value
mrb_ary_eql(mrb_state *mrb, mrb_value ary1)
{
mrb_value ary2;
- mrb_bool eql_p;
+ mrb_int i;
mrb_get_args(mrb, "o", &ary2);
- 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))) {
- eql_p = 0;
- break;
- }
+ 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();
+ for (i=0; i<RARRAY_LEN(ary1); i++) {
+ if (!mrb_eql(mrb, ary_elt(ary1, i), ary_elt(ary2, i))) {
+ return mrb_false_value();
}
}
-
- return mrb_bool_value(eql_p);
+ return mrb_true_value();
}
void