Message ID | 20250107111308.21886-1-pbonzini@redhat.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | qom: remove unused field | expand |
On Tue, 7 Jan 2025 at 11:14, Paolo Bonzini <pbonzini@redhat.com> wrote: > > The "concrete_class" field of InterfaceClass is only ever written, and as far > as I can tell is not particularly useful when debugging either; remove it. > > Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> I think the reason to have the field would be if we supported "given a pointer to an interface class, get the concrete class"; e.g. supposing i have a ResettableClass *rc it would be nice to be able to do DeviceClass *dc = DEVICE_CLASS(rc); (asserting if your rc isn't actually one provided by a DeviceClass, obviously). This doesn't currently work because we don't have the code to actually do this, but apparently GObject's object model does support this. See this thread from a few years back: https://lore.kernel.org/qemu-devel/CAFEAcA8Q3XZrdLJhJ4Uj1CX6J04ON9f91p=NuJXxA+cnEfdz6Q@mail.gmail.com/ But we've lived without this forever (and the thing I wanted it for back then I ended up not needing), so it seems fine to remove the field now; easy enough to put it back in future if somebody does decide to implement cast-to-concrete-class. Reviewed-by: Peter Maydell <peter.maydell@linaro.org> thanks -- PMM
diff --git a/include/qom/object.h b/include/qom/object.h index 95d6e064d9b..f28ffea9a64 100644 --- a/include/qom/object.h +++ b/include/qom/object.h @@ -573,12 +573,15 @@ struct InterfaceInfo { * * The class for all interfaces. Subclasses of this class should only add * virtual methods. + * + * Note that most of the fields of ObjectClass are unused (all except + * "type", in fact). They are only present in InterfaceClass to allow + * @object_class_dynamic_cast to work with both regular classes and interfaces. */ struct InterfaceClass { ObjectClass parent_class; /* private: */ - ObjectClass *concrete_class; Type interface_type; }; diff --git a/qom/object.c b/qom/object.c index b4c52d055d9..e9dfad854bd 100644 --- a/qom/object.c +++ b/qom/object.c @@ -314,7 +314,6 @@ static void type_initialize_interface(TypeImpl *ti, TypeImpl *interface_type, g_free((char *)info.name); new_iface = (InterfaceClass *)iface_impl->class; - new_iface->concrete_class = ti->class; new_iface->interface_type = interface_type; ti->class->interfaces = g_slist_append(ti->class->interfaces, new_iface);
The "concrete_class" field of InterfaceClass is only ever written, and as far as I can tell is not particularly useful when debugging either; remove it. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> --- include/qom/object.h | 5 ++++- qom/object.c | 1 - 2 files changed, 4 insertions(+), 2 deletions(-)