diff --git a/scripts/qapi-commands.py b/scripts/qapi-commands.py index 34b6a3a07f..c93470cf2a 100644 --- a/scripts/qapi-commands.py +++ b/scripts/qapi-commands.py @@ -107,7 +107,7 @@ def gen_marshal(name, arg_type, ret_type): ''', c_type=ret_type.c_type()) - if arg_type and arg_type.members: + if arg_type and not arg_type.is_empty(): ret += mcgen(''' Visitor *v; %(c_name)s arg = {0}; @@ -137,7 +137,7 @@ def gen_marshal(name, arg_type, ret_type): ret += gen_call(name, arg_type, ret_type) # 'goto out' produced above for arg_type, and by gen_call() for ret_type - if (arg_type and arg_type.members) or ret_type: + if (arg_type and not arg_type.is_empty()) or ret_type: ret += mcgen(''' out: @@ -145,7 +145,7 @@ out: ret += mcgen(''' error_propagate(errp, err); ''') - if arg_type and arg_type.members: + if arg_type and not arg_type.is_empty(): ret += mcgen(''' visit_free(v); v = qapi_dealloc_visitor_new(); diff --git a/scripts/qapi-event.py b/scripts/qapi-event.py index 9c88627c9f..09c0a2a5d6 100644 --- a/scripts/qapi-event.py +++ b/scripts/qapi-event.py @@ -69,7 +69,7 @@ def gen_event_send(name, arg_type): ''', proto=gen_event_send_proto(name, arg_type)) - if arg_type and arg_type.members: + if arg_type and not arg_type.is_empty(): ret += mcgen(''' QObject *obj; Visitor *v; @@ -88,7 +88,7 @@ def gen_event_send(name, arg_type): ''', name=name) - if arg_type and arg_type.members: + if arg_type and not arg_type.is_empty(): ret += mcgen(''' v = qmp_output_visitor_new(&obj); @@ -116,7 +116,7 @@ def gen_event_send(name, arg_type): ''', c_enum=c_enum_const(event_enum_name, name)) - if arg_type and arg_type.members: + if arg_type and not arg_type.is_empty(): ret += mcgen(''' out: visit_free(v); diff --git a/scripts/qapi-types.py b/scripts/qapi-types.py index 5ace2cf065..dabc42e047 100644 --- a/scripts/qapi-types.py +++ b/scripts/qapi-types.py @@ -91,7 +91,7 @@ struct %(c_name)s { # potential issues with attempting to malloc space for zero-length # structs in C, and also incompatibility with C++ (where an empty # struct is size 1). - if not (base and base.members) and not members and not variants: + if (not base or base.is_empty()) and not members and not variants: ret += mcgen(''' char qapi_dummy_for_empty_struct; ''') diff --git a/scripts/qapi.py b/scripts/qapi.py index 400c4ef4a6..27284be144 100644 --- a/scripts/qapi.py +++ b/scripts/qapi.py @@ -999,6 +999,10 @@ class QAPISchemaObjectType(QAPISchemaType): # _def_predefineds() return self.name.startswith('q_') + def is_empty(self): + assert self.members is not None + return not self.members and not self.variants + def c_name(self): assert self.name != 'q_empty' return QAPISchemaType.c_name(self)