Commit dfb24062 authored by Yukihiro "Matz" Matsumoto's avatar Yukihiro "Matz" Matsumoto

Merge pull request #1304 from iij/pr_nil_methods

add nil.to_a, nil.to_f, nil.to_i methods
parents e33249e2 36fc42e7
...@@ -41,6 +41,9 @@ MRuby::GemBox.new do |conf| ...@@ -41,6 +41,9 @@ MRuby::GemBox.new do |conf|
# Use Random class # Use Random class
conf.gem :core => "mruby-random" conf.gem :core => "mruby-random"
# Use extensional Object class
conf.gem :core => "mruby-object-ext"
# Use ObjectSpace class # Use ObjectSpace class
conf.gem :core => "mruby-objectspace" conf.gem :core => "mruby-objectspace"
......
MRuby::Gem::Specification.new('mruby-object-ext') do |spec|
spec.license = 'MIT'
spec.authors = 'mruby developers'
end
#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)
{
}
assert('NilClass#to_a') do
assert_equal nil.to_a, []
end
assert('NilClass#to_f') do
assert_equal nil.to_f, 0.0
end
assert('NilClass#to_i') do
assert_equal nil.to_i, 0
end
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
*/ */
#include "mruby.h" #include "mruby.h"
#include "mruby/array.h"
#include "mruby/class.h" #include "mruby/class.h"
#include "mruby/numeric.h" #include "mruby/numeric.h"
#include "mruby/string.h" #include "mruby/string.h"
......
...@@ -27,4 +27,3 @@ end ...@@ -27,4 +27,3 @@ end
assert('NilClass#to_s', '15.2.4.3.5') do assert('NilClass#to_s', '15.2.4.3.5') do
assert_equal nil.to_s, '' assert_equal nil.to_s, ''
end end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment