Markus Armbruster <arm...@redhat.com> writes: > Markus Armbruster <arm...@redhat.com> writes: > >> Eric Blake <ebl...@redhat.com> writes: >> >>> Now that we elide unnecessary visits of empty types, we can >>> start using the special ':empty' type in more places. By using >>> the empty type as the base class of every explicit struct or >>> union, and as the default data for any command or event, we can >>> simplify later logic in qapi-{visit,commands,event} by merely >>> checking whether the type is empty, without also having to worry >>> whether a type was even supplied.
You rewrite a command's arg_type from None to ':empty', bit not its ret_type. Deepens the assymmetry between the two. >>> Note that gen_object() in qapi-types still has to check for a >>> base, because it is also called for alternates (which have no >>> base). >> >> What about the one in gen_visit_struct()? >> >> if (base and not base.is_empty()) or members: >> ret += mcgen(''' >> visit_type_%(c_name)s_fields(v, obj, &err); >> ''', >> c_name=c_name(name)) >> >>> No change to generated code. >>> >>> Signed-off-by: Eric Blake <ebl...@redhat.com> >>> >>> --- >>> v9: squash in more related changes >>> v8: rebase to earlier changes >>> v7: rebase to earlier changes >>> v6: new patch >>> --- >>> scripts/qapi-commands.py | 17 +++++++------ >>> scripts/qapi-event.py | 5 ++-- >>> scripts/qapi-types.py | 4 +-- >>> scripts/qapi-visit.py | 12 +++++---- >>> scripts/qapi.py | 25 +++++++++--------- >>> tests/qapi-schema/event-case.out | 2 +- >>> tests/qapi-schema/flat-union-empty.out | 1 + >>> tests/qapi-schema/ident-with-escape.out | 1 + >>> tests/qapi-schema/indented-expr.out | 4 +-- >>> tests/qapi-schema/qapi-schema-test.out | 45 >>> ++++++++++++++++++++++++++++++--- >>> tests/qapi-schema/union-clash-data.out | 2 ++ >>> tests/qapi-schema/union-empty.out | 1 + >>> 12 files changed, 83 insertions(+), 36 deletions(-) > > Missing: update to qapi-introspect.py. At least the expressions like > > arg_type or self._schema.the_empty_object_type > > need updating. But so far not the ret_type or self._schema.the_empty_object_type. [...]