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:
parent
7d9628ef02
commit
045eb9773e
3 changed files with 60 additions and 8 deletions
|
@ -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.
|
||||
|
|
55
numeric.c
55
numeric.c
|
@ -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
6
ruby.h
|
@ -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))
|
||||
|
|
Loading…
Add table
Reference in a new issue