From 2234edf0b1183e0d6f63ac093243fc6e23e15dd5 Mon Sep 17 00:00:00 2001 From: mrkn Date: Mon, 26 Feb 2018 07:57:15 +0000 Subject: [PATCH] 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 --- object.c | 8 ++++---- range.c | 40 ++++++++++++++++++++-------------------- 2 files changed, 24 insertions(+), 24 deletions(-) diff --git a/object.c b/object.c index f51d7d43fe..b04843eec8 100644 --- a/object.c +++ b/object.c @@ -3043,8 +3043,8 @@ rb_to_integer(VALUE val, const char *method) if (FIXNUM_P(val)) return val; if (RB_TYPE_P(val, T_BIGNUM)) return val; v = convert_type(val, "Integer", method, TRUE); - if (!rb_obj_is_kind_of(v, rb_cInteger)) { - conversion_mismatch(val, "Integer", method, v); + if (!RB_INTEGER_TYPE_P(v)) { + conversion_mismatch(val, "Integer", method, v); } return v; } @@ -3067,8 +3067,8 @@ rb_check_to_integer(VALUE val, const char *method) if (FIXNUM_P(val)) return val; if (RB_TYPE_P(val, T_BIGNUM)) return val; v = convert_type(val, "Integer", method, FALSE); - if (!rb_obj_is_kind_of(v, rb_cInteger)) { - return Qnil; + if (!RB_INTEGER_TYPE_P(v)) { + return Qnil; } return v; } diff --git a/range.c b/range.c index 589755753f..828231f33d 100644 --- a/range.c +++ b/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); if (rb_block_given_p() || (EXCL(range) && !nm) || argc) { - return rb_call_super(argc, argv); + return rb_call_super(argc, argv); } else { - struct cmp_opt_data cmp_opt = { 0, 0 }; - VALUE b = RANGE_BEG(range); - int c = OPTIMIZED_CMP(b, e, cmp_opt); + struct cmp_opt_data cmp_opt = { 0, 0 }; + VALUE b = RANGE_BEG(range); + int c = OPTIMIZED_CMP(b, e, cmp_opt); - if (c > 0) - return Qnil; - if (EXCL(range)) { - if (!FIXNUM_P(e) && !rb_obj_is_kind_of(e, rb_cInteger)) { - rb_raise(rb_eTypeError, "cannot exclude non Integer end value"); - } - if (c == 0) return Qnil; - if (!FIXNUM_P(b) && !rb_obj_is_kind_of(b,rb_cInteger)) { - rb_raise(rb_eTypeError, "cannot exclude end value with non Integer begin value"); - } - if (FIXNUM_P(e)) { - return LONG2NUM(FIX2LONG(e) - 1); - } - return rb_funcall(e, '-', 1, INT2FIX(1)); - } - return e; + if (c > 0) + return Qnil; + if (EXCL(range)) { + if (!RB_INTEGER_TYPE_P(e)) { + rb_raise(rb_eTypeError, "cannot exclude non Integer end value"); + } + if (c == 0) return Qnil; + if (!RB_INTEGER_TYPE_P(b)) { + rb_raise(rb_eTypeError, "cannot exclude end value with non Integer begin value"); + } + if (FIXNUM_P(e)) { + return LONG2NUM(FIX2LONG(e) - 1); + } + return rb_funcall(e, '-', 1, INT2FIX(1)); + } + return e; } }