瀏覽代碼

qom: Remove ParentClassType argument from OBJECT_DECLARE_SIMPLE_TYPE

The requirement to specify the parent class type makes the macro
harder to use and easy to misuse (silent bugs can be introduced
if the wrong struct type is specified).

Simplify the macro by just not declaring any class struct,
allowing us to remove the class_size field from the TypeInfo
variables for those types.

Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Message-Id: <20200916182519.415636-3-ehabkost@redhat.com>
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
Eduardo Habkost 5 年之前
父節點
當前提交
c734cd40a1

+ 0 - 1
authz/list.c

@@ -252,7 +252,6 @@ static const TypeInfo qauthz_list_info = {
     .name = TYPE_QAUTHZ_LIST,
     .name = TYPE_QAUTHZ_LIST,
     .instance_size = sizeof(QAuthZList),
     .instance_size = sizeof(QAuthZList),
     .instance_finalize = qauthz_list_finalize,
     .instance_finalize = qauthz_list_finalize,
-    .class_size = sizeof(QAuthZListClass),
     .class_init = qauthz_list_class_init,
     .class_init = qauthz_list_class_init,
     .interfaces = (InterfaceInfo[]) {
     .interfaces = (InterfaceInfo[]) {
         { TYPE_USER_CREATABLE },
         { TYPE_USER_CREATABLE },

+ 0 - 1
authz/listfile.c

@@ -263,7 +263,6 @@ static const TypeInfo qauthz_list_file_info = {
     .instance_init = qauthz_list_file_init,
     .instance_init = qauthz_list_file_init,
     .instance_size = sizeof(QAuthZListFile),
     .instance_size = sizeof(QAuthZListFile),
     .instance_finalize = qauthz_list_file_finalize,
     .instance_finalize = qauthz_list_file_finalize,
-    .class_size = sizeof(QAuthZListFileClass),
     .class_init = qauthz_list_file_class_init,
     .class_init = qauthz_list_file_class_init,
     .interfaces = (InterfaceInfo[]) {
     .interfaces = (InterfaceInfo[]) {
         { TYPE_USER_CREATABLE },
         { TYPE_USER_CREATABLE },

+ 0 - 1
authz/pamacct.c

@@ -129,7 +129,6 @@ static const TypeInfo qauthz_pam_info = {
     .name = TYPE_QAUTHZ_PAM,
     .name = TYPE_QAUTHZ_PAM,
     .instance_size = sizeof(QAuthZPAM),
     .instance_size = sizeof(QAuthZPAM),
     .instance_finalize = qauthz_pam_finalize,
     .instance_finalize = qauthz_pam_finalize,
-    .class_size = sizeof(QAuthZPAMClass),
     .class_init = qauthz_pam_class_init,
     .class_init = qauthz_pam_class_init,
     .interfaces = (InterfaceInfo[]) {
     .interfaces = (InterfaceInfo[]) {
         { TYPE_USER_CREATABLE },
         { TYPE_USER_CREATABLE },

+ 0 - 1
authz/simple.c

@@ -96,7 +96,6 @@ static const TypeInfo qauthz_simple_info = {
     .name = TYPE_QAUTHZ_SIMPLE,
     .name = TYPE_QAUTHZ_SIMPLE,
     .instance_size = sizeof(QAuthZSimple),
     .instance_size = sizeof(QAuthZSimple),
     .instance_finalize = qauthz_simple_finalize,
     .instance_finalize = qauthz_simple_finalize,
-    .class_size = sizeof(QAuthZSimpleClass),
     .class_init = qauthz_simple_class_init,
     .class_init = qauthz_simple_class_init,
     .interfaces = (InterfaceInfo[]) {
     .interfaces = (InterfaceInfo[]) {
         { TYPE_USER_CREATABLE },
         { TYPE_USER_CREATABLE },

+ 1 - 2
backends/dbus-vmstate.c

@@ -24,7 +24,7 @@
 
 
 #define TYPE_DBUS_VMSTATE "dbus-vmstate"
 #define TYPE_DBUS_VMSTATE "dbus-vmstate"
 OBJECT_DECLARE_SIMPLE_TYPE(DBusVMState, dbus_vmstate,
 OBJECT_DECLARE_SIMPLE_TYPE(DBusVMState, dbus_vmstate,
-                           DBUS_VMSTATE, ObjectClass)
+                           DBUS_VMSTATE)
 
 
 
 
 struct DBusVMState {
 struct DBusVMState {
@@ -483,7 +483,6 @@ static const TypeInfo dbus_vmstate_info = {
     .parent = TYPE_OBJECT,
     .parent = TYPE_OBJECT,
     .instance_size = sizeof(DBusVMState),
     .instance_size = sizeof(DBusVMState),
     .instance_finalize = dbus_vmstate_finalize,
     .instance_finalize = dbus_vmstate_finalize,
-    .class_size = sizeof(DBusVMStateClass),
     .class_init = dbus_vmstate_class_init,
     .class_init = dbus_vmstate_class_init,
     .interfaces = (InterfaceInfo[]) {
     .interfaces = (InterfaceInfo[]) {
         { TYPE_USER_CREATABLE },
         { TYPE_USER_CREATABLE },

+ 0 - 1
backends/vhost-user.c

@@ -197,7 +197,6 @@ static const TypeInfo vhost_user_backend_info = {
     .instance_size = sizeof(VhostUserBackend),
     .instance_size = sizeof(VhostUserBackend),
     .instance_init = vhost_user_backend_init,
     .instance_init = vhost_user_backend_init,
     .instance_finalize = vhost_user_backend_finalize,
     .instance_finalize = vhost_user_backend_finalize,
-    .class_size = sizeof(VhostUserBackendClass),
 };
 };
 
 
 static void register_types(void)
 static void register_types(void)

+ 0 - 1
crypto/secret_keyring.c

@@ -129,7 +129,6 @@ static const TypeInfo qcrypto_secret_info = {
     .parent = TYPE_QCRYPTO_SECRET_COMMON,
     .parent = TYPE_QCRYPTO_SECRET_COMMON,
     .name = TYPE_QCRYPTO_SECRET_KEYRING,
     .name = TYPE_QCRYPTO_SECRET_KEYRING,
     .instance_size = sizeof(QCryptoSecretKeyring),
     .instance_size = sizeof(QCryptoSecretKeyring),
-    .class_size = sizeof(QCryptoSecretKeyringClass),
     .class_init = qcrypto_secret_keyring_class_init,
     .class_init = qcrypto_secret_keyring_class_init,
     .interfaces = (InterfaceInfo[]) {
     .interfaces = (InterfaceInfo[]) {
         { TYPE_USER_CREATABLE },
         { TYPE_USER_CREATABLE },

+ 1 - 1
include/authz/list.h

@@ -28,7 +28,7 @@
 #define TYPE_QAUTHZ_LIST "authz-list"
 #define TYPE_QAUTHZ_LIST "authz-list"
 
 
 OBJECT_DECLARE_SIMPLE_TYPE(QAuthZList, qauthz_list,
 OBJECT_DECLARE_SIMPLE_TYPE(QAuthZList, qauthz_list,
-                           QAUTHZ_LIST, QAuthZClass)
+                           QAUTHZ_LIST)
 
 
 
 
 
 

+ 1 - 1
include/authz/listfile.h

@@ -28,7 +28,7 @@
 #define TYPE_QAUTHZ_LIST_FILE "authz-list-file"
 #define TYPE_QAUTHZ_LIST_FILE "authz-list-file"
 
 
 OBJECT_DECLARE_SIMPLE_TYPE(QAuthZListFile, qauthz_list_file,
 OBJECT_DECLARE_SIMPLE_TYPE(QAuthZListFile, qauthz_list_file,
-                           QAUTHZ_LIST_FILE, QAuthZClass)
+                           QAUTHZ_LIST_FILE)
 
 
 
 
 
 

+ 1 - 1
include/authz/pamacct.h

@@ -28,7 +28,7 @@
 #define TYPE_QAUTHZ_PAM "authz-pam"
 #define TYPE_QAUTHZ_PAM "authz-pam"
 
 
 OBJECT_DECLARE_SIMPLE_TYPE(QAuthZPAM, qauthz_pam,
 OBJECT_DECLARE_SIMPLE_TYPE(QAuthZPAM, qauthz_pam,
-                           QAUTHZ_PAM, QAuthZClass)
+                           QAUTHZ_PAM)
 
 
 
 
 
 

+ 1 - 1
include/authz/simple.h

@@ -27,7 +27,7 @@
 #define TYPE_QAUTHZ_SIMPLE "authz-simple"
 #define TYPE_QAUTHZ_SIMPLE "authz-simple"
 
 
 OBJECT_DECLARE_SIMPLE_TYPE(QAuthZSimple, qauthz_simple,
 OBJECT_DECLARE_SIMPLE_TYPE(QAuthZSimple, qauthz_simple,
-                           QAUTHZ_SIMPLE, QAuthZClass)
+                           QAUTHZ_SIMPLE)
 
 
 
 
 
 

+ 1 - 1
include/crypto/secret_keyring.h

@@ -27,7 +27,7 @@
 
 
 #define TYPE_QCRYPTO_SECRET_KEYRING "secret_keyring"
 #define TYPE_QCRYPTO_SECRET_KEYRING "secret_keyring"
 OBJECT_DECLARE_SIMPLE_TYPE(QCryptoSecretKeyring, qcrypto_secret_keyring,
 OBJECT_DECLARE_SIMPLE_TYPE(QCryptoSecretKeyring, qcrypto_secret_keyring,
-                           QCRYPTO_SECRET_KEYRING, QCryptoSecretCommonClass)
+                           QCRYPTO_SECRET_KEYRING)
 
 
 
 
 struct QCryptoSecretKeyring {
 struct QCryptoSecretKeyring {

+ 1 - 1
include/io/dns-resolver.h

@@ -27,7 +27,7 @@
 
 
 #define TYPE_QIO_DNS_RESOLVER "qio-dns-resolver"
 #define TYPE_QIO_DNS_RESOLVER "qio-dns-resolver"
 OBJECT_DECLARE_SIMPLE_TYPE(QIODNSResolver, qio_dns_resolver,
 OBJECT_DECLARE_SIMPLE_TYPE(QIODNSResolver, qio_dns_resolver,
-                           QIO_DNS_RESOLVER, ObjectClass)
+                           QIO_DNS_RESOLVER)
 
 
 
 
 /**
 /**

+ 1 - 1
include/io/net-listener.h

@@ -26,7 +26,7 @@
 
 
 #define TYPE_QIO_NET_LISTENER "qio-net-listener"
 #define TYPE_QIO_NET_LISTENER "qio-net-listener"
 OBJECT_DECLARE_SIMPLE_TYPE(QIONetListener, qio_net_listener,
 OBJECT_DECLARE_SIMPLE_TYPE(QIONetListener, qio_net_listener,
-                           QIO_NET_LISTENER, ObjectClass)
+                           QIO_NET_LISTENER)
 
 
 
 
 typedef void (*QIONetListenerClientFunc)(QIONetListener *listener,
 typedef void (*QIONetListenerClientFunc)(QIONetListener *listener,

+ 8 - 8
include/qom/object.h

@@ -639,19 +639,19 @@ struct Object
  * @InstanceType: instance struct name
  * @InstanceType: instance struct name
  * @module_obj_name: the object name in lowercase with underscore separators
  * @module_obj_name: the object name in lowercase with underscore separators
  * @MODULE_OBJ_NAME: the object name in uppercase with underscore separators
  * @MODULE_OBJ_NAME: the object name in uppercase with underscore separators
- * @ParentClassType: class struct name of parent type
  *
  *
- * This does the same as OBJECT_DECLARE_TYPE(), but also declares
- * the class struct, thus only the object struct needs to be declare
- * manually.
+ * This does the same as OBJECT_DECLARE_TYPE(), but with no class struct
+ * declared.
  *
  *
  * This macro should be used unless the class struct needs to have
  * This macro should be used unless the class struct needs to have
  * virtual methods declared.
  * virtual methods declared.
  */
  */
-#define OBJECT_DECLARE_SIMPLE_TYPE(InstanceType, module_obj_name, \
-                                   MODULE_OBJ_NAME, ParentClassType) \
-    OBJECT_DECLARE_TYPE(InstanceType, InstanceType##Class, module_obj_name, MODULE_OBJ_NAME) \
-    struct InstanceType##Class { ParentClassType parent_class; };
+#define OBJECT_DECLARE_SIMPLE_TYPE(InstanceType, module_obj_name, MODULE_OBJ_NAME) \
+    typedef struct InstanceType InstanceType; \
+    \
+    G_DEFINE_AUTOPTR_CLEANUP_FUNC(InstanceType, object_unref) \
+    \
+    DECLARE_INSTANCE_CHECKER(InstanceType, MODULE_OBJ_NAME, TYPE_##MODULE_OBJ_NAME)
 
 
 
 
 /**
 /**

+ 1 - 1
include/sysemu/vhost-user-backend.h

@@ -23,7 +23,7 @@
 
 
 #define TYPE_VHOST_USER_BACKEND "vhost-user-backend"
 #define TYPE_VHOST_USER_BACKEND "vhost-user-backend"
 OBJECT_DECLARE_SIMPLE_TYPE(VhostUserBackend, vhost_user_backend,
 OBJECT_DECLARE_SIMPLE_TYPE(VhostUserBackend, vhost_user_backend,
-                           VHOST_USER_BACKEND, ObjectClass)
+                           VHOST_USER_BACKEND)
 
 
 
 
 
 

+ 0 - 1
io/dns-resolver.c

@@ -267,7 +267,6 @@ static const TypeInfo qio_dns_resolver_info = {
     .parent = TYPE_OBJECT,
     .parent = TYPE_OBJECT,
     .name = TYPE_QIO_DNS_RESOLVER,
     .name = TYPE_QIO_DNS_RESOLVER,
     .instance_size = sizeof(QIODNSResolver),
     .instance_size = sizeof(QIODNSResolver),
-    .class_size = sizeof(QIODNSResolverClass),
 };
 };
 
 
 
 

+ 0 - 1
io/net-listener.c

@@ -307,7 +307,6 @@ static const TypeInfo qio_net_listener_info = {
     .name = TYPE_QIO_NET_LISTENER,
     .name = TYPE_QIO_NET_LISTENER,
     .instance_size = sizeof(QIONetListener),
     .instance_size = sizeof(QIONetListener),
     .instance_finalize = qio_net_listener_finalize,
     .instance_finalize = qio_net_listener_finalize,
-    .class_size = sizeof(QIONetListenerClass),
 };
 };
 
 
 
 

+ 1 - 2
ui/input-barrier.c

@@ -21,7 +21,7 @@
 
 
 #define TYPE_INPUT_BARRIER "input-barrier"
 #define TYPE_INPUT_BARRIER "input-barrier"
 OBJECT_DECLARE_SIMPLE_TYPE(InputBarrier, input_barrier,
 OBJECT_DECLARE_SIMPLE_TYPE(InputBarrier, input_barrier,
-                           INPUT_BARRIER, ObjectClass)
+                           INPUT_BARRIER)
 
 
 
 
 #define MAX_HELLO_LENGTH 1024
 #define MAX_HELLO_LENGTH 1024
@@ -723,7 +723,6 @@ static void input_barrier_class_init(ObjectClass *oc, void *data)
 static const TypeInfo input_barrier_info = {
 static const TypeInfo input_barrier_info = {
     .name = TYPE_INPUT_BARRIER,
     .name = TYPE_INPUT_BARRIER,
     .parent = TYPE_OBJECT,
     .parent = TYPE_OBJECT,
-    .class_size = sizeof(InputBarrierClass),
     .class_init = input_barrier_class_init,
     .class_init = input_barrier_class_init,
     .instance_size = sizeof(InputBarrier),
     .instance_size = sizeof(InputBarrier),
     .instance_init = input_barrier_instance_init,
     .instance_init = input_barrier_instance_init,

+ 1 - 2
ui/input-linux.c

@@ -32,7 +32,7 @@ static bool linux_is_button(unsigned int lnx)
 
 
 #define TYPE_INPUT_LINUX "input-linux"
 #define TYPE_INPUT_LINUX "input-linux"
 OBJECT_DECLARE_SIMPLE_TYPE(InputLinux, input_linux,
 OBJECT_DECLARE_SIMPLE_TYPE(InputLinux, input_linux,
-                           INPUT_LINUX, ObjectClass)
+                           INPUT_LINUX)
 
 
 
 
 struct InputLinux {
 struct InputLinux {
@@ -514,7 +514,6 @@ static void input_linux_class_init(ObjectClass *oc, void *data)
 static const TypeInfo input_linux_info = {
 static const TypeInfo input_linux_info = {
     .name = TYPE_INPUT_LINUX,
     .name = TYPE_INPUT_LINUX,
     .parent = TYPE_OBJECT,
     .parent = TYPE_OBJECT,
-    .class_size = sizeof(InputLinuxClass),
     .class_init = input_linux_class_init,
     .class_init = input_linux_class_init,
     .instance_size = sizeof(InputLinux),
     .instance_size = sizeof(InputLinux),
     .instance_init = input_linux_instance_init,
     .instance_init = input_linux_instance_init,