mirror of
https://github.com/yuzu-emu/unicorn.git
synced 2025-02-25 06:46:46 +00:00
machine: Set MachineClass::name automatically
Now all TYPE_MACHINE subclasses use MACHINE_TYPE_NAME to generate the class name. So instead of requiring each subclass to set MachineClass::name manually, we can now set it automatically at the TYPE_MACHINE class_base_init() function. Backports commit 98cec76a7076c4a38e16f1a9de170a7942b3be54 from qemu
This commit is contained in:
parent
0261df973b
commit
46e1c5482b
|
@ -50,8 +50,7 @@ typedef struct {
|
|||
bool secure;
|
||||
} VirtMachineState;
|
||||
|
||||
#define VIRT_MACHINE_NAME "virt"
|
||||
#define TYPE_VIRT_MACHINE MACHINE_TYPE_NAME(VIRT_MACHINE_NAME)
|
||||
#define TYPE_VIRT_MACHINE MACHINE_TYPE_NAME("virt")
|
||||
#define VIRT_MACHINE(uc, obj) \
|
||||
OBJECT_CHECK((uc), VirtMachineState, (obj), TYPE_VIRT_MACHINE)
|
||||
#define VIRT_MACHINE_GET_CLASS(uc, obj) \
|
||||
|
@ -121,7 +120,6 @@ static void virt_class_init(struct uc_struct *uc, ObjectClass *oc, void *data)
|
|||
{
|
||||
MachineClass *mc = MACHINE_CLASS(uc, oc);
|
||||
|
||||
mc->name = VIRT_MACHINE_NAME;
|
||||
mc->init = machvirt_init;
|
||||
mc->max_cpus = 8;
|
||||
mc->is_default = 1;
|
||||
|
|
|
@ -15,11 +15,14 @@
|
|||
#include "qapi/error.h"
|
||||
#include "qemu/cutils.h"
|
||||
|
||||
static void machine_class_base_init(ObjectClass *oc, void *data)
|
||||
static void machine_class_base_init(struct uc_struct *uc, ObjectClass *oc, void *data)
|
||||
{
|
||||
if (!object_class_is_abstract(oc)) {
|
||||
MachineClass *mc = MACHINE_CLASS(uc, oc);
|
||||
const char *cname = object_class_get_name(oc);
|
||||
assert(g_str_has_suffix(cname, TYPE_MACHINE_SUFFIX));
|
||||
mc->name = g_strndup(cname,
|
||||
strlen(cname) - strlen(TYPE_MACHINE_SUFFIX));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -271,7 +271,7 @@ static void device_finalize(struct uc_struct *uc, Object *obj, void *opaque)
|
|||
{
|
||||
}
|
||||
|
||||
static void device_class_base_init(ObjectClass *class, void *data)
|
||||
static void device_class_base_init(struct uc_struct *uc, ObjectClass *class, void *data)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
|
@ -489,8 +489,8 @@ struct TypeInfo
|
|||
void *class_data;
|
||||
|
||||
void (*class_init)(struct uc_struct *uc, ObjectClass *klass, void *data);
|
||||
void (*class_base_init)(ObjectClass *klass, void *data);
|
||||
void (*class_finalize)(ObjectClass *klass, void *data);
|
||||
void (*class_base_init)(struct uc_struct *uc, ObjectClass *klass, void *data);
|
||||
void (*class_finalize)(struct uc_struct *uc, ObjectClass *klass, void *data);
|
||||
|
||||
bool abstract;
|
||||
|
||||
|
|
|
@ -48,8 +48,8 @@ struct TypeImpl
|
|||
void *instance_userdata;
|
||||
|
||||
void (*class_init)(struct uc_struct *uc, ObjectClass *klass, void *data);
|
||||
void (*class_base_init)(ObjectClass *klass, void *data);
|
||||
void (*class_finalize)(ObjectClass *klass, void *data);
|
||||
void (*class_base_init)(struct uc_struct *uc, ObjectClass *klass, void *data);
|
||||
void (*class_finalize)(struct uc_struct *uc, ObjectClass *klass, void *data);
|
||||
|
||||
void *class_data;
|
||||
|
||||
|
@ -320,7 +320,7 @@ static void type_initialize(struct uc_struct *uc, TypeImpl *ti)
|
|||
|
||||
while (parent) {
|
||||
if (parent->class_base_init) {
|
||||
parent->class_base_init(ti->class, ti->class_data);
|
||||
parent->class_base_init(uc, ti->class, ti->class_data);
|
||||
}
|
||||
parent = type_get_parent(uc, parent);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue