summaryrefslogtreecommitdiffhomepage
path: root/mrbgems
diff options
context:
space:
mode:
authorJun Hiroe <[email protected]>2014-10-20 10:59:21 +0900
committerJun Hiroe <[email protected]>2014-10-20 22:35:58 +0900
commitde04d3f0804dc7d87539bf8cc979abbf50e61735 (patch)
tree007e68292b7d1c3556b2a34af716057f0a534384 /mrbgems
parent69ba4f0ed5e7ce179a01316dea753042dfcdfd77 (diff)
downloadmruby-de04d3f0804dc7d87539bf8cc979abbf50e61735.tar.gz
mruby-de04d3f0804dc7d87539bf8cc979abbf50e61735.zip
Add Kernel.String
Diffstat (limited to 'mrbgems')
-rw-r--r--mrbgems/mruby-kernel-ext/src/kernel.c26
-rw-r--r--mrbgems/mruby-kernel-ext/test/kernel.rb6
2 files changed, 32 insertions, 0 deletions
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
@@ -24,6 +24,31 @@ mrb_f_method(mrb_state *mrb, mrb_value self)
/*
* call-seq:
+ * String(arg) -> string
+ *
+ * Returns <i>arg</i> as an <code>String</code>.
+ *
+ * First tries to call its <code>to_str</code> 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
*
* Returns +arg+ as an 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]))