diff --git a/range.c b/range.c index ef4ce3ecc1..c780df9f62 100644 --- a/range.c +++ b/range.c @@ -1098,6 +1098,8 @@ range_inspect(VALUE range) return rb_exec_recursive(inspect_range, range, 0); } +VALUE rb_str_include_range_p(VALUE beg, VALUE end, VALUE val, VALUE exclusive); + /* * call-seq: * rng === obj -> true or false @@ -1120,6 +1122,14 @@ range_inspect(VALUE range) static VALUE range_eqq(VALUE range, VALUE val) { + VALUE beg = RANGE_BEG(range); + VALUE end = RANGE_END(range); + if (FIXNUM_P(beg) || FIXNUM_P(end)) { + return r_cover_p(range, beg, end, val); + } + else if (RB_TYPE_P(beg, T_STRING) && RB_TYPE_P(end, T_STRING)) { + return rb_str_include_range_p(beg, end, val, RANGE_EXCL(range)); + } return rb_funcall(range, rb_intern("include?"), 1, val); } @@ -1152,7 +1162,6 @@ range_include(VALUE range, VALUE val) return r_cover_p(range, beg, end, val); } else if (RB_TYPE_P(beg, T_STRING) && RB_TYPE_P(end, T_STRING)) { - VALUE rb_str_include_range_p(VALUE beg, VALUE end, VALUE val, VALUE exclusive); return rb_str_include_range_p(beg, end, val, RANGE_EXCL(range)); } /* TODO: ruby_frame->this_func = rb_intern("include?"); */