Still RFC because it depends on Markus' RFC v3: https://lists.gnu.org/archive/html/qemu-devel/2015-08/msg00426.html
v1 was here: https://lists.gnu.org/archive/html/qemu-devel/2015-07/msg05266.html https://lists.gnu.org/archive/html/qemu-devel/2015-07/msg05325.html In v2: rebase to Markus' v3 series rework how comments are emitted for fields inherited from base additional patches added for deleting colliding 'void *data' documentation updates to match code changes Eric Blake (12): qapi: use 'type' in generated C code to match QMP union wire form vnc: hoist allocation of VncBasicInfo to callers qapi: Unbox base members qapi-visit: Remove redundant functions for flat union base qapi: Test use of 'number' within alternates qapi: Simplify visiting of alternate types qapi: Fix alternates that accept 'number' but not 'int' qapi: Add tests for empty unions qapi: Rework deallocation of partial struct qapi: Avoid use of 'data' member of qapi unions qapi: Forbid empty unions and useless alternates qapi: Drop useless 'data' member of unions block/qcow2.c | 2 +- block/vmdk.c | 2 +- blockdev.c | 34 ++++---- docs/qapi-code-gen.txt | 16 ++-- hmp.c | 18 ++-- hw/input/hid.c | 2 +- hw/input/ps2.c | 2 +- hw/input/virtio-input-hid.c | 2 +- hw/mem/pc-dimm.c | 2 +- include/qapi/visitor-impl.h | 6 +- include/qapi/visitor.h | 6 +- net/dump.c | 2 +- net/hub.c | 2 +- net/l2tpv3.c | 2 +- net/net.c | 20 ++--- net/slirp.c | 2 +- net/socket.c | 2 +- net/tap.c | 4 +- net/vhost-user.c | 2 +- numa.c | 4 +- qapi/qapi-dealloc-visitor.c | 35 ++------ qapi/qapi-visit-core.c | 24 ++---- qapi/qmp-input-visitor.c | 11 ++- qemu-char.c | 24 +++--- scripts/qapi-types.py | 75 +++++------------ scripts/qapi-visit.py | 76 +++++++++-------- scripts/qapi.py | 35 +++++--- tests/Makefile | 1 + tests/qapi-schema/alternate-empty.err | 1 + tests/qapi-schema/alternate-empty.exit | 1 + tests/qapi-schema/alternate-empty.json | 2 + tests/qapi-schema/alternate-empty.out | 0 tests/qapi-schema/alternate-good.out | 1 - tests/qapi-schema/alternate-nested.json | 2 +- tests/qapi-schema/alternate-unknown.json | 2 +- tests/qapi-schema/flat-union-empty.err | 1 + tests/qapi-schema/flat-union-empty.exit | 1 + tests/qapi-schema/flat-union-empty.json | 4 + tests/qapi-schema/flat-union-empty.out | 0 tests/qapi-schema/qapi-schema-test.json | 10 ++- tests/qapi-schema/qapi-schema-test.out | 24 +++++- tests/qapi-schema/union-empty.err | 1 + tests/qapi-schema/union-empty.exit | 1 + tests/qapi-schema/union-empty.json | 2 + tests/qapi-schema/union-empty.out | 0 tests/test-qmp-commands.c | 17 ++-- tests/test-qmp-event.c | 8 +- tests/test-qmp-input-visitor.c | 140 ++++++++++++++++++++++++++++--- tests/test-qmp-output-visitor.c | 39 +++++---- tests/test-visitor-serialization.c | 14 ++-- tpm.c | 2 +- ui/input-keymap.c | 10 +-- ui/input-legacy.c | 2 +- ui/input.c | 24 +++--- ui/spice-core.c | 23 ++--- ui/vnc.c | 64 +++++++------- util/qemu-sockets.c | 12 +-- 57 files changed, 463 insertions(+), 358 deletions(-) create mode 100644 tests/qapi-schema/alternate-empty.err create mode 100644 tests/qapi-schema/alternate-empty.exit create mode 100644 tests/qapi-schema/alternate-empty.json create mode 100644 tests/qapi-schema/alternate-empty.out create mode 100644 tests/qapi-schema/flat-union-empty.err create mode 100644 tests/qapi-schema/flat-union-empty.exit create mode 100644 tests/qapi-schema/flat-union-empty.json create mode 100644 tests/qapi-schema/flat-union-empty.out create mode 100644 tests/qapi-schema/union-empty.err create mode 100644 tests/qapi-schema/union-empty.exit create mode 100644 tests/qapi-schema/union-empty.json create mode 100644 tests/qapi-schema/union-empty.out -- 2.4.3