From de04d3f0804dc7d87539bf8cc979abbf50e61735 Mon Sep 17 00:00:00 2001 From: Jun Hiroe Date: Mon, 20 Oct 2014 10:59:21 +0900 Subject: Add Kernel.String --- mrbgems/mruby-kernel-ext/src/kernel.c | 26 ++++++++++++++++++++++++++ mrbgems/mruby-kernel-ext/test/kernel.rb | 6 ++++++ 2 files changed, 32 insertions(+) (limited to 'mrbgems/mruby-kernel-ext') diff --git a/mrbgems/mruby-kernel-ext/src/kernel.c b/mrbgems/mruby-kernel-ext/src/kernel.c index ed3c1787e..011c58049 100644 --- a/mrbgems/mruby-kernel-ext/src/kernel.c +++ b/mrbgems/mruby-kernel-ext/src/kernel.c @@ -22,6 +22,31 @@ mrb_f_method(mrb_state *mrb, mrb_value self) return mrb_nil_value(); } +/* + * call-seq: + * String(arg) -> string + * + * Returns arg as an String. + * + * First tries to call its to_str method, then its to_s method. + * + * String(self) #=> "main" + * String(self.class) #=> "Object" + * String(123456) #=> "123456" + */ +static mrb_value +mrb_f_string(mrb_state *mrb, mrb_value self) +{ + mrb_value arg, tmp; + + mrb_get_args(mrb, "o", &arg); + tmp = mrb_check_convert_type(mrb, arg, MRB_TT_STRING, "String", "to_str"); + if (mrb_nil_p(tmp)) { + tmp = mrb_check_convert_type(mrb, arg, MRB_TT_STRING, "String", "to_s"); + } + return tmp; +} + /* * call-seq: * Array(arg) -> array @@ -57,6 +82,7 @@ mrb_mruby_kernel_ext_gem_init(mrb_state *mrb) mrb_define_module_function(mrb, krn, "fail", mrb_f_raise, MRB_ARGS_OPT(2)); mrb_define_method(mrb, krn, "__method__", mrb_f_method, MRB_ARGS_NONE()); + mrb_define_module_function(mrb, krn, "String", mrb_f_string, MRB_ARGS_REQ(1)); mrb_define_module_function(mrb, krn, "Array", mrb_f_array, MRB_ARGS_REQ(1)); } diff --git a/mrbgems/mruby-kernel-ext/test/kernel.rb b/mrbgems/mruby-kernel-ext/test/kernel.rb index 65df068ec..898a7f713 100644 --- a/mrbgems/mruby-kernel-ext/test/kernel.rb +++ b/mrbgems/mruby-kernel-ext/test/kernel.rb @@ -17,6 +17,12 @@ assert('Kernel#__method__') do assert_equal(:m2, c.new.m2) end +assert('Kernel#String') do + assert_equal("main", String(self)) + assert_equal("Object", String(self.class)) + assert_equal("123456", String(123456)) +end + assert('Kernel#Array') do assert_equal([1], Kernel.Array(1)) assert_equal([1, 2, 3, 4, 5], Kernel.Array([1, 2, 3, 4, 5])) -- cgit v1.2.3