1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

* numeric.c (rb_num2uint, rb_fix2int): new function to convert

values over INT_MAX.  [ruby-core:01099]

* ruby.h (NUM2UINT, FIX2INT): ditto.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@3885 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nobu 2003-05-30 13:28:10 +00:00
parent 7d9628ef02
commit 045eb9773e
3 changed files with 60 additions and 8 deletions

View file

@ -1,3 +1,10 @@
Fri May 30 22:28:04 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
* numeric.c (rb_num2uint, rb_fix2int): new function to convert
values over INT_MAX. [ruby-core:01099]
* ruby.h (NUM2UINT, FIX2INT): ditto.
Fri May 30 14:55:44 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
* eval.c (rb_Array): exclude Kernel#to_a instead of Object#to_a.

View file

@ -1000,15 +1000,40 @@ rb_num2ulong(val)
}
#if SIZEOF_INT < SIZEOF_LONG
static void
check_int(num)
long num;
{
const char *s;
if (num < INT_MIN) {
s = "small";
}
else if (num > INT_MAX) {
s = "big";
}
else {
return;
}
rb_raise(rb_eRangeError, "integer %ld too %s to convert to `int'", num, s);
}
static void
check_uint(num)
unsigned long num;
{
if (num > INT_MAX) {
rb_raise(rb_eRangeError, "integer %lu too big to convert to `int'", num);
}
}
int
rb_num2int(val)
VALUE val;
{
long num = rb_num2long(val);
if (num < INT_MIN || INT_MAX < num) {
rb_raise(rb_eRangeError, "integer %ld too big to convert to `int'", num);
}
check_int(num);
return (int)num;
}
@ -1018,9 +1043,27 @@ rb_fix2int(val)
{
long num = FIXNUM_P(val)?FIX2LONG(val):rb_num2long(val);
if (num < INT_MIN || INT_MAX < num) {
rb_raise(rb_eRangeError, "integer %ld too big to convert to `int'", num);
}
check_int(num);
return (int)num;
}
unsigned int
rb_num2uint(val)
VALUE val;
{
unsigned long num = rb_num2ulong(val);
check_uint(num);
return (int)num;
}
unsigned int
rb_fix2int(val)
VALUE val;
{
unsigned long num = FIXNUM_P(val)?FIX2LONG(val):rb_num2ulong(val);
check_uint(num);
return (int)num;
}
#else

6
ruby.h
View file

@ -241,8 +241,10 @@ int rb_num2int _((VALUE));
#define NUM2INT(x) (FIXNUM_P(x)?FIX2INT(x):rb_num2int((VALUE)x))
int rb_fix2int _((VALUE));
#define FIX2INT(x) rb_fix2int((VALUE)x)
#define NUM2UINT(x) ((unsigned int)NUM2INT(x))
#define FIX2UINT(x) ((unsigned int)FIX2INT(x))
unsigned int rb_num2uint _((VALUE));
#define NUM2UINT(x) rb_num2uint(x)
unsigned int rb_fix2uint _((VALUE));
#define FIX2UINT(x) rb_fix2uint(x)
#else
#define NUM2INT(x) ((int)NUM2LONG(x))
#define NUM2UINT(x) ((unsigned int)NUM2ULONG(x))