1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

* range.c (range_eqq): revert r11113 because rb_call_super() is

called in range_include() and thus r11113 doesn't work when the
  receiver Range object consists of non linear objects such as Date
  objects.
  [ruby-core:72908] [Bug #12003]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53635 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
shugo 2016-01-23 11:16:09 +00:00
parent 387e838c02
commit 62b750bb55
3 changed files with 33 additions and 7 deletions

View file

@ -1,3 +1,11 @@
Sat Jan 23 20:10:29 2016 Shugo Maeda <shugo@ruby-lang.org>
* range.c (range_eqq): revert r11113 because rb_call_super() is
called in range_include() and thus r11113 doesn't work when the
receiver Range object consists of non linear objects such as Date
objects.
[ruby-core:72908] [Bug #12003]
Sat Jan 23 18:37:37 2016 Martin Duerst <duerst@it.aoyama.ac.jp> Sat Jan 23 18:37:37 2016 Martin Duerst <duerst@it.aoyama.ac.jp>
* ChangeLog: Fixing wrong time on previous commit, and adding * ChangeLog: Fixing wrong time on previous commit, and adding

View file

@ -23,7 +23,6 @@ static ID id_beg, id_end, id_excl, id_integer_p, id_div;
#define id_succ idSucc #define id_succ idSucc
static VALUE r_cover_p(VALUE, VALUE, VALUE, VALUE); static VALUE r_cover_p(VALUE, VALUE, VALUE, VALUE);
static VALUE range_include(VALUE range, VALUE val);
#define RANGE_BEG(r) (RSTRUCT(r)->as.ary[0]) #define RANGE_BEG(r) (RSTRUCT(r)->as.ary[0])
#define RANGE_END(r) (RSTRUCT(r)->as.ary[1]) #define RANGE_END(r) (RSTRUCT(r)->as.ary[1])
@ -1135,12 +1134,7 @@ range_inspect(VALUE range)
static VALUE static VALUE
range_eqq(VALUE range, VALUE val) range_eqq(VALUE range, VALUE val)
{ {
ID pred; return rb_funcall(range, rb_intern("include?"), 1, val);
CONST_ID(pred, "include?");
if (rb_method_basic_definition_p(RBASIC_CLASS(range), pred)) {
return range_include(range, val);
}
return rb_funcall(range, pred, 1, val);
} }

View file

@ -314,6 +314,30 @@ class TestRange < Test::Unit::TestCase
} }
end end
def test_eqq_non_linear
bug12003 = '[ruby-core:72908] [Bug #12003]'
c = Class.new {
attr_reader :value
def initialize(value)
@value = value
end
def succ
self.class.new(@value.succ)
end
def ==(other)
@value == other.value
end
def <=>(other)
@value <=> other.value
end
}
assert_operator(c.new(0)..c.new(10), :===, c.new(5), bug12003)
end
def test_include def test_include
assert_include("a".."z", "c") assert_include("a".."z", "c")
assert_not_include("a".."z", "5") assert_not_include("a".."z", "5")