SYNOPSIS
        #include <sys/driver_hooks.h>

        set_driver_hook(H_CREATE_LWOBJECT_COPY, value)

        <value> being:

          void <name>    ()
          void <closure> ()
          void <closure> (lwobject obj_to_init)

DESCRIPTION
        Optional hook to finish initialization of a copy of a lightweight
        object. Hook setting can be any closure, or the name of the
        function (static or public) to call in the object.

        If the hook is an unbound lambda closure expecting arguments, it is
        bound to the current object and called with the created object as
        the first argument. If the hook is an unbound lambda closure without
        arguments, it is bound to the object to be initalized and called.
        If the hook is any other type of closure, it is called with the
        created object as the first argument.

        If the hook is defined as the name of an lfun in the lightweight
        object, it is called in the new lwobject.

HISTORY
        Introduced in LDMud 3.6.6.

SEE ALSO
        hooks(C), create_lwobject(H), copy(E), deep_copy(E)
