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:
		
							parent
							
								
									387e838c02
								
							
						
					
					
						commit
						62b750bb55
					
				
					 3 changed files with 33 additions and 7 deletions
				
			
		| 
						 | 
				
			
			@ -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>
 | 
			
		||||
 | 
			
		||||
	* ChangeLog: Fixing wrong time on previous commit, and adding
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										8
									
								
								range.c
									
										
									
									
									
								
							
							
						
						
									
										8
									
								
								range.c
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -23,7 +23,6 @@ static ID id_beg, id_end, id_excl, id_integer_p, id_div;
 | 
			
		|||
#define id_succ idSucc
 | 
			
		||||
 | 
			
		||||
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_END(r) (RSTRUCT(r)->as.ary[1])
 | 
			
		||||
| 
						 | 
				
			
			@ -1135,12 +1134,7 @@ range_inspect(VALUE range)
 | 
			
		|||
static VALUE
 | 
			
		||||
range_eqq(VALUE range, VALUE val)
 | 
			
		||||
{
 | 
			
		||||
    ID pred;
 | 
			
		||||
    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);
 | 
			
		||||
    return rb_funcall(range, rb_intern("include?"), 1, val);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -314,6 +314,30 @@ class TestRange < Test::Unit::TestCase
 | 
			
		|||
    }
 | 
			
		||||
  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
 | 
			
		||||
    assert_include("a".."z", "c")
 | 
			
		||||
    assert_not_include("a".."z", "5")
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue