Issue #1711 has been updated by Yuki Sonoda.


 class UserDefined
 
   class Nested
     def ==(other)
       other.kind_of? self.class
     end
   end
 
   attr_reader :a, :b
 
   def initialize
     @a = 'stuff'
     @b = @a
   end
 
   def _dump(depth)
     Marshal.dump [@a, @b]
   end
 
   def self._load(data)
     a, b = Marshal.load data
 
     obj = allocate
     obj.instance_variable_set :@a, a
     obj.instance_variable_set :@b, b
 
     obj
   end
 
   def ==(other)
     self.class === other and
     @a == other.a and
     @b == other.b
   end
 
 end
 
 class UserDefinedWithIvar
   attr_reader :a, :b, :c
 
   def initialize
     @a = 'stuff'
     @a.instance_variable_set :@foo, :UserDefinedWithIvar
     @b = 'more'
     @c = @b
   end
 
   def _dump(depth)
     Marshal.dump [@a, @b, @c]
   end
 
   def self._load(data)
     a, b, c = Marshal.load data
 
     obj = allocate
     obj.instance_variable_set :@a, a
     obj.instance_variable_set :@b, b
     obj.instance_variable_set :@c, c
 
     obj
   end
 
   def ==(other)
     self.class === other and
     @a == other.a and
     @b == other.b and
     @c == other.c and
     @a.instance_variable_get(:@foo) == other.a.instance_variable_get(:@foo)
   end
 end
  
 arr = []
 myproc = Proc.new { |o| arr << o }
 o1 = UserDefined.new; 
 o2 = UserDefinedWithIvar.new
 obj = [o1, o2, o1, o2]
 Marshal.load Marshal.dump(obj), myproc
 p arr == [o1, o2, obj]

----------------------------------------
http://redmine.ruby-lang.org/issues/show/1711

----------------------------------------
http://redmine.ruby-lang.org