diff options
| author | Akira Yumiyama <[email protected]> | 2013-06-25 20:16:41 +0900 |
|---|---|---|
| committer | Akira Yumiyama <[email protected]> | 2013-06-28 10:01:07 +0900 |
| commit | 36fc42e7dbb8511efe316647dbbbdc822a929425 (patch) | |
| tree | ee506121c706d7c24d9f0c3b4be3c26689c30ed4 | |
| parent | ec9fdd5c4ca8cfc31b96048124c1925d2e20698e (diff) | |
| download | mruby-36fc42e7dbb8511efe316647dbbbdc822a929425.tar.gz mruby-36fc42e7dbb8511efe316647dbbbdc822a929425.zip | |
add nil.to_a, nil.to_f, nil.to_i methods
| -rw-r--r-- | mrbgems/default.gembox | 3 | ||||
| -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 | ||||
| -rw-r--r-- | src/object.c | 1 | ||||
| -rw-r--r-- | test/t/nil.rb | 1 |
6 files changed, 75 insertions, 1 deletions
diff --git a/mrbgems/default.gembox b/mrbgems/default.gembox index 1c6732d48..b2cdac93d 100644 --- a/mrbgems/default.gembox +++ b/mrbgems/default.gembox @@ -41,6 +41,9 @@ MRuby::GemBox.new do |conf| # Use Random class conf.gem :core => "mruby-random" + # Use extensional Object class + conf.gem :core => "mruby-object-ext" + # Use ObjectSpace class conf.gem :core => "mruby-objectspace" 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 diff --git a/src/object.c b/src/object.c index a2162f77f..d6f756f18 100644 --- a/src/object.c +++ b/src/object.c @@ -5,6 +5,7 @@ */ #include "mruby.h" +#include "mruby/array.h" #include "mruby/class.h" #include "mruby/numeric.h" #include "mruby/string.h" diff --git a/test/t/nil.rb b/test/t/nil.rb index 99b1215e9..08d2acdf1 100644 --- a/test/t/nil.rb +++ b/test/t/nil.rb @@ -27,4 +27,3 @@ end assert('NilClass#to_s', '15.2.4.3.5') do assert_equal nil.to_s, '' end - |
