mirror of
https://github.com/yuzu-emu/unicorn.git
synced 2025-02-25 13:26:58 +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;
|
bool secure;
|
||||||
} VirtMachineState;
|
} VirtMachineState;
|
||||||
|
|
||||||
#define VIRT_MACHINE_NAME "virt"
|
#define TYPE_VIRT_MACHINE MACHINE_TYPE_NAME("virt")
|
||||||
#define TYPE_VIRT_MACHINE MACHINE_TYPE_NAME(VIRT_MACHINE_NAME)
|
|
||||||
#define VIRT_MACHINE(uc, obj) \
|
#define VIRT_MACHINE(uc, obj) \
|
||||||
OBJECT_CHECK((uc), VirtMachineState, (obj), TYPE_VIRT_MACHINE)
|
OBJECT_CHECK((uc), VirtMachineState, (obj), TYPE_VIRT_MACHINE)
|
||||||
#define VIRT_MACHINE_GET_CLASS(uc, obj) \
|
#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);
|
MachineClass *mc = MACHINE_CLASS(uc, oc);
|
||||||
|
|
||||||
mc->name = VIRT_MACHINE_NAME;
|
|
||||||
mc->init = machvirt_init;
|
mc->init = machvirt_init;
|
||||||
mc->max_cpus = 8;
|
mc->max_cpus = 8;
|
||||||
mc->is_default = 1;
|
mc->is_default = 1;
|
||||||
|
|
|
@ -15,11 +15,14 @@
|
||||||
#include "qapi/error.h"
|
#include "qapi/error.h"
|
||||||
#include "qemu/cutils.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)) {
|
if (!object_class_is_abstract(oc)) {
|
||||||
|
MachineClass *mc = MACHINE_CLASS(uc, oc);
|
||||||
const char *cname = object_class_get_name(oc);
|
const char *cname = object_class_get_name(oc);
|
||||||
assert(g_str_has_suffix(cname, TYPE_MACHINE_SUFFIX));
|
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_data;
|
||||||
|
|
||||||
void (*class_init)(struct uc_struct *uc, ObjectClass *klass, void *data);
|
void (*class_init)(struct uc_struct *uc, ObjectClass *klass, void *data);
|
||||||
void (*class_base_init)(ObjectClass *klass, void *data);
|
void (*class_base_init)(struct uc_struct *uc, ObjectClass *klass, void *data);
|
||||||
void (*class_finalize)(ObjectClass *klass, void *data);
|
void (*class_finalize)(struct uc_struct *uc, ObjectClass *klass, void *data);
|
||||||
|
|
||||||
bool abstract;
|
bool abstract;
|
||||||
|
|
||||||
|
|
|
@ -48,8 +48,8 @@ struct TypeImpl
|
||||||
void *instance_userdata;
|
void *instance_userdata;
|
||||||
|
|
||||||
void (*class_init)(struct uc_struct *uc, ObjectClass *klass, void *data);
|
void (*class_init)(struct uc_struct *uc, ObjectClass *klass, void *data);
|
||||||
void (*class_base_init)(ObjectClass *klass, void *data);
|
void (*class_base_init)(struct uc_struct *uc, ObjectClass *klass, void *data);
|
||||||
void (*class_finalize)(ObjectClass *klass, void *data);
|
void (*class_finalize)(struct uc_struct *uc, ObjectClass *klass, void *data);
|
||||||
|
|
||||||
void *class_data;
|
void *class_data;
|
||||||
|
|
||||||
|
@ -320,7 +320,7 @@ static void type_initialize(struct uc_struct *uc, TypeImpl *ti)
|
||||||
|
|
||||||
while (parent) {
|
while (parent) {
|
||||||
if (parent->class_base_init) {
|
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);
|
parent = type_get_parent(uc, parent);
|
||||||
}
|
}
|
||||||
|
|
|
@ -182,7 +182,6 @@ static void machine_class_init(struct uc_struct *uc, ObjectClass *oc, void *data
|
||||||
MachineClass *mc = MACHINE_CLASS(uc, oc);
|
MachineClass *mc = MACHINE_CLASS(uc, oc);
|
||||||
QEMUMachine *qm = data;
|
QEMUMachine *qm = data;
|
||||||
|
|
||||||
mc->name = qm->name;
|
|
||||||
mc->init = qm->init;
|
mc->init = qm->init;
|
||||||
mc->max_cpus = qm->max_cpus;
|
mc->max_cpus = qm->max_cpus;
|
||||||
mc->is_default = qm->is_default;
|
mc->is_default = qm->is_default;
|
||||||
|
|
Loading…
Reference in a new issue