mirror of
https://github.com/yuzu-emu/unicorn.git
synced 2025-02-01 23:11:02 +00:00
qobject: Ensure base is at offset 0
All QObject types have the base QObject as their first field. This allows the simplification of qobject_to(). Backports commit 7ee9edfdb117da47c86c9764d90f0be11a648666 from qemu
This commit is contained in:
parent
ec12091943
commit
2ca916e106
|
@ -65,9 +65,8 @@ struct QObject {
|
|||
QEMU_BUILD_BUG_MSG(QTYPE__MAX != 7,
|
||||
"The QTYPE_CAST_TO_* list needs to be extended");
|
||||
|
||||
#define qobject_to(type, obj) ({ \
|
||||
QObject *_tmp = qobject_check_type(obj, glue(QTYPE_CAST_TO_, type)); \
|
||||
_tmp ? container_of(_tmp, type, base) : (type *)NULL; })
|
||||
#define qobject_to(type, obj) \
|
||||
((type *)qobject_check_type(obj, glue(QTYPE_CAST_TO_, type)))
|
||||
|
||||
/* Initialize an object to default values */
|
||||
static inline void qobject_init(QObject *obj, QType type)
|
||||
|
|
|
@ -15,6 +15,15 @@
|
|||
#include "qapi/qmp/qlist.h"
|
||||
#include "qapi/qmp/qstring.h"
|
||||
|
||||
QEMU_BUILD_BUG_MSG(
|
||||
offsetof(QNull, base) != 0 ||
|
||||
offsetof(QNum, base) != 0 ||
|
||||
offsetof(QString, base) != 0 ||
|
||||
offsetof(QDict, base) != 0 ||
|
||||
offsetof(QList, base) != 0 ||
|
||||
offsetof(QBool, base) != 0,
|
||||
"base qobject must be at offset 0");
|
||||
|
||||
static void (*qdestroy[QTYPE__MAX])(QObject *) = {
|
||||
NULL, /* No such object exists */
|
||||
NULL, /* qnull_ is indestructible */
|
||||
|
|
Loading…
Reference in a new issue