@@ -1331,6 +1331,34 @@ mrb_ary_join_m(mrb_state *mrb, mrb_value ary)
13311331return mrb_ary_join(mrb, ary, sep);
13321332}
133313331334+/*
1335+ * call-seq:
1336+ * ary.to_s -> string
1337+ * ary.inspect -> string
1338+ *
1339+ * Return the contents of this array as a string.
1340+ */
1341+static mrb_value
1342+mrb_ary_to_s(mrb_state *mrb, mrb_value self)
1343+{
1344+mrb->c->ci->mid = MRB_SYM(inspect);
1345+mrb_value ret = mrb_str_new_lit(mrb, "[");
1346+int ai = mrb_gc_arena_save(mrb);
1347+if (mrb_inspect_recursive_p(mrb, self)) {
1348+mrb_str_cat_lit(mrb, ret, "...]");
1349+return ret;
1350+ }
1351+mrb_int len = RARRAY_LEN(self);
1352+for (mrb_int i=0; i<len; i++) {
1353+if (i>0) mrb_str_cat_lit(mrb, ret, ", ");
1354+mrb_str_cat_str(mrb, ret, mrb_inspect(mrb, mrb_ary_ref(mrb, self, i)));
1355+mrb_gc_arena_restore(mrb, ai);
1356+ }
1357+mrb_str_cat_lit(mrb, ret, "]");
1358+1359+return ret;
1360+}
1361+13341362static mrb_value
13351363mrb_ary_eq(mrb_state *mrb, mrb_value ary1)
13361364{
@@ -1409,6 +1437,8 @@ mrb_init_array(mrb_state *mrb)
14091437mrb_define_method(mrb, a, "size", mrb_ary_size, MRB_ARGS_NONE()); /* 15.2.12.5.28 */
14101438mrb_define_method(mrb, a, "slice", mrb_ary_aget, MRB_ARGS_ARG(1,1)); /* 15.2.12.5.29 */
14111439mrb_define_method(mrb, a, "unshift", mrb_ary_unshift_m, MRB_ARGS_ANY()); /* 15.2.12.5.30 */
1440+mrb_define_method(mrb, a, "to_s", mrb_ary_to_s, MRB_ARGS_NONE());
1441+mrb_define_method(mrb, a, "inspect", mrb_ary_to_s, MRB_ARGS_NONE());
1412144214131443mrb_define_method(mrb, a, "__ary_eq", mrb_ary_eq, MRB_ARGS_REQ(1));
14141444mrb_define_method(mrb, a, "__ary_cmp", mrb_ary_cmp, MRB_ARGS_REQ(1));