diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2009-05-20 16:43:41 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2009-05-20 16:43:41 +0000 |
commit | 3a6227f5ee9358bd8d0d093d0b4a7f3400e17e78 (patch) | |
tree | beb1650b092b8a90fef0bf9b94288d0b38091117 /numeric.c | |
parent | b7d7682da879d1fe5b670486298585822f56b9f2 (diff) | |
download | ruby-3a6227f5ee9358bd8d0d093d0b4a7f3400e17e78.tar.gz ruby-3a6227f5ee9358bd8d0d093d0b4a7f3400e17e78.tar.xz ruby-3a6227f5ee9358bd8d0d093d0b4a7f3400e17e78.zip |
* include/ruby/ruby.h (rb_long2int, RARRAY_LENINT): check long to
cast to int. [ruby-dev:38508]
* struct.c, vm_eval.c, vm_insnhelper.c: use RARRAY_LENINT.
git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@23503 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'numeric.c')
-rw-r--r-- | numeric.c | 20 |
1 files changed, 9 insertions, 11 deletions
@@ -1630,21 +1630,19 @@ rb_num2ulong(VALUE val) } #if SIZEOF_INT < SIZEOF_VALUE +void +rb_out_of_int(SIGNED_VALUE num) +{ + rb_raise(rb_eRangeError, "integer %"PRIdVALUE " too %s to convert to `int'", + num, num < 0 ? "small" : "big"); +} + static void check_int(SIGNED_VALUE num) { - const char *s; - - if (num < INT_MIN) { - s = "small"; - } - else if (num > INT_MAX) { - s = "big"; - } - else { - return; + if ((SIGNED_VALUE)(int)num != num) { + rb_out_of_int(num); } - rb_raise(rb_eRangeError, "integer %"PRIdVALUE " too %s to convert to `int'", num, s); } static void |