Re: [Qemu-devel] [PATCH v4 1/5] qom: Add interface check in object_class_is_abstract

2016-11-03 Thread Markus Armbruster
Lin Ma  writes:

> Signed-off-by: Lin Ma 
> ---
>  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?



[Qemu-devel] [PATCH v4 1/5] qom: Add interface check in object_class_is_abstract

2016-10-20 Thread Lin Ma
Signed-off-by: Lin Ma 
---
 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)
-- 
2.9.2