After several months of sitting on this, I finally made progress on it. Let's get it in 2.4, and I promise to kick out a v6 (if needed) with much less delay.
We want to eventually allow qapi defaults, by making: 'data':{'*flag':'bool'} shorthand for: 'data':{'flag':{'type':'bool', 'optional':true}} so that the default can be specified: 'data':{'flag':{'type':'bool', 'optional':true, 'default':true}} This series does not quite get us there, but it DOES do a number of other things. It gets rid of the three uses of nested inline structs, changes anonymous unions to use a specific 'alternate' metatype rather than abusing 'union', and fixes lots of other parser bugs found while designing the testsuite. The testsuite changes make the bulk of this series, with a repeating pattern of writing tests that expose weaknesses in the old parser, then beefing up the generator to catch the problem during the initial parse rather than choking with an obscure python message or even causing a C compilation failure. v4 was here: https://lists.gnu.org/archive/html/qemu-devel/2014-09/msg04022.html Changes since then: lots of refactoring; 8 new commits; lots of testsuite additions; address Markus' review comments where I could. However, so much has changed, and so much time elapsed, that it is probably easier to just review this series fresh than to try and compare it to earlier versions. Eric Blake (27): qapi: Document type-safety considerations qapi: Fix generation of 'size' builtin type qapi: Require ASCII in schema qapi: Add some enum tests qapi: Better error messages for bad enums qapi: Add some union tests qapi: Simplify tests of simple unions qapi: Better error messages for bad unions qapi: Prepare for catching more semantic parse errors qapi: Segregate anonymous unions into alternates in generator qapi: Rename anonymous union type in test qapi: Introduce 'alternate' to replace anonymous union qapi: Add some expr tests qapi: Better error messages for bad expressions qapi: Add tests of redefined expressions qapi: Better error messages for duplicated expressions qapi: Unify type bypass and add tests qapi: Add some type check tests qapi: More rigourous checking of types qapi: Require valid names qapi: Whitelist commands that don't return dictionary qapi: More rigorous checking for type safety bypass qapi: Merge UserDefTwo and UserDefNested in tests qapi: Drop tests for inline nested structs qapi: Drop inline nested type in query-version qapi: Drop inline nested types in query-pci qapi: Drop support for inline nested types Fam Zheng (1): qapi: Allow true, false and null in schema json docs/qapi-code-gen.txt | 347 ++++++++++++--- docs/qmp/qmp-spec.txt | 92 +++- hmp.c | 28 +- hw/pci/pci.c | 42 +- qapi-schema.json | 104 +++-- qapi/block-core.json | 6 +- qapi/common.json | 26 +- qga/qapi-schema.json | 8 +- qmp.c | 9 +- scripts/qapi-commands.py | 8 +- scripts/qapi-event.py | 4 +- scripts/qapi-types.py | 61 ++- scripts/qapi-visit.py | 75 ++-- scripts/qapi.py | 469 +++++++++++++++++---- tests/Makefile | 32 +- tests/qapi-schema/alternate-array.err | 1 + tests/qapi-schema/alternate-array.exit | 1 + tests/qapi-schema/alternate-array.json | 6 + tests/qapi-schema/alternate-array.out | 0 tests/qapi-schema/alternate-base.err | 1 + tests/qapi-schema/alternate-base.exit | 1 + tests/qapi-schema/alternate-base.json | 6 + tests/qapi-schema/alternate-base.out | 0 tests/qapi-schema/alternate-clash.err | 1 + tests/qapi-schema/alternate-clash.exit | 1 + tests/qapi-schema/alternate-clash.json | 3 + tests/qapi-schema/alternate-clash.out | 0 tests/qapi-schema/alternate-conflict-dict.err | 1 + tests/qapi-schema/alternate-conflict-dict.exit | 1 + tests/qapi-schema/alternate-conflict-dict.json | 8 + tests/qapi-schema/alternate-conflict-dict.out | 0 tests/qapi-schema/alternate-conflict-string.err | 1 + tests/qapi-schema/alternate-conflict-string.exit | 1 + tests/qapi-schema/alternate-conflict-string.json | 7 + tests/qapi-schema/alternate-conflict-string.out | 0 tests/qapi-schema/alternate-good.err | 0 tests/qapi-schema/alternate-good.exit | 1 + tests/qapi-schema/alternate-good.json | 9 + tests/qapi-schema/alternate-good.out | 6 + tests/qapi-schema/alternate-nested.err | 1 + tests/qapi-schema/alternate-nested.exit | 1 + tests/qapi-schema/alternate-nested.json | 5 + tests/qapi-schema/alternate-nested.out | 0 tests/qapi-schema/alternate-unknown.err | 1 + tests/qapi-schema/alternate-unknown.exit | 1 + tests/qapi-schema/alternate-unknown.json | 3 + tests/qapi-schema/alternate-unknown.out | 0 tests/qapi-schema/bad-base.err | 1 + tests/qapi-schema/bad-base.exit | 1 + tests/qapi-schema/bad-base.json | 3 + tests/qapi-schema/bad-base.out | 0 tests/qapi-schema/bad-ident.err | 1 + tests/qapi-schema/bad-ident.exit | 1 + tests/qapi-schema/bad-ident.json | 3 + tests/qapi-schema/bad-ident.out | 0 tests/qapi-schema/bad-type-bool.err | 1 + tests/qapi-schema/bad-type-bool.exit | 1 + tests/qapi-schema/bad-type-bool.json | 2 + tests/qapi-schema/bad-type-bool.out | 0 tests/qapi-schema/bad-type-dict.err | 1 + tests/qapi-schema/bad-type-dict.exit | 1 + tests/qapi-schema/bad-type-dict.json | 2 + tests/qapi-schema/bad-type-dict.out | 0 tests/qapi-schema/bad-type-int.err | 1 + tests/qapi-schema/bad-type-int.exit | 1 + tests/qapi-schema/bad-type-int.json | 3 + tests/qapi-schema/bad-type-int.out | 0 tests/qapi-schema/command-int.err | 1 + tests/qapi-schema/command-int.exit | 1 + tests/qapi-schema/command-int.json | 3 + tests/qapi-schema/command-int.out | 0 tests/qapi-schema/data-array-empty.err | 1 + tests/qapi-schema/data-array-empty.exit | 1 + tests/qapi-schema/data-array-empty.json | 2 + tests/qapi-schema/data-array-empty.out | 0 tests/qapi-schema/data-array-unknown.err | 1 + tests/qapi-schema/data-array-unknown.exit | 1 + tests/qapi-schema/data-array-unknown.json | 2 + tests/qapi-schema/data-array-unknown.out | 0 tests/qapi-schema/data-int.err | 1 + tests/qapi-schema/data-int.exit | 1 + tests/qapi-schema/data-int.json | 2 + tests/qapi-schema/data-int.out | 0 tests/qapi-schema/data-member-array-bad.err | 1 + tests/qapi-schema/data-member-array-bad.exit | 1 + tests/qapi-schema/data-member-array-bad.json | 2 + tests/qapi-schema/data-member-array-bad.out | 0 tests/qapi-schema/data-member-array.err | 0 tests/qapi-schema/data-member-array.exit | 1 + tests/qapi-schema/data-member-array.json | 4 + tests/qapi-schema/data-member-array.out | 5 + tests/qapi-schema/data-member-unknown.err | 1 + tests/qapi-schema/data-member-unknown.exit | 1 + tests/qapi-schema/data-member-unknown.json | 2 + tests/qapi-schema/data-member-unknown.out | 0 tests/qapi-schema/data-unknown.err | 1 + tests/qapi-schema/data-unknown.exit | 1 + tests/qapi-schema/data-unknown.json | 2 + tests/qapi-schema/data-unknown.out | 0 tests/qapi-schema/double-data.err | 1 + tests/qapi-schema/double-data.exit | 1 + tests/qapi-schema/double-data.json | 2 + tests/qapi-schema/double-data.out | 0 tests/qapi-schema/double-type.err | 1 + tests/qapi-schema/double-type.exit | 1 + tests/qapi-schema/double-type.json | 2 + tests/qapi-schema/double-type.out | 0 tests/qapi-schema/enum-clash-member.err | 1 + tests/qapi-schema/enum-clash-member.exit | 1 + tests/qapi-schema/enum-clash-member.json | 2 + tests/qapi-schema/enum-clash-member.out | 0 tests/qapi-schema/enum-dict-member.err | 1 + tests/qapi-schema/enum-dict-member.exit | 1 + tests/qapi-schema/enum-dict-member.json | 2 + tests/qapi-schema/enum-dict-member.out | 0 tests/qapi-schema/enum-empty.err | 0 tests/qapi-schema/enum-empty.exit | 1 + tests/qapi-schema/enum-empty.json | 2 + tests/qapi-schema/enum-empty.out | 3 + tests/qapi-schema/enum-int-member.err | 1 + tests/qapi-schema/enum-int-member.exit | 1 + tests/qapi-schema/enum-int-member.json | 3 + tests/qapi-schema/enum-int-member.out | 0 tests/qapi-schema/enum-max-member.err | 1 + tests/qapi-schema/enum-max-member.exit | 1 + tests/qapi-schema/enum-max-member.json | 3 + tests/qapi-schema/enum-max-member.out | 0 tests/qapi-schema/enum-missing-data.err | 1 + tests/qapi-schema/enum-missing-data.exit | 1 + tests/qapi-schema/enum-missing-data.json | 2 + tests/qapi-schema/enum-missing-data.out | 0 tests/qapi-schema/enum-union-clash.err | 1 + tests/qapi-schema/enum-union-clash.exit | 1 + tests/qapi-schema/enum-union-clash.json | 4 + tests/qapi-schema/enum-union-clash.out | 0 tests/qapi-schema/enum-wrong-data.err | 1 + tests/qapi-schema/enum-wrong-data.exit | 1 + tests/qapi-schema/enum-wrong-data.json | 2 + tests/qapi-schema/enum-wrong-data.out | 0 tests/qapi-schema/event-case.err | 1 + tests/qapi-schema/event-case.exit | 1 + tests/qapi-schema/event-case.json | 2 + tests/qapi-schema/event-case.out | 0 tests/qapi-schema/event-max.err | 1 + tests/qapi-schema/event-max.exit | 1 + tests/qapi-schema/event-max.json | 2 + tests/qapi-schema/event-max.out | 0 tests/qapi-schema/event-nest-struct.err | 2 +- tests/qapi-schema/flat-union-bad-base.err | 1 + tests/qapi-schema/flat-union-bad-base.exit | 1 + tests/qapi-schema/flat-union-bad-base.json | 13 + tests/qapi-schema/flat-union-bad-base.out | 0 tests/qapi-schema/flat-union-bad-discriminator.err | 1 + .../qapi-schema/flat-union-bad-discriminator.exit | 1 + .../qapi-schema/flat-union-bad-discriminator.json | 15 + tests/qapi-schema/flat-union-bad-discriminator.out | 0 tests/qapi-schema/flat-union-base-union.err | 1 + tests/qapi-schema/flat-union-base-union.exit | 1 + tests/qapi-schema/flat-union-base-union.json | 15 + tests/qapi-schema/flat-union-base-union.out | 0 tests/qapi-schema/flat-union-no-base.err | 2 +- tests/qapi-schema/flat-union-no-base.json | 7 +- .../flat-union-optional-discriminator.err | 1 + .../flat-union-optional-discriminator.exit | 1 + .../flat-union-optional-discriminator.json | 9 + .../flat-union-optional-discriminator.out | 0 tests/qapi-schema/indented-expr.json | 4 +- tests/qapi-schema/indented-expr.out | 2 +- tests/qapi-schema/missing-type.err | 1 + tests/qapi-schema/missing-type.exit | 1 + tests/qapi-schema/missing-type.json | 2 + tests/qapi-schema/missing-type.out | 0 tests/qapi-schema/nested-struct-data.err | 1 + tests/qapi-schema/nested-struct-data.exit | 1 + tests/qapi-schema/nested-struct-data.json | 4 + tests/qapi-schema/nested-struct-data.out | 0 tests/qapi-schema/nested-struct-returns.err | 1 + tests/qapi-schema/nested-struct-returns.exit | 1 + tests/qapi-schema/nested-struct-returns.json | 3 + tests/qapi-schema/nested-struct-returns.out | 0 tests/qapi-schema/qapi-schema-test.json | 28 +- tests/qapi-schema/qapi-schema-test.out | 18 +- tests/qapi-schema/redefined-builtin.err | 1 + tests/qapi-schema/redefined-builtin.exit | 1 + tests/qapi-schema/redefined-builtin.json | 2 + tests/qapi-schema/redefined-builtin.out | 0 tests/qapi-schema/redefined-command.err | 1 + tests/qapi-schema/redefined-command.exit | 1 + tests/qapi-schema/redefined-command.json | 3 + tests/qapi-schema/redefined-command.out | 0 tests/qapi-schema/redefined-event.err | 1 + tests/qapi-schema/redefined-event.exit | 1 + tests/qapi-schema/redefined-event.json | 3 + tests/qapi-schema/redefined-event.out | 0 tests/qapi-schema/redefined-type.err | 1 + tests/qapi-schema/redefined-type.exit | 1 + tests/qapi-schema/redefined-type.json | 3 + tests/qapi-schema/redefined-type.out | 0 tests/qapi-schema/returns-alternate.err | 1 + tests/qapi-schema/returns-alternate.exit | 1 + tests/qapi-schema/returns-alternate.json | 3 + tests/qapi-schema/returns-alternate.out | 0 tests/qapi-schema/returns-array-bad.err | 1 + tests/qapi-schema/returns-array-bad.exit | 1 + tests/qapi-schema/returns-array-bad.json | 2 + tests/qapi-schema/returns-array-bad.out | 0 tests/qapi-schema/returns-int.err | 0 tests/qapi-schema/returns-int.exit | 1 + tests/qapi-schema/returns-int.json | 3 + tests/qapi-schema/returns-int.out | 3 + tests/qapi-schema/returns-unknown.err | 1 + tests/qapi-schema/returns-unknown.exit | 1 + tests/qapi-schema/returns-unknown.json | 2 + tests/qapi-schema/returns-unknown.out | 0 tests/qapi-schema/returns-whitelist.err | 1 + tests/qapi-schema/returns-whitelist.exit | 1 + tests/qapi-schema/returns-whitelist.json | 11 + tests/qapi-schema/returns-whitelist.out | 0 tests/qapi-schema/type-bypass-bad-gen.err | 1 + tests/qapi-schema/type-bypass-bad-gen.exit | 1 + tests/qapi-schema/type-bypass-bad-gen.json | 2 + tests/qapi-schema/type-bypass-bad-gen.out | 0 tests/qapi-schema/type-bypass-no-gen.err | 1 + tests/qapi-schema/type-bypass-no-gen.exit | 1 + tests/qapi-schema/type-bypass-no-gen.json | 2 + tests/qapi-schema/type-bypass-no-gen.out | 0 tests/qapi-schema/type-bypass.err | 0 tests/qapi-schema/type-bypass.exit | 1 + tests/qapi-schema/type-bypass.json | 2 + tests/qapi-schema/type-bypass.out | 3 + tests/qapi-schema/union-bad-branch.err | 1 + tests/qapi-schema/union-bad-branch.exit | 1 + tests/qapi-schema/union-bad-branch.json | 8 + tests/qapi-schema/union-bad-branch.out | 0 tests/qapi-schema/union-base-no-discriminator.err | 1 + tests/qapi-schema/union-base-no-discriminator.exit | 1 + tests/qapi-schema/union-base-no-discriminator.json | 15 + tests/qapi-schema/union-base-no-discriminator.out | 0 tests/qapi-schema/union-invalid-base.err | 2 +- tests/qapi-schema/union-invalid-base.json | 4 +- tests/qapi-schema/union-max.err | 1 + tests/qapi-schema/union-max.exit | 1 + tests/qapi-schema/union-max.json | 3 + tests/qapi-schema/union-max.out | 0 tests/qapi-schema/union-optional-branch.err | 1 + tests/qapi-schema/union-optional-branch.exit | 1 + tests/qapi-schema/union-optional-branch.json | 2 + tests/qapi-schema/union-optional-branch.out | 0 tests/qapi-schema/union-unknown.err | 1 + tests/qapi-schema/union-unknown.exit | 1 + tests/qapi-schema/union-unknown.json | 3 + tests/qapi-schema/union-unknown.out | 0 tests/qapi-schema/unknown-expr-key.err | 1 + tests/qapi-schema/unknown-expr-key.exit | 1 + tests/qapi-schema/unknown-expr-key.json | 2 + tests/qapi-schema/unknown-expr-key.out | 0 tests/test-qmp-commands.c | 35 +- tests/test-qmp-input-strict.c | 98 ++--- tests/test-qmp-input-visitor.c | 117 +++-- tests/test-qmp-output-visitor.c | 152 +++---- tests/test-visitor-serialization.c | 84 ++-- 261 files changed, 1603 insertions(+), 633 deletions(-) create mode 100644 tests/qapi-schema/alternate-array.err create mode 100644 tests/qapi-schema/alternate-array.exit create mode 100644 tests/qapi-schema/alternate-array.json create mode 100644 tests/qapi-schema/alternate-array.out create mode 100644 tests/qapi-schema/alternate-base.err create mode 100644 tests/qapi-schema/alternate-base.exit create mode 100644 tests/qapi-schema/alternate-base.json create mode 100644 tests/qapi-schema/alternate-base.out create mode 100644 tests/qapi-schema/alternate-clash.err create mode 100644 tests/qapi-schema/alternate-clash.exit create mode 100644 tests/qapi-schema/alternate-clash.json create mode 100644 tests/qapi-schema/alternate-clash.out create mode 100644 tests/qapi-schema/alternate-conflict-dict.err create mode 100644 tests/qapi-schema/alternate-conflict-dict.exit create mode 100644 tests/qapi-schema/alternate-conflict-dict.json create mode 100644 tests/qapi-schema/alternate-conflict-dict.out create mode 100644 tests/qapi-schema/alternate-conflict-string.err create mode 100644 tests/qapi-schema/alternate-conflict-string.exit create mode 100644 tests/qapi-schema/alternate-conflict-string.json create mode 100644 tests/qapi-schema/alternate-conflict-string.out create mode 100644 tests/qapi-schema/alternate-good.err create mode 100644 tests/qapi-schema/alternate-good.exit create mode 100644 tests/qapi-schema/alternate-good.json create mode 100644 tests/qapi-schema/alternate-good.out create mode 100644 tests/qapi-schema/alternate-nested.err create mode 100644 tests/qapi-schema/alternate-nested.exit create mode 100644 tests/qapi-schema/alternate-nested.json create mode 100644 tests/qapi-schema/alternate-nested.out create mode 100644 tests/qapi-schema/alternate-unknown.err create mode 100644 tests/qapi-schema/alternate-unknown.exit create mode 100644 tests/qapi-schema/alternate-unknown.json create mode 100644 tests/qapi-schema/alternate-unknown.out create mode 100644 tests/qapi-schema/bad-base.err create mode 100644 tests/qapi-schema/bad-base.exit create mode 100644 tests/qapi-schema/bad-base.json create mode 100644 tests/qapi-schema/bad-base.out create mode 100644 tests/qapi-schema/bad-ident.err create mode 100644 tests/qapi-schema/bad-ident.exit create mode 100644 tests/qapi-schema/bad-ident.json create mode 100644 tests/qapi-schema/bad-ident.out create mode 100644 tests/qapi-schema/bad-type-bool.err create mode 100644 tests/qapi-schema/bad-type-bool.exit create mode 100644 tests/qapi-schema/bad-type-bool.json create mode 100644 tests/qapi-schema/bad-type-bool.out create mode 100644 tests/qapi-schema/bad-type-dict.err create mode 100644 tests/qapi-schema/bad-type-dict.exit create mode 100644 tests/qapi-schema/bad-type-dict.json create mode 100644 tests/qapi-schema/bad-type-dict.out create mode 100644 tests/qapi-schema/bad-type-int.err create mode 100644 tests/qapi-schema/bad-type-int.exit create mode 100644 tests/qapi-schema/bad-type-int.json create mode 100644 tests/qapi-schema/bad-type-int.out create mode 100644 tests/qapi-schema/command-int.err create mode 100644 tests/qapi-schema/command-int.exit create mode 100644 tests/qapi-schema/command-int.json create mode 100644 tests/qapi-schema/command-int.out create mode 100644 tests/qapi-schema/data-array-empty.err create mode 100644 tests/qapi-schema/data-array-empty.exit create mode 100644 tests/qapi-schema/data-array-empty.json create mode 100644 tests/qapi-schema/data-array-empty.out create mode 100644 tests/qapi-schema/data-array-unknown.err create mode 100644 tests/qapi-schema/data-array-unknown.exit create mode 100644 tests/qapi-schema/data-array-unknown.json create mode 100644 tests/qapi-schema/data-array-unknown.out create mode 100644 tests/qapi-schema/data-int.err create mode 100644 tests/qapi-schema/data-int.exit create mode 100644 tests/qapi-schema/data-int.json create mode 100644 tests/qapi-schema/data-int.out create mode 100644 tests/qapi-schema/data-member-array-bad.err create mode 100644 tests/qapi-schema/data-member-array-bad.exit create mode 100644 tests/qapi-schema/data-member-array-bad.json create mode 100644 tests/qapi-schema/data-member-array-bad.out create mode 100644 tests/qapi-schema/data-member-array.err create mode 100644 tests/qapi-schema/data-member-array.exit create mode 100644 tests/qapi-schema/data-member-array.json create mode 100644 tests/qapi-schema/data-member-array.out create mode 100644 tests/qapi-schema/data-member-unknown.err create mode 100644 tests/qapi-schema/data-member-unknown.exit create mode 100644 tests/qapi-schema/data-member-unknown.json create mode 100644 tests/qapi-schema/data-member-unknown.out create mode 100644 tests/qapi-schema/data-unknown.err create mode 100644 tests/qapi-schema/data-unknown.exit create mode 100644 tests/qapi-schema/data-unknown.json create mode 100644 tests/qapi-schema/data-unknown.out create mode 100644 tests/qapi-schema/double-data.err create mode 100644 tests/qapi-schema/double-data.exit create mode 100644 tests/qapi-schema/double-data.json create mode 100644 tests/qapi-schema/double-data.out create mode 100644 tests/qapi-schema/double-type.err create mode 100644 tests/qapi-schema/double-type.exit create mode 100644 tests/qapi-schema/double-type.json create mode 100644 tests/qapi-schema/double-type.out create mode 100644 tests/qapi-schema/enum-clash-member.err create mode 100644 tests/qapi-schema/enum-clash-member.exit create mode 100644 tests/qapi-schema/enum-clash-member.json create mode 100644 tests/qapi-schema/enum-clash-member.out create mode 100644 tests/qapi-schema/enum-dict-member.err create mode 100644 tests/qapi-schema/enum-dict-member.exit create mode 100644 tests/qapi-schema/enum-dict-member.json create mode 100644 tests/qapi-schema/enum-dict-member.out create mode 100644 tests/qapi-schema/enum-empty.err create mode 100644 tests/qapi-schema/enum-empty.exit create mode 100644 tests/qapi-schema/enum-empty.json create mode 100644 tests/qapi-schema/enum-empty.out create mode 100644 tests/qapi-schema/enum-int-member.err create mode 100644 tests/qapi-schema/enum-int-member.exit create mode 100644 tests/qapi-schema/enum-int-member.json create mode 100644 tests/qapi-schema/enum-int-member.out create mode 100644 tests/qapi-schema/enum-max-member.err create mode 100644 tests/qapi-schema/enum-max-member.exit create mode 100644 tests/qapi-schema/enum-max-member.json create mode 100644 tests/qapi-schema/enum-max-member.out create mode 100644 tests/qapi-schema/enum-missing-data.err create mode 100644 tests/qapi-schema/enum-missing-data.exit create mode 100644 tests/qapi-schema/enum-missing-data.json create mode 100644 tests/qapi-schema/enum-missing-data.out create mode 100644 tests/qapi-schema/enum-union-clash.err create mode 100644 tests/qapi-schema/enum-union-clash.exit create mode 100644 tests/qapi-schema/enum-union-clash.json create mode 100644 tests/qapi-schema/enum-union-clash.out create mode 100644 tests/qapi-schema/enum-wrong-data.err create mode 100644 tests/qapi-schema/enum-wrong-data.exit create mode 100644 tests/qapi-schema/enum-wrong-data.json create mode 100644 tests/qapi-schema/enum-wrong-data.out create mode 100644 tests/qapi-schema/event-case.err create mode 100644 tests/qapi-schema/event-case.exit create mode 100644 tests/qapi-schema/event-case.json create mode 100644 tests/qapi-schema/event-case.out create mode 100644 tests/qapi-schema/event-max.err create mode 100644 tests/qapi-schema/event-max.exit create mode 100644 tests/qapi-schema/event-max.json create mode 100644 tests/qapi-schema/event-max.out create mode 100644 tests/qapi-schema/flat-union-bad-base.err create mode 100644 tests/qapi-schema/flat-union-bad-base.exit create mode 100644 tests/qapi-schema/flat-union-bad-base.json create mode 100644 tests/qapi-schema/flat-union-bad-base.out create mode 100644 tests/qapi-schema/flat-union-bad-discriminator.err create mode 100644 tests/qapi-schema/flat-union-bad-discriminator.exit create mode 100644 tests/qapi-schema/flat-union-bad-discriminator.json create mode 100644 tests/qapi-schema/flat-union-bad-discriminator.out create mode 100644 tests/qapi-schema/flat-union-base-union.err create mode 100644 tests/qapi-schema/flat-union-base-union.exit create mode 100644 tests/qapi-schema/flat-union-base-union.json create mode 100644 tests/qapi-schema/flat-union-base-union.out create mode 100644 tests/qapi-schema/flat-union-optional-discriminator.err create mode 100644 tests/qapi-schema/flat-union-optional-discriminator.exit create mode 100644 tests/qapi-schema/flat-union-optional-discriminator.json create mode 100644 tests/qapi-schema/flat-union-optional-discriminator.out create mode 100644 tests/qapi-schema/missing-type.err create mode 100644 tests/qapi-schema/missing-type.exit create mode 100644 tests/qapi-schema/missing-type.json create mode 100644 tests/qapi-schema/missing-type.out create mode 100644 tests/qapi-schema/nested-struct-data.err create mode 100644 tests/qapi-schema/nested-struct-data.exit create mode 100644 tests/qapi-schema/nested-struct-data.json create mode 100644 tests/qapi-schema/nested-struct-data.out create mode 100644 tests/qapi-schema/nested-struct-returns.err create mode 100644 tests/qapi-schema/nested-struct-returns.exit create mode 100644 tests/qapi-schema/nested-struct-returns.json create mode 100644 tests/qapi-schema/nested-struct-returns.out create mode 100644 tests/qapi-schema/redefined-builtin.err create mode 100644 tests/qapi-schema/redefined-builtin.exit create mode 100644 tests/qapi-schema/redefined-builtin.json create mode 100644 tests/qapi-schema/redefined-builtin.out create mode 100644 tests/qapi-schema/redefined-command.err create mode 100644 tests/qapi-schema/redefined-command.exit create mode 100644 tests/qapi-schema/redefined-command.json create mode 100644 tests/qapi-schema/redefined-command.out create mode 100644 tests/qapi-schema/redefined-event.err create mode 100644 tests/qapi-schema/redefined-event.exit create mode 100644 tests/qapi-schema/redefined-event.json create mode 100644 tests/qapi-schema/redefined-event.out create mode 100644 tests/qapi-schema/redefined-type.err create mode 100644 tests/qapi-schema/redefined-type.exit create mode 100644 tests/qapi-schema/redefined-type.json create mode 100644 tests/qapi-schema/redefined-type.out create mode 100644 tests/qapi-schema/returns-alternate.err create mode 100644 tests/qapi-schema/returns-alternate.exit create mode 100644 tests/qapi-schema/returns-alternate.json create mode 100644 tests/qapi-schema/returns-alternate.out create mode 100644 tests/qapi-schema/returns-array-bad.err create mode 100644 tests/qapi-schema/returns-array-bad.exit create mode 100644 tests/qapi-schema/returns-array-bad.json create mode 100644 tests/qapi-schema/returns-array-bad.out create mode 100644 tests/qapi-schema/returns-int.err create mode 100644 tests/qapi-schema/returns-int.exit create mode 100644 tests/qapi-schema/returns-int.json create mode 100644 tests/qapi-schema/returns-int.out create mode 100644 tests/qapi-schema/returns-unknown.err create mode 100644 tests/qapi-schema/returns-unknown.exit create mode 100644 tests/qapi-schema/returns-unknown.json create mode 100644 tests/qapi-schema/returns-unknown.out create mode 100644 tests/qapi-schema/returns-whitelist.err create mode 100644 tests/qapi-schema/returns-whitelist.exit create mode 100644 tests/qapi-schema/returns-whitelist.json create mode 100644 tests/qapi-schema/returns-whitelist.out create mode 100644 tests/qapi-schema/type-bypass-bad-gen.err create mode 100644 tests/qapi-schema/type-bypass-bad-gen.exit create mode 100644 tests/qapi-schema/type-bypass-bad-gen.json create mode 100644 tests/qapi-schema/type-bypass-bad-gen.out create mode 100644 tests/qapi-schema/type-bypass-no-gen.err create mode 100644 tests/qapi-schema/type-bypass-no-gen.exit create mode 100644 tests/qapi-schema/type-bypass-no-gen.json create mode 100644 tests/qapi-schema/type-bypass-no-gen.out create mode 100644 tests/qapi-schema/type-bypass.err create mode 100644 tests/qapi-schema/type-bypass.exit create mode 100644 tests/qapi-schema/type-bypass.json create mode 100644 tests/qapi-schema/type-bypass.out create mode 100644 tests/qapi-schema/union-bad-branch.err create mode 100644 tests/qapi-schema/union-bad-branch.exit create mode 100644 tests/qapi-schema/union-bad-branch.json create mode 100644 tests/qapi-schema/union-bad-branch.out create mode 100644 tests/qapi-schema/union-base-no-discriminator.err create mode 100644 tests/qapi-schema/union-base-no-discriminator.exit create mode 100644 tests/qapi-schema/union-base-no-discriminator.json create mode 100644 tests/qapi-schema/union-base-no-discriminator.out create mode 100644 tests/qapi-schema/union-max.err create mode 100644 tests/qapi-schema/union-max.exit create mode 100644 tests/qapi-schema/union-max.json create mode 100644 tests/qapi-schema/union-max.out create mode 100644 tests/qapi-schema/union-optional-branch.err create mode 100644 tests/qapi-schema/union-optional-branch.exit create mode 100644 tests/qapi-schema/union-optional-branch.json create mode 100644 tests/qapi-schema/union-optional-branch.out create mode 100644 tests/qapi-schema/union-unknown.err create mode 100644 tests/qapi-schema/union-unknown.exit create mode 100644 tests/qapi-schema/union-unknown.json create mode 100644 tests/qapi-schema/union-unknown.out create mode 100644 tests/qapi-schema/unknown-expr-key.err create mode 100644 tests/qapi-schema/unknown-expr-key.exit create mode 100644 tests/qapi-schema/unknown-expr-key.json create mode 100644 tests/qapi-schema/unknown-expr-key.out -- 2.1.0