From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:43195) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XV6cS-0004NL-5t for qemu-devel@nongnu.org; Fri, 19 Sep 2014 18:25:40 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1XV6cM-0004XR-VH for qemu-devel@nongnu.org; Fri, 19 Sep 2014 18:25:36 -0400 Received: from mx1.redhat.com ([209.132.183.28]:11908) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XV6cM-0004VN-Iq for qemu-devel@nongnu.org; Fri, 19 Sep 2014 18:25:30 -0400 From: Eric Blake Date: Fri, 19 Sep 2014 16:24:45 -0600 Message-Id: <1411165504-18198-1-git-send-email-eblake@redhat.com> Subject: [Qemu-devel] [PATCH v4 00/19] drop qapi nested structs List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Luiz Capitulino , Fam Zheng , Markus Armbruster , wenchaoqemu@gmail.com After dragging my feet due to some libvirt work, I've finally revived this patch series as promised. v3 was here: https://lists.gnu.org/archive/html/qemu-devel/2014-08/msg00725.html v4: update commit message style [Markus] add docs (patches 3-4 are new) [Markus] lots of new tests (spread among 5, 7, 9, 11, 12) add comments to all new tests [Markus] rework check for valid expressions (patches 8, 10 are pretty much new, later patches rebased and simplified as a result) rebase to master fix tests to match file name (broken test in v3 patch 7 now fixed in patch 12) drop expr_name (v3 patch 8); series now validates expressions earlier (patch 8) consolidate '**' magic, and reject 'gen':'yes' in commands (patch 14 is new) probably other stuff - it's been more than a month, so reviewers will probably want to start from scratch anyways :) v3: No code changes, but fix mis-send of 11-14 [Peter] v2: New patches: 1-2, 5-9 consistent TAB usage in Makefile [Fam] catch more bad coding constructs, and test them avoid code duplication in type validity checks (patch 14 [former 7] is simpler because of patch 9) Eric Blake (19): qapi: Consistent whitespace in tests/Makefile qapi: Ignore files created during make check qapi: Update docs given recent event, spacing fixes qapi: Document type-safety considerations qapi: Add some enum tests qapi: Better error messages for bad enums 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: Add tests of type bypass qapi: Add some type check tests qapi: More rigourous checking of types qapi: More rigorous checking for type safety bypass qapi: Merge UserDefTwo and UserDefNested in tests qapi: Drop tests for inline subtypes qapi: Drop inline subtype in query-version qapi: Drop inline subtype in query-pci qapi: Drop support for inline subtypes docs/qapi-code-gen.txt | 349 +++++++++++++++++++++++---- hmp.c | 28 +-- hw/pci/pci.c | 42 ++-- qapi-schema.json | 96 +++++--- qapi/common.json | 26 +- qmp.c | 9 +- scripts/qapi-commands.py | 8 +- scripts/qapi-event.py | 4 +- scripts/qapi-types.py | 9 +- scripts/qapi-visit.py | 37 +-- scripts/qapi.py | 261 ++++++++++++++++---- tests/.gitignore | 3 + tests/Makefile | 43 ++-- 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/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-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-nest-struct.err | 2 +- 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 | 18 +- tests/qapi-schema/qapi-schema-test.out | 10 +- 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-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 | 2 + 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/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/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 | 19 +- tests/test-qmp-input-visitor.c | 25 +- tests/test-qmp-output-visitor.c | 64 ++--- tests/test-visitor-serialization.c | 84 ++++--- 151 files changed, 979 insertions(+), 348 deletions(-) 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/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-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/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-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/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/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 -- 1.9.3