Skip to content
  • Paolo Bonzini's avatar
    qom: Do not register interface "types" in the type table and fix names · b061dc41
    Paolo Bonzini authored
    
    
    There should be no need to look up nor enumerate the interface "types",
    whose "classes" are really just vtables.  Just create the types and
    add them to the interface list of the parent type.
    
    Interfaces not registering their type anymore means that accessing
    superclass::interface by type name will fail when initializing
    subclass::interface.  Thus, we need to pre-initialize the subclass's
    parent_type field before calling type_initialize.  Apart from this, the
    interface "types" should never be used and thus it is harmless to leave
    them out of the hashtable.
    
    Further, the interface types had a bug with interfaces that are
    inherited from a superclass:  The implementation type name was wrong
    (for example it was subclass::superclass::interface rather than
    just subclass::interface).  This patch fixes this as well.
    
    Reported-by: default avatarIgor Mammedov <imammedo@redhat.com>
    Tested-by: default avatarIgor Mammedov <imammedo@redhat.com>
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    Signed-off-by: default avatarAndreas Färber <afaerber@suse.de>
    b061dc41