Bug #15449 ยป range-case-cover-string.patch
range.c | ||
---|---|---|
return rb_exec_recursive(inspect_range, range, 0);
|
||
}
|
||
static VALUE range_include_internal(VALUE range, VALUE val);
|
||
static VALUE range_include_internal(VALUE range, VALUE val, int string_use_cover);
|
||
/*
|
||
* call-seq:
|
||
... | ... | |
static VALUE
|
||
range_eqq(VALUE range, VALUE val)
|
||
{
|
||
VALUE ret = range_include_internal(range, val);
|
||
VALUE ret = range_include_internal(range, val, 1);
|
||
if (ret != Qundef) return ret;
|
||
return r_cover_p(range, RANGE_BEG(range), RANGE_END(range), val);
|
||
}
|
||
... | ... | |
static VALUE
|
||
range_include(VALUE range, VALUE val)
|
||
{
|
||
VALUE ret = range_include_internal(range, val);
|
||
VALUE ret = range_include_internal(range, val, 0);
|
||
if (ret != Qundef) return ret;
|
||
return rb_call_super(1, &val);
|
||
}
|
||
static VALUE
|
||
range_include_internal(VALUE range, VALUE val)
|
||
range_include_internal(VALUE range, VALUE val, int string_use_cover)
|
||
{
|
||
VALUE beg = RANGE_BEG(range);
|
||
VALUE end = RANGE_END(range);
|
||
... | ... | |
!NIL_P(rb_check_to_integer(end, "to_int"))) {
|
||
return r_cover_p(range, beg, end, val);
|
||
}
|
||
else if (RB_TYPE_P(beg, T_STRING)) {
|
||
if (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));
|
||
}
|
||
else if (RB_TYPE_P(beg, T_STRING) || RB_TYPE_P(end, T_STRING)) {
|
||
if (RB_TYPE_P(beg, T_STRING) && RB_TYPE_P(end, T_STRING)) {
|
||
if (string_use_cover) {
|
||
return r_cover_p(range, beg, end, val);
|
||
}
|
||
else {
|
||
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));
|
||
}
|
||
}
|
||
else if (NIL_P(beg)) {
|
||
VALUE r = rb_funcall(val, id_cmp, 1, end);
|
||
if (NIL_P(r)) return Qfalse;
|
test/ruby/test_range.rb | ||
---|---|---|
assert_not_operator(5..nil, :===, 0)
|
||
end
|
||
def test_eqq_string
|
||
assert_operator('A'..'Z', :===, 'ANA')
|
||
assert_not_operator('A'..'Z', :===, 'ana')
|
||
assert_operator('A'.., :===, 'ANA')
|
||
assert_operator(..'Z', :===, 'ANA')
|
||
assert_operator(nil..nil, :===, 'ANA')
|
||
end
|
||
def test_eqq_time
|
||
bug11113 = '[ruby-core:69052] [Bug #11113]'
|
||
t = Time.now
|