diff options
author | mrkn <mrkn@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2018-02-26 07:57:15 +0000 |
---|---|---|
committer | mrkn <mrkn@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2018-02-26 07:57:15 +0000 |
commit | 2234edf0b1183e0d6f63ac093243fc6e23e15dd5 (patch) | |
tree | 366e0950459b1f285413a3de5a3b19a5b8a4fc58 | |
parent | cc4be225a8c1dd5f42a4c4b6356b0b351b6e85d5 (diff) |
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
-rw-r--r-- | object.c | 8 | ||||
-rw-r--r-- | range.c | 42 |
2 files changed, 25 insertions, 25 deletions
@@ -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; } @@ -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); - - 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; + 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 (!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; } } |