summaryrefslogtreecommitdiffhomepage
path: root/mrbgems/mruby-object-ext/src
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2013-06-29 06:49:29 -0700
committerYukihiro "Matz" Matsumoto <[email protected]>2013-06-29 06:49:29 -0700
commitdfb240627fb876ee734bed2be2938b75b9aaa9b0 (patch)
treed3f4bc34a9baa9ed38c913dc35fbf1843f4af3bb /mrbgems/mruby-object-ext/src
parente33249e26712ac054cba4dd92ca1d26e09e1a601 (diff)
parent36fc42e7dbb8511efe316647dbbbdc822a929425 (diff)
downloadmruby-dfb240627fb876ee734bed2be2938b75b9aaa9b0.tar.gz
mruby-dfb240627fb876ee734bed2be2938b75b9aaa9b0.zip
Merge pull request #1304 from iij/pr_nil_methods
add nil.to_a, nil.to_f, nil.to_i methods
Diffstat (limited to 'mrbgems/mruby-object-ext/src')
-rw-r--r--mrbgems/mruby-object-ext/src/object.c56
1 files changed, 56 insertions, 0 deletions
diff --git a/mrbgems/mruby-object-ext/src/object.c b/mrbgems/mruby-object-ext/src/object.c
new file mode 100644
index 000000000..70b8b4baa
--- /dev/null
+++ b/mrbgems/mruby-object-ext/src/object.c
@@ -0,0 +1,56 @@
+#include "mruby.h"
+#include "mruby/array.h"
+
+/*
+ * call-seq:
+ * nil.to_a -> []
+ *
+ * Always returns an empty array.
+ */
+
+static mrb_value
+nil_to_a(mrb_state *mrb, mrb_value obj)
+{
+ return mrb_ary_new(mrb);
+}
+
+/*
+ * call-seq:
+ * nil.to_f -> 0.0
+ *
+ * Always returns zero.
+ */
+
+static mrb_value
+nil_to_f(mrb_state *mrb, mrb_value obj)
+{
+ return mrb_float_value(mrb, 0.0);
+}
+
+/*
+ * call-seq:
+ * nil.to_i -> 0
+ *
+ * Always returns zero.
+ */
+
+static mrb_value
+nil_to_i(mrb_state *mrb, mrb_value obj)
+{
+ return mrb_fixnum_value(0);
+}
+
+void
+mrb_mruby_object_ext_gem_init(mrb_state* mrb)
+{
+ struct RClass * n = mrb->nil_class;
+
+ mrb_define_method(mrb, n, "to_a", nil_to_a, MRB_ARGS_NONE());
+ mrb_define_method(mrb, n, "to_f", nil_to_f, MRB_ARGS_NONE());
+ mrb_define_method(mrb, n, "to_i", nil_to_i, MRB_ARGS_NONE());
+}
+
+void
+mrb_mruby_object_ext_gem_final(mrb_state* mrb)
+{
+}