qom: Assert that public types have a non-NULL parent field

This protects against unwanted effects of changing TYPE_OBJECT from
NULL to a string.

Suggested-by: Andreas Färber <afaerber@suse.de>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Andreas Färber <afaerber@suse.de>
This commit is contained in:
Paolo Bonzini 2012-04-04 15:58:40 +02:00 committed by Andreas Färber
parent 9c4b4cc436
commit 049cb3cfda
1 changed files with 10 additions and 4 deletions

View File

@ -95,7 +95,7 @@ static TypeImpl *type_table_lookup(const char *name)
return g_hash_table_lookup(type_table_get(), name);
}
TypeImpl *type_register(const TypeInfo *info)
static TypeImpl *type_register_internal(const TypeInfo *info)
{
TypeImpl *ti = g_malloc0(sizeof(*ti));
@ -137,6 +137,12 @@ TypeImpl *type_register(const TypeInfo *info)
return ti;
}
TypeImpl *type_register(const TypeInfo *info)
{
assert(info->parent);
return type_register_internal(info);
}
TypeImpl *type_register_static(const TypeInfo *info)
{
return type_register(info);
@ -204,7 +210,7 @@ static void type_class_interface_init(TypeImpl *ti, InterfaceImpl *iface)
char *name = g_strdup_printf("<%s::%s>", ti->name, iface->parent);
info.name = name;
iface->type = type_register(&info);
iface->type = type_register_internal(&info);
g_free(name);
}
@ -1239,8 +1245,8 @@ static void register_types(void)
.abstract = true,
};
type_interface = type_register_static(&interface_info);
type_register_static(&object_info);
type_interface = type_register_internal(&interface_info);
type_register_internal(&object_info);
}
type_init(register_types)