mirror of
https://github.com/mruby/mruby
synced 2026-06-08 16:11:16 +00:00
add nil.to_a, nil.to_f, nil.to_i methods
This commit is contained in:
committed by
Akira Yumiyama
parent
ec9fdd5c4c
commit
36fc42e7db
@@ -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"
|
||||
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
MRuby::Gem::Specification.new('mruby-object-ext') do |spec|
|
||||
spec.license = 'MIT'
|
||||
spec.authors = 'mruby developers'
|
||||
end
|
||||
@@ -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)
|
||||
{
|
||||
}
|
||||
@@ -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
|
||||
@@ -5,6 +5,7 @@
|
||||
*/
|
||||
|
||||
#include "mruby.h"
|
||||
#include "mruby/array.h"
|
||||
#include "mruby/class.h"
|
||||
#include "mruby/numeric.h"
|
||||
#include "mruby/string.h"
|
||||
|
||||
@@ -27,4 +27,3 @@ end
|
||||
assert('NilClass#to_s', '15.2.4.3.5') do
|
||||
assert_equal nil.to_s, ''
|
||||
end
|
||||
|
||||
|
||||
Reference in New Issue
Block a user