Simple unions predate flat unions. Having both complicates the QAPI schema language and the QAPI generator. We haven't been using simple unions in new code for a long time, because they are less flexible and somewhat awkward on the wire.
Get rid of them. We should've done this long ago. This adds some boilerplate to the schema: $ git-diff --shortstat master qapi 7 files changed, 461 insertions(+), 59 deletions(-) Well worth the language simplification, in my opinion: $ git-diff --stat master scripts/ docs/ docs/devel/qapi-code-gen.rst | 137 ++++++++++--------------------------------- scripts/qapi/common.py | 19 ++---- scripts/qapi/expr.py | 48 +++++++-------- scripts/qapi/schema.py | 101 +++++++------------------------ 4 files changed, 80 insertions(+), 225 deletions(-) The complete diffstat looks even better, but is somewhat misleading, because it's dominated by two tests rewritten in a much more compact way. This series is based on my "[PULL 0/5] QAPI patches patches for 2021-09-13". Based-on: <20210913095038.3040776-1-arm...@redhat.com> Cc: "Daniel P. Berrangé" <berra...@redhat.com> Cc: "Marc-André Lureau" <marcandre.lur...@redhat.com> Cc: Eduardo Habkost <ehabk...@redhat.com> Cc: Gerd Hoffmann <kra...@redhat.com> Cc: Hanna Reitz <hre...@redhat.com> Cc: Kevin Wolf <kw...@redhat.com> Cc: Marcel Apfelbaum <marcel.apfelb...@gmail.com> Cc: Paolo Bonzini <pbonz...@redhat.com> Cc: Stefan Berger <stef...@linux.vnet.ibm.com> Markus Armbruster (22): qapi: Tidy up unusual line breaks qapi: Stop enforcing "type name should not end in 'Kind' qapi: Convert simple union KeyValue to flat one qapi: Convert simple union InputEvent to flat one qapi: Convert simple union TpmTypeOptions to flat one qapi: Convert simple union MemoryDeviceInfo to flat one qapi: Convert simple union ChardevBackend to flat one qapi: Convert simple union SocketAddressLegacy to flat one qapi: Convert simple union ImageInfoSpecific to flat one qapi: Convert simple union TransactionAction to flat one tests/qapi-schema: Prepare for simple union UserDefListUnion removal test-qobject-input-visitor: Wean off UserDefListUnion test-qobject-output-visitor: Wean off UserDefListUnion test-clone-visitor: Wean off UserDefListUnion tests/qapi-schema: Wean off UserDefListUnion tests/qapi-schema: Simple union UserDefListUnion is now unused, drop tests/qapi-schema: Rewrite simple union TestIfUnion to be flat test-clone-visitor: Wean off __org.qemu_x-Union1 tests/qapi-schema: Drop simple union __org.qemu_x-Union1 tests/qapi-schema: Purge simple unions from tests qapi: Drop simple unions test-clone-visitor: Correct an accidental rename docs/devel/qapi-code-gen.rst | 137 ++---- qapi/block-core.json | 56 ++- qapi/char.json | 169 ++++++- qapi/machine.json | 42 +- qapi/sockets.json | 46 +- qapi/tpm.json | 24 +- qapi/transaction.json | 111 ++++- qapi/ui.json | 72 ++- backends/tpm/tpm_emulator.c | 2 +- backends/tpm/tpm_passthrough.c | 2 +- chardev/char-socket.c | 6 +- chardev/char-udp.c | 4 +- monitor/hmp-cmds.c | 8 +- tests/unit/test-clone-visitor.c | 98 ++-- tests/unit/test-qmp-cmds.c | 18 +- tests/unit/test-qobject-input-visitor.c | 460 ++++++------------ tests/unit/test-qobject-output-visitor.c | 391 ++++----------- tests/unit/test-yank.c | 6 +- util/qemu-sockets.c | 8 +- scripts/qapi/expr.py | 27 +- scripts/qapi/schema.py | 101 +--- tests/qapi-schema/args-union.err | 2 +- tests/qapi-schema/args-union.json | 8 +- tests/qapi-schema/bad-base.err | 2 +- tests/qapi-schema/bad-base.json | 8 +- tests/qapi-schema/doc-good.json | 13 +- tests/qapi-schema/doc-good.out | 22 - tests/qapi-schema/doc-good.txt | 20 - tests/qapi-schema/enum-if-invalid.json | 4 +- .../qapi-schema/flat-union-array-branch.json | 2 +- tests/qapi-schema/flat-union-base-union.err | 2 +- tests/qapi-schema/flat-union-base-union.json | 3 + tests/qapi-schema/flat-union-empty.json | 2 +- tests/qapi-schema/flat-union-int-branch.json | 2 +- tests/qapi-schema/flat-union-no-base.err | 2 +- tests/qapi-schema/flat-union-no-base.json | 2 +- tests/qapi-schema/meson.build | 5 - tests/qapi-schema/qapi-schema-test.json | 49 +- tests/qapi-schema/qapi-schema-test.out | 112 +---- tests/qapi-schema/reserved-member-u.json | 2 +- tests/qapi-schema/reserved-type-kind.err | 2 - tests/qapi-schema/reserved-type-kind.json | 2 - tests/qapi-schema/reserved-type-kind.out | 0 tests/qapi-schema/union-base-empty.json | 2 +- .../union-base-no-discriminator.err | 2 +- .../union-base-no-discriminator.json | 2 +- tests/qapi-schema/union-branch-case.err | 2 - tests/qapi-schema/union-branch-case.json | 2 - tests/qapi-schema/union-branch-case.out | 0 .../qapi-schema/union-branch-invalid-dict.err | 2 +- .../union-branch-invalid-dict.json | 4 + tests/qapi-schema/union-clash-branches.err | 2 - tests/qapi-schema/union-clash-branches.json | 7 - tests/qapi-schema/union-clash-branches.out | 0 tests/qapi-schema/union-empty.err | 2 - tests/qapi-schema/union-empty.json | 2 - tests/qapi-schema/union-empty.out | 0 tests/qapi-schema/union-optional-branch.err | 2 - tests/qapi-schema/union-optional-branch.json | 2 - tests/qapi-schema/union-optional-branch.out | 0 tests/qapi-schema/union-unknown.err | 2 +- tests/qapi-schema/union-unknown.json | 5 +- 62 files changed, 936 insertions(+), 1158 deletions(-) delete mode 100644 tests/qapi-schema/reserved-type-kind.err delete mode 100644 tests/qapi-schema/reserved-type-kind.json delete mode 100644 tests/qapi-schema/reserved-type-kind.out delete mode 100644 tests/qapi-schema/union-branch-case.err delete mode 100644 tests/qapi-schema/union-branch-case.json delete mode 100644 tests/qapi-schema/union-branch-case.out delete mode 100644 tests/qapi-schema/union-clash-branches.err delete mode 100644 tests/qapi-schema/union-clash-branches.json delete mode 100644 tests/qapi-schema/union-clash-branches.out delete mode 100644 tests/qapi-schema/union-empty.err delete mode 100644 tests/qapi-schema/union-empty.json delete mode 100644 tests/qapi-schema/union-empty.out delete mode 100644 tests/qapi-schema/union-optional-branch.err delete mode 100644 tests/qapi-schema/union-optional-branch.json delete mode 100644 tests/qapi-schema/union-optional-branch.out -- 2.31.1