Project

General

Profile

Bug #1711 ยป marshal.rb

runpaint (Run Paint Run Run), 07/02/2009 02:30 AM

 
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]
    (1-1/1)