diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2013-06-29 06:49:29 -0700 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2013-06-29 06:49:29 -0700 |
| commit | dfb240627fb876ee734bed2be2938b75b9aaa9b0 (patch) | |
| tree | d3f4bc34a9baa9ed38c913dc35fbf1843f4af3bb /mrbgems/mruby-object-ext | |
| parent | e33249e26712ac054cba4dd92ca1d26e09e1a601 (diff) | |
| parent | 36fc42e7dbb8511efe316647dbbbdc822a929425 (diff) | |
| download | mruby-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')
| -rw-r--r-- | mrbgems/mruby-object-ext/mrbgem.rake | 4 | ||||
| -rw-r--r-- | mrbgems/mruby-object-ext/src/object.c | 56 | ||||
| -rw-r--r-- | mrbgems/mruby-object-ext/test/nil.rb | 11 |
3 files changed, 71 insertions, 0 deletions
diff --git a/mrbgems/mruby-object-ext/mrbgem.rake b/mrbgems/mruby-object-ext/mrbgem.rake new file mode 100644 index 000000000..1f232949e --- /dev/null +++ b/mrbgems/mruby-object-ext/mrbgem.rake @@ -0,0 +1,4 @@ +MRuby::Gem::Specification.new('mruby-object-ext') do |spec| + spec.license = 'MIT' + spec.authors = 'mruby developers' +end 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) +{ +} diff --git a/mrbgems/mruby-object-ext/test/nil.rb b/mrbgems/mruby-object-ext/test/nil.rb new file mode 100644 index 000000000..e385dec6a --- /dev/null +++ b/mrbgems/mruby-object-ext/test/nil.rb @@ -0,0 +1,11 @@ +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 |
