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>
|
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.
|
* 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
|
#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
|
int
|
||||||
rb_num2int(val)
|
rb_num2int(val)
|
||||||
VALUE val;
|
VALUE val;
|
||||||
{
|
{
|
||||||
long num = rb_num2long(val);
|
long num = rb_num2long(val);
|
||||||
|
|
||||||
if (num < INT_MIN || INT_MAX < num) {
|
check_int(num);
|
||||||
rb_raise(rb_eRangeError, "integer %ld too big to convert to `int'", num);
|
|
||||||
}
|
|
||||||
return (int)num;
|
return (int)num;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1018,9 +1043,27 @@ rb_fix2int(val)
|
||||||
{
|
{
|
||||||
long num = FIXNUM_P(val)?FIX2LONG(val):rb_num2long(val);
|
long num = FIXNUM_P(val)?FIX2LONG(val):rb_num2long(val);
|
||||||
|
|
||||||
if (num < INT_MIN || INT_MAX < num) {
|
check_int(num);
|
||||||
rb_raise(rb_eRangeError, "integer %ld too big to convert to `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;
|
return (int)num;
|
||||||
}
|
}
|
||||||
#else
|
#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))
|
#define NUM2INT(x) (FIXNUM_P(x)?FIX2INT(x):rb_num2int((VALUE)x))
|
||||||
int rb_fix2int _((VALUE));
|
int rb_fix2int _((VALUE));
|
||||||
#define FIX2INT(x) rb_fix2int((VALUE)x)
|
#define FIX2INT(x) rb_fix2int((VALUE)x)
|
||||||
#define NUM2UINT(x) ((unsigned int)NUM2INT(x))
|
unsigned int rb_num2uint _((VALUE));
|
||||||
#define FIX2UINT(x) ((unsigned int)FIX2INT(x))
|
#define NUM2UINT(x) rb_num2uint(x)
|
||||||
|
unsigned int rb_fix2uint _((VALUE));
|
||||||
|
#define FIX2UINT(x) rb_fix2uint(x)
|
||||||
#else
|
#else
|
||||||
#define NUM2INT(x) ((int)NUM2LONG(x))
|
#define NUM2INT(x) ((int)NUM2LONG(x))
|
||||||
#define NUM2UINT(x) ((unsigned int)NUM2ULONG(x))
|
#define NUM2UINT(x) ((unsigned int)NUM2ULONG(x))
|
||||||
|
|
Loading…
Add table
Reference in a new issue