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. v2: * PATCH 03-10: Since tags tidied up [Eric] * PATCH 19: Commit message typo fixed, -Union2 renamed to -Union [Eric] * PATCH 22: New 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 (23): 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 tests/qapi-schema: Rename flat-union-* test cases to union-* test-clone-visitor: Correct an accidental rename docs/devel/qapi-code-gen.rst | 137 ++---- qapi/block-core.json | 59 ++- qapi/char.json | 187 ++++++- qapi/machine.json | 42 +- qapi/sockets.json | 46 +- qapi/tpm.json | 24 +- qapi/transaction.json | 139 +++++- 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 +- tests/qapi-schema/flat-union-array-branch.err | 2 - tests/qapi-schema/flat-union-bad-base.err | 2 - .../flat-union-bad-discriminator.err | 2 - tests/qapi-schema/flat-union-base-any.err | 2 - tests/qapi-schema/flat-union-base-union.err | 2 - tests/qapi-schema/flat-union-clash-member.err | 2 - .../flat-union-discriminator-bad-name.err | 2 - tests/qapi-schema/flat-union-empty.err | 2 - tests/qapi-schema/flat-union-empty.json | 4 - .../flat-union-inline-invalid-dict.err | 2 - tests/qapi-schema/flat-union-int-branch.err | 2 - .../flat-union-invalid-branch-key.err | 2 - .../flat-union-invalid-discriminator.err | 2 - .../flat-union-invalid-if-discriminator.err | 2 - tests/qapi-schema/flat-union-no-base.err | 2 - .../flat-union-optional-discriminator.err | 2 - .../flat-union-string-discriminator.err | 2 - .../flat-union-string-discriminator.out | 0 tests/qapi-schema/meson.build | 35 +- tests/qapi-schema/qapi-schema-test.json | 51 +- tests/qapi-schema/qapi-schema-test.out | 116 ++--- 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-array-branch.err | 2 + ...ay-branch.json => union-array-branch.json} | 2 +- ...rray-branch.out => union-array-branch.out} | 0 tests/qapi-schema/union-bad-base.err | 2 + ...nion-bad-base.json => union-bad-base.json} | 0 ...-union-bad-base.out => union-bad-base.out} | 0 tests/qapi-schema/union-bad-discriminator.err | 2 + ...ator.json => union-bad-discriminator.json} | 0 ...inator.out => union-bad-discriminator.out} | 0 tests/qapi-schema/union-base-any.err | 2 + ...nion-base-any.json => union-base-any.json} | 0 ...-union-base-any.out => union-base-any.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-base-union.err | 2 + ...-base-union.json => union-base-union.json} | 3 + ...on-base-union.out => union-base-union.out} | 0 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-clash-member.err | 2 + ...sh-member.json => union-clash-member.json} | 0 ...lash-member.out => union-clash-member.out} | 0 .../union-discriminator-bad-name.err | 2 + ...json => union-discriminator-bad-name.json} | 0 ...e.out => union-discriminator-bad-name.out} | 0 tests/qapi-schema/union-empty.err | 2 +- tests/qapi-schema/union-empty.json | 6 +- .../qapi-schema/union-inline-invalid-dict.err | 2 + ...ct.json => union-inline-invalid-dict.json} | 0 ...mpty.out => union-inline-invalid-dict.out} | 0 tests/qapi-schema/union-int-branch.err | 2 + ...-int-branch.json => union-int-branch.json} | 2 +- ...-invalid-dict.out => union-int-branch.out} | 0 .../qapi-schema/union-invalid-branch-key.err | 2 + ...key.json => union-invalid-branch-key.json} | 0 ...ranch.out => union-invalid-branch-key.out} | 0 .../union-invalid-discriminator.err | 2 + ....json => union-invalid-discriminator.json} | 0 ...ey.out => union-invalid-discriminator.out} | 0 .../union-invalid-if-discriminator.err | 2 + ...on => union-invalid-if-discriminator.json} | 0 ...out => union-invalid-if-discriminator.out} | 0 tests/qapi-schema/union-no-base.err | 2 + ...-union-no-base.json => union-no-base.json} | 2 +- ...if-discriminator.out => union-no-base.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 .../union-optional-discriminator.err | 2 + ...json => union-optional-discriminator.json} | 0 ...e.out => union-optional-discriminator.out} | 0 .../union-string-discriminator.err | 2 + ...r.json => union-string-discriminator.json} | 0 ...tor.out => union-string-discriminator.out} | 0 tests/qapi-schema/union-unknown.err | 2 +- tests/qapi-schema/union-unknown.json | 5 +- 117 files changed, 1020 insertions(+), 1223 deletions(-) delete mode 100644 tests/qapi-schema/flat-union-array-branch.err delete mode 100644 tests/qapi-schema/flat-union-bad-base.err delete mode 100644 tests/qapi-schema/flat-union-bad-discriminator.err delete mode 100644 tests/qapi-schema/flat-union-base-any.err delete mode 100644 tests/qapi-schema/flat-union-base-union.err delete mode 100644 tests/qapi-schema/flat-union-clash-member.err delete mode 100644 tests/qapi-schema/flat-union-discriminator-bad-name.err delete mode 100644 tests/qapi-schema/flat-union-empty.err delete mode 100644 tests/qapi-schema/flat-union-empty.json delete mode 100644 tests/qapi-schema/flat-union-inline-invalid-dict.err delete mode 100644 tests/qapi-schema/flat-union-int-branch.err delete mode 100644 tests/qapi-schema/flat-union-invalid-branch-key.err delete mode 100644 tests/qapi-schema/flat-union-invalid-discriminator.err delete mode 100644 tests/qapi-schema/flat-union-invalid-if-discriminator.err delete mode 100644 tests/qapi-schema/flat-union-no-base.err delete mode 100644 tests/qapi-schema/flat-union-optional-discriminator.err delete mode 100644 tests/qapi-schema/flat-union-string-discriminator.err delete mode 100644 tests/qapi-schema/flat-union-string-discriminator.out 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 create mode 100644 tests/qapi-schema/union-array-branch.err rename tests/qapi-schema/{flat-union-array-branch.json => union-array-branch.json} (86%) rename tests/qapi-schema/{flat-union-array-branch.out => union-array-branch.out} (100%) create mode 100644 tests/qapi-schema/union-bad-base.err rename tests/qapi-schema/{flat-union-bad-base.json => union-bad-base.json} (100%) rename tests/qapi-schema/{flat-union-bad-base.out => union-bad-base.out} (100%) create mode 100644 tests/qapi-schema/union-bad-discriminator.err rename tests/qapi-schema/{flat-union-bad-discriminator.json => union-bad-discriminator.json} (100%) rename tests/qapi-schema/{flat-union-bad-discriminator.out => union-bad-discriminator.out} (100%) create mode 100644 tests/qapi-schema/union-base-any.err rename tests/qapi-schema/{flat-union-base-any.json => union-base-any.json} (100%) rename tests/qapi-schema/{flat-union-base-any.out => union-base-any.out} (100%) create mode 100644 tests/qapi-schema/union-base-union.err rename tests/qapi-schema/{flat-union-base-union.json => union-base-union.json} (86%) rename tests/qapi-schema/{flat-union-base-union.out => union-base-union.out} (100%) 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 create mode 100644 tests/qapi-schema/union-clash-member.err rename tests/qapi-schema/{flat-union-clash-member.json => union-clash-member.json} (100%) rename tests/qapi-schema/{flat-union-clash-member.out => union-clash-member.out} (100%) create mode 100644 tests/qapi-schema/union-discriminator-bad-name.err rename tests/qapi-schema/{flat-union-discriminator-bad-name.json => union-discriminator-bad-name.json} (100%) rename tests/qapi-schema/{flat-union-discriminator-bad-name.out => union-discriminator-bad-name.out} (100%) create mode 100644 tests/qapi-schema/union-inline-invalid-dict.err rename tests/qapi-schema/{flat-union-inline-invalid-dict.json => union-inline-invalid-dict.json} (100%) rename tests/qapi-schema/{flat-union-empty.out => union-inline-invalid-dict.out} (100%) create mode 100644 tests/qapi-schema/union-int-branch.err rename tests/qapi-schema/{flat-union-int-branch.json => union-int-branch.json} (86%) rename tests/qapi-schema/{flat-union-inline-invalid-dict.out => union-int-branch.out} (100%) create mode 100644 tests/qapi-schema/union-invalid-branch-key.err rename tests/qapi-schema/{flat-union-invalid-branch-key.json => union-invalid-branch-key.json} (100%) rename tests/qapi-schema/{flat-union-int-branch.out => union-invalid-branch-key.out} (100%) create mode 100644 tests/qapi-schema/union-invalid-discriminator.err rename tests/qapi-schema/{flat-union-invalid-discriminator.json => union-invalid-discriminator.json} (100%) rename tests/qapi-schema/{flat-union-invalid-branch-key.out => union-invalid-discriminator.out} (100%) create mode 100644 tests/qapi-schema/union-invalid-if-discriminator.err rename tests/qapi-schema/{flat-union-invalid-if-discriminator.json => union-invalid-if-discriminator.json} (100%) rename tests/qapi-schema/{flat-union-invalid-discriminator.out => union-invalid-if-discriminator.out} (100%) create mode 100644 tests/qapi-schema/union-no-base.err rename tests/qapi-schema/{flat-union-no-base.json => union-no-base.json} (90%) rename tests/qapi-schema/{flat-union-invalid-if-discriminator.out => union-no-base.out} (100%) 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 create mode 100644 tests/qapi-schema/union-optional-discriminator.err rename tests/qapi-schema/{flat-union-optional-discriminator.json => union-optional-discriminator.json} (100%) rename tests/qapi-schema/{flat-union-no-base.out => union-optional-discriminator.out} (100%) create mode 100644 tests/qapi-schema/union-string-discriminator.err rename tests/qapi-schema/{flat-union-string-discriminator.json => union-string-discriminator.json} (100%) rename tests/qapi-schema/{flat-union-optional-discriminator.out => union-string-discriminator.out} (100%) -- 2.31.1