Hi.

I want to get a callback whenever an object is created in the vm. To do
this I have overridden 'Class.new', and it works as long as objects are
created through Object.new. But - I also want to get callbacks when
objects are created during unmarshalling of serialized data.. I thought
that I could override Class.allocate to get a callback when this happens
- but I never get the callback.

Is this a bug?

I've attached a simple script that illustrates my problem. Run the
script as "ruby load.rb xxx" two times in a row to see the issue.

#
# load.rb
#
#



class Class
    alias_method :old_new, :new
    alias_method :old_allocate, :allocate

    def new(*args)
        instance = old_new(*args)
        puts "Created instance #{instance}"
        return instance
    end

    def allocate
        instance = old_allocate
        puts "Allocated instance #{instance}"
        return instance
    end
end


class Dummy
    attr_reader :id, :name, :tstamp
    attr_writer :name

    def initialize(id, name=nil)
        @id = id
        @name = name
        @tstamp = Time.now
    end

    def touch
        @tstamp = Time.now
    end

    
end

d = nil

if ARGV[0] 
    if File.exist?("load.ser")
        puts "..loading from serialized file..."
        File.open("load.ser"){|f|
            d = Marshal.load(f)
        }
    end
end

unless d
    puts "....creating new instance...."
    d = Dummy.new(44, "Hello")
end

puts d.inspect
d.touch
d.name = "xxxxx"
puts d.inspect

if ARGV[0]
    puts "...saving to serialized file..."
    File.open("load.ser", "w+"){|f|
        Marshal.dump(d, f)
    }
end



-- 
/** 
 * Anders Engströí, aengstrom / gnejs.net
 * -------------------------------------
 * Your mind is like an umbrella. 
 * It doesn't work unless you open it.
 *    /Frank Zappa
 */