summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--range.c10
-rw-r--r--test/ruby/test_range.rb2
2 files changed, 9 insertions, 3 deletions
diff --git a/range.c b/range.c
index 5f60c11257..62e957e622 100644
--- a/range.c
+++ b/range.c
@@ -1789,8 +1789,12 @@ range_string_range_p(VALUE beg, VALUE end)
}
static inline VALUE
-range_include_fallback(VALUE beg, VALUE end)
+range_include_fallback(VALUE beg, VALUE end, VALUE val)
{
+ if (NIL_P(beg) && NIL_P(end)) {
+ if (linear_object_p(val)) return Qtrue;
+ }
+
if (NIL_P(beg) || NIL_P(end)) {
rb_raise(rb_eTypeError, "cannot determine inclusion in beginless/endless ranges");
}
@@ -1828,7 +1832,7 @@ range_string_cover_internal(VALUE range, VALUE val)
}
}
- return range_include_fallback(beg, end);
+ return range_include_fallback(beg, end, val);
}
static VALUE
@@ -1846,7 +1850,7 @@ range_include_internal(VALUE range, VALUE val)
return rb_str_include_range_p(beg, end, val, RANGE_EXCL(range));
}
- return range_include_fallback(beg, end);
+ return range_include_fallback(beg, end, val);
}
static int r_cover_range_p(VALUE range, VALUE beg, VALUE end, VALUE val);
diff --git a/test/ruby/test_range.rb b/test/ruby/test_range.rb
index 0a131644e5..0a68824f11 100644
--- a/test/ruby/test_range.rb
+++ b/test/ruby/test_range.rb
@@ -579,6 +579,8 @@ class TestRange < Test::Unit::TestCase
assert_not_operator(0..10, :===, 11)
assert_operator(5..nil, :===, 11)
assert_not_operator(5..nil, :===, 0)
+ assert_operator(nil..10, :===, 0)
+ assert_operator(nil..nil, :===, 0)
end
def test_eqq_string