From 18c43c2a5add8cbd91f094b08bb4fc291a019a82 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Mon, 19 May 2025 13:31:01 +0900 Subject: [PATCH] mruby-io: provide Kernel#p in this gem To prevent ordering instability when output from mruby-io and Kernel#p mixed. --- mrbgems/mruby-io/mrblib/kernel.rb | 11 +++++++++++ src/kernel.c | 4 +++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/mrbgems/mruby-io/mrblib/kernel.rb b/mrbgems/mruby-io/mrblib/kernel.rb index 28d469d43..9a09ada75 100644 --- a/mrbgems/mruby-io/mrblib/kernel.rb +++ b/mrbgems/mruby-io/mrblib/kernel.rb @@ -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 diff --git a/src/kernel.c b/src/kernel.c index de460755f..6d450c790 100644 --- a/src/kernel.c +++ b/src/kernel.c @@ -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 */