Use RB_INTEGER_TYPE_P instead of rb_obj_is_kind_of
For checking whether an object is an Integer, because a subclass of Integer is meaningless in Ruby, RB_INTEGER_TYPE_P is better than rb_obj_is_kind_of for speed. * object.c (rb_to_integer): Use RB_INTEGER_TYPE_P instead of rb_obj_is_kind_of. * object.c (rb_check_to_integer): ditto. * range.c (range_max): ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62582 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
cc4be225a8
commit
2234edf0b1
8
object.c
8
object.c
@ -3043,8 +3043,8 @@ rb_to_integer(VALUE val, const char *method)
|
|||||||
if (FIXNUM_P(val)) return val;
|
if (FIXNUM_P(val)) return val;
|
||||||
if (RB_TYPE_P(val, T_BIGNUM)) return val;
|
if (RB_TYPE_P(val, T_BIGNUM)) return val;
|
||||||
v = convert_type(val, "Integer", method, TRUE);
|
v = convert_type(val, "Integer", method, TRUE);
|
||||||
if (!rb_obj_is_kind_of(v, rb_cInteger)) {
|
if (!RB_INTEGER_TYPE_P(v)) {
|
||||||
conversion_mismatch(val, "Integer", method, v);
|
conversion_mismatch(val, "Integer", method, v);
|
||||||
}
|
}
|
||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
@ -3067,8 +3067,8 @@ rb_check_to_integer(VALUE val, const char *method)
|
|||||||
if (FIXNUM_P(val)) return val;
|
if (FIXNUM_P(val)) return val;
|
||||||
if (RB_TYPE_P(val, T_BIGNUM)) return val;
|
if (RB_TYPE_P(val, T_BIGNUM)) return val;
|
||||||
v = convert_type(val, "Integer", method, FALSE);
|
v = convert_type(val, "Integer", method, FALSE);
|
||||||
if (!rb_obj_is_kind_of(v, rb_cInteger)) {
|
if (!RB_INTEGER_TYPE_P(v)) {
|
||||||
return Qnil;
|
return Qnil;
|
||||||
}
|
}
|
||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
|
40
range.c
40
range.c
@ -949,29 +949,29 @@ range_max(int argc, VALUE *argv, VALUE range)
|
|||||||
int nm = FIXNUM_P(e) || rb_obj_is_kind_of(e, rb_cNumeric);
|
int nm = FIXNUM_P(e) || rb_obj_is_kind_of(e, rb_cNumeric);
|
||||||
|
|
||||||
if (rb_block_given_p() || (EXCL(range) && !nm) || argc) {
|
if (rb_block_given_p() || (EXCL(range) && !nm) || argc) {
|
||||||
return rb_call_super(argc, argv);
|
return rb_call_super(argc, argv);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
struct cmp_opt_data cmp_opt = { 0, 0 };
|
struct cmp_opt_data cmp_opt = { 0, 0 };
|
||||||
VALUE b = RANGE_BEG(range);
|
VALUE b = RANGE_BEG(range);
|
||||||
int c = OPTIMIZED_CMP(b, e, cmp_opt);
|
int c = OPTIMIZED_CMP(b, e, cmp_opt);
|
||||||
|
|
||||||
if (c > 0)
|
if (c > 0)
|
||||||
return Qnil;
|
return Qnil;
|
||||||
if (EXCL(range)) {
|
if (EXCL(range)) {
|
||||||
if (!FIXNUM_P(e) && !rb_obj_is_kind_of(e, rb_cInteger)) {
|
if (!RB_INTEGER_TYPE_P(e)) {
|
||||||
rb_raise(rb_eTypeError, "cannot exclude non Integer end value");
|
rb_raise(rb_eTypeError, "cannot exclude non Integer end value");
|
||||||
}
|
}
|
||||||
if (c == 0) return Qnil;
|
if (c == 0) return Qnil;
|
||||||
if (!FIXNUM_P(b) && !rb_obj_is_kind_of(b,rb_cInteger)) {
|
if (!RB_INTEGER_TYPE_P(b)) {
|
||||||
rb_raise(rb_eTypeError, "cannot exclude end value with non Integer begin value");
|
rb_raise(rb_eTypeError, "cannot exclude end value with non Integer begin value");
|
||||||
}
|
}
|
||||||
if (FIXNUM_P(e)) {
|
if (FIXNUM_P(e)) {
|
||||||
return LONG2NUM(FIX2LONG(e) - 1);
|
return LONG2NUM(FIX2LONG(e) - 1);
|
||||||
}
|
}
|
||||||
return rb_funcall(e, '-', 1, INT2FIX(1));
|
return rb_funcall(e, '-', 1, INT2FIX(1));
|
||||||
}
|
}
|
||||||
return e;
|
return e;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user