Lin Ma <l...@suse.com> writes: > Signed-off-by: Lin Ma <l...@suse.com> > --- > qom/object.c | 6 +++++- > 1 file changed, 5 insertions(+), 1 deletion(-) > > diff --git a/qom/object.c b/qom/object.c > index 7a05e35..4096645 100644 > --- a/qom/object.c > +++ b/qom/object.c > @@ -747,7 +747,11 @@ ObjectClass *object_get_class(Object *obj) > > bool object_class_is_abstract(ObjectClass *klass) > { > - return klass->type->abstract; > + if (type_is_ancestor(klass->type, type_interface)) { > + return true; > + } else { > + return klass->type->abstract; > + } > } > > const char *object_class_get_name(ObjectClass *klass)
Pardon my ignorance... If all types derived from type_interface are abstract, why aren't we setting ->abstract right when such a type is defined? Hmm, perhaps we do? type_initialize_interface() sets info.abstract = true... In case we don't: what about other uses of ->abstract? Why is it okay not to check whether type_interface is an ancestore there?