mruby-io: provide Kernel#p in this gem

To prevent ordering instability when output from mruby-io and Kernel#p
mixed.
This commit is contained in:
Yukihiro "Matz" Matsumoto
2025-05-19 13:31:01 +09:00
parent 65247613b9
commit 18c43c2a5a
2 changed files with 14 additions and 1 deletions
+11
View File
@@ -13,6 +13,17 @@ module Kernel
end
end
private def p(*a)
for e in a
$stdout.write e.inspect
$stdout.write "\n"
end
len = a.size
return nil if len == 0
return a[0] if len == 1
a
end
private def print(...)
$stdout.print(...)
end
+3 -1
View File
@@ -551,6 +551,7 @@ mrb_obj_ceqq(mrb_state *mrb, mrb_value self)
// ISO 15.3.1.3.35 Kernel#print
mrb_value mrb_print_m(mrb_state *mrb, mrb_value self);
#ifndef HAVE_MRUBY_IO_GEM
// ISO 15.3.1.2.9 Kernel.p
// ISO 15.3.1.3.34 Kernel#p
//
@@ -570,6 +571,7 @@ mrb_p_m(mrb_state *mrb, mrb_value self)
if (argc == 1) return argv[0];
return mrb_ary_new_from_values(mrb, argc, argv);
}
#endif
void
mrb_init_kernel(mrb_state *mrb)
@@ -603,8 +605,8 @@ mrb_init_kernel(mrb_state *mrb)
mrb_define_method_id(mrb, krn, MRB_SYM_Q(kind_of), mrb_obj_is_kind_of_m, MRB_ARGS_REQ(1)); /* 15.3.1.3.26 */
mrb_define_method_id(mrb, krn, MRB_SYM_Q(nil), mrb_false, MRB_ARGS_NONE()); /* 15.3.1.3.32 */
mrb_define_method_id(mrb, krn, MRB_SYM(object_id), mrb_obj_id_m, MRB_ARGS_NONE()); /* 15.3.1.3.33 */
mrb_define_private_method_id(mrb, krn, MRB_SYM(p), mrb_p_m, MRB_ARGS_ANY()); /* 15.3.1.3.34 */
#ifndef HAVE_MRUBY_IO_GEM
mrb_define_private_method_id(mrb, krn, MRB_SYM(p), mrb_p_m, MRB_ARGS_ANY()); /* 15.3.1.3.34 */
mrb_define_private_method_id(mrb, krn, MRB_SYM(print), mrb_print_m, MRB_ARGS_ANY()); /* 15.3.1.3.35 */
#endif
mrb_define_private_method_id(mrb, krn, MRB_SYM(raise), mrb_f_raise, MRB_ARGS_OPT(2)); /* 15.3.1.3.40 */