mirror of
https://github.com/yuzu-emu/unicorn.git
synced 2025-01-10 22:45:36 +00:00
qapi: Avoid use of misnamed DO_UPCAST()
The macro DO_UPCAST() is incorrectly named: it converts from a parent class to a derived class (which is a downcast). Better, and more consistent with some of the other qapi visitors, is to use the container_of() macro through a to_FOO() helper. Names like 'to_ov()' may be a bit short, but for a static helper it doesn't hurt too much, and matches existing practice in files like qmp-input-visitor.c. Our current definition of container_of() is weaker than DO_UPCAST(), in that it does not require the derived class to have Visitor as its first member, but this does not hurt our usage patterns in qapi visitors. Backports commit d7bea75d35a44023efc9d481d3a1a2600677b2ef from qemu
This commit is contained in:
parent
292c67109a
commit
8f8064dc80
|
@ -33,6 +33,11 @@ struct StringInputVisitor
|
||||||
const char *string;
|
const char *string;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static StringInputVisitor *to_siv(Visitor *v)
|
||||||
|
{
|
||||||
|
return container_of(v, StringInputVisitor, visitor);
|
||||||
|
}
|
||||||
|
|
||||||
static void free_range(void *range, void *dummy)
|
static void free_range(void *range, void *dummy)
|
||||||
{
|
{
|
||||||
g_free(range);
|
g_free(range);
|
||||||
|
@ -121,7 +126,7 @@ error:
|
||||||
static void
|
static void
|
||||||
start_list(Visitor *v, const char *name, Error **errp)
|
start_list(Visitor *v, const char *name, Error **errp)
|
||||||
{
|
{
|
||||||
StringInputVisitor *siv = DO_UPCAST(StringInputVisitor, visitor, v);
|
StringInputVisitor *siv = to_siv(v);
|
||||||
|
|
||||||
parse_str(siv, errp);
|
parse_str(siv, errp);
|
||||||
|
|
||||||
|
@ -137,7 +142,7 @@ start_list(Visitor *v, const char *name, Error **errp)
|
||||||
static GenericList *
|
static GenericList *
|
||||||
next_list(Visitor *v, GenericList **list, Error **errp)
|
next_list(Visitor *v, GenericList **list, Error **errp)
|
||||||
{
|
{
|
||||||
StringInputVisitor *siv = DO_UPCAST(StringInputVisitor, visitor, v);
|
StringInputVisitor *siv = to_siv(v);
|
||||||
GenericList **link;
|
GenericList **link;
|
||||||
Range *r;
|
Range *r;
|
||||||
|
|
||||||
|
@ -176,14 +181,14 @@ next_list(Visitor *v, GenericList **list, Error **errp)
|
||||||
static void
|
static void
|
||||||
end_list(Visitor *v, Error **errp)
|
end_list(Visitor *v, Error **errp)
|
||||||
{
|
{
|
||||||
StringInputVisitor *siv = DO_UPCAST(StringInputVisitor, visitor, v);
|
StringInputVisitor *siv = to_siv(v);
|
||||||
siv->head = true;
|
siv->head = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void parse_type_int(Visitor *v, int64_t *obj, const char *name,
|
static void parse_type_int(Visitor *v, int64_t *obj, const char *name,
|
||||||
Error **errp)
|
Error **errp)
|
||||||
{
|
{
|
||||||
StringInputVisitor *siv = DO_UPCAST(StringInputVisitor, visitor, v);
|
StringInputVisitor *siv = to_siv(v);
|
||||||
|
|
||||||
if (!siv->string) {
|
if (!siv->string) {
|
||||||
error_setg(errp, QERR_INVALID_PARAMETER_TYPE, name ? name : "null",
|
error_setg(errp, QERR_INVALID_PARAMETER_TYPE, name ? name : "null",
|
||||||
|
@ -225,7 +230,7 @@ error:
|
||||||
static void parse_type_bool(Visitor *v, bool *obj, const char *name,
|
static void parse_type_bool(Visitor *v, bool *obj, const char *name,
|
||||||
Error **errp)
|
Error **errp)
|
||||||
{
|
{
|
||||||
StringInputVisitor *siv = DO_UPCAST(StringInputVisitor, visitor, v);
|
StringInputVisitor *siv = to_siv(v);
|
||||||
|
|
||||||
if (siv->string) {
|
if (siv->string) {
|
||||||
if (!strcasecmp(siv->string, "on") ||
|
if (!strcasecmp(siv->string, "on") ||
|
||||||
|
@ -249,7 +254,7 @@ static void parse_type_bool(Visitor *v, bool *obj, const char *name,
|
||||||
static void parse_type_str(Visitor *v, char **obj, const char *name,
|
static void parse_type_str(Visitor *v, char **obj, const char *name,
|
||||||
Error **errp)
|
Error **errp)
|
||||||
{
|
{
|
||||||
StringInputVisitor *siv = DO_UPCAST(StringInputVisitor, visitor, v);
|
StringInputVisitor *siv = to_siv(v);
|
||||||
if (siv->string) {
|
if (siv->string) {
|
||||||
*obj = g_strdup(siv->string);
|
*obj = g_strdup(siv->string);
|
||||||
} else {
|
} else {
|
||||||
|
@ -261,7 +266,7 @@ static void parse_type_str(Visitor *v, char **obj, const char *name,
|
||||||
static void parse_type_number(Visitor *v, double *obj, const char *name,
|
static void parse_type_number(Visitor *v, double *obj, const char *name,
|
||||||
Error **errp)
|
Error **errp)
|
||||||
{
|
{
|
||||||
StringInputVisitor *siv = DO_UPCAST(StringInputVisitor, visitor, v);
|
StringInputVisitor *siv = to_siv(v);
|
||||||
char *endp = (char *) siv->string;
|
char *endp = (char *) siv->string;
|
||||||
double val;
|
double val;
|
||||||
|
|
||||||
|
@ -281,7 +286,7 @@ static void parse_type_number(Visitor *v, double *obj, const char *name,
|
||||||
static void parse_optional(Visitor *v, bool *present, const char *name,
|
static void parse_optional(Visitor *v, bool *present, const char *name,
|
||||||
Error **errp)
|
Error **errp)
|
||||||
{
|
{
|
||||||
StringInputVisitor *siv = DO_UPCAST(StringInputVisitor, visitor, v);
|
StringInputVisitor *siv = to_siv(v);
|
||||||
|
|
||||||
if (!siv->string) {
|
if (!siv->string) {
|
||||||
*present = false;
|
*present = false;
|
||||||
|
|
Loading…
Reference in a new issue