diff options
author | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 1999-02-09 06:08:24 +0000 |
---|---|---|
committer | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 1999-02-09 06:08:24 +0000 |
commit | 115eb4595cea72226ec8acd357e7c403e2c4b04a (patch) | |
tree | c050f1ee16f730fc7dbc89586e09b33a23196485 /numeric.c | |
parent | 9b64dfe3b8f0343ebf97ae80d3a4ec3f4bd115b3 (diff) |
990209
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_3@394 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'numeric.c')
-rw-r--r-- | numeric.c | 22 |
1 files changed, 20 insertions, 2 deletions
@@ -794,14 +794,32 @@ static VALUE rb_int_induced_from(klass, x) VALUE klass, x; { - return rb_funcall(x, rb_intern("to_i"), 0); + switch (TYPE(x)) { + case T_FIXNUM: + case T_BIGNUM: + return x; + case T_FLOAT: + return rb_funcall(x, rb_intern("to_i"), 0); + default: + rb_raise(rb_eTypeError, "failed to convert %s into Integer", + rb_class2name(CLASS_OF(x))); + } } static VALUE rb_flo_induced_from(klass, x) VALUE klass, x; { - return rb_funcall(x, rb_intern("to_f"), 0); + switch (TYPE(x)) { + case T_FIXNUM: + case T_BIGNUM: + return rb_funcall(x, rb_intern("to_f"), 0); + case T_FLOAT: + return x; + default: + rb_raise(rb_eTypeError, "failed to convert %s into Float", + rb_class2name(CLASS_OF(x))); + } } static VALUE |