Requires these patches first ("v4 implicit types"): https://lists.gnu.org/archive/html/qemu-devel/2016-03/msg01205.html which in turn requires Markus' qapi-next branch: https://lists.gnu.org/archive/html/qemu-devel/2016-03/msg01182.html
v13: Minor rebase improvements v12: https://lists.gnu.org/archive/html/qemu-devel/2016-03/msg00002.html This series (finally) finishes the review comments against the tail end of my v9 subset E series: https://lists.gnu.org/archive/html/qemu-devel/2016-01/msg03504.html v10 and v11 of the series dealt with the first half, and are now mostly applied (or part of the pre-requisite series). Also available as a tag at this location: git fetch git://repo.or.cz/qemu/ericb.git qapi-cleanupv13e and will soon be part of my branch with the rest of the v5 series, at: http://repo.or.cz/qemu/ericb.git/shortlog/refs/heads/qapi 001/18:[----] [--] 'qapi-visit: Add visitor.type classification' 002/18:[----] [--] 'qapi: Guarantee NULL obj on input visitor callback error' 003/18:[----] [--] 'qmp: Drop dead command->type' 004/18:[----] [--] 'qmp-input: Clean up stack handling' 005/18:[----] [--] 'qmp-input: Don't consume input when checking has_member' 006/18:[----] [--] 'qmp-input: Refactor when list is advanced' 007/18:[0011] [FC] 'qapi: Document visitor interfaces, add assertions' 008/18:[----] [--] 'tests: Add check-qnull' 009/18:[----] [--] 'qapi: Add visit_type_null() visitor' 010/18:[----] [--] 'qmp: Support explicit null during visits' 011/18:[----] [--] 'spapr_drc: Expose 'null' in qom-get when there is no fdt' 012/18:[----] [--] 'qmp: Tighten output visitor rules' 013/18:[0011] [FC] 'qapi: Split visit_end_struct() into pieces' 014/18:[0016] [FC] 'qapi-commands: Wrap argument visit in visit_start_struct' 015/18:[----] [--] 'qom: Wrap prop visit in visit_start_struct' 016/18:[----] [--] 'qmp-input: Require struct push to visit members of top dict' 017/18:[0017] [FC] 'qapi: Simplify semantics of visit_next_list()' 018/18:[0002] [FC] 'qapi: Change visit_type_FOO() to no longer return partial objects' Eric Blake (18): qapi-visit: Add visitor.type classification qapi: Guarantee NULL obj on input visitor callback error qmp: Drop dead command->type qmp-input: Clean up stack handling qmp-input: Don't consume input when checking has_member qmp-input: Refactor when list is advanced qapi: Document visitor interfaces, add assertions tests: Add check-qnull qapi: Add visit_type_null() visitor qmp: Support explicit null during visits spapr_drc: Expose 'null' in qom-get when there is no fdt qmp: Tighten output visitor rules qapi: Split visit_end_struct() into pieces qapi-commands: Wrap argument visit in visit_start_struct qom: Wrap prop visit in visit_start_struct qmp-input: Require struct push to visit members of top dict qapi: Simplify semantics of visit_next_list() qapi: Change visit_type_FOO() to no longer return partial objects include/qapi/visitor.h | 485 +++++++++++++++++++++++++++++++++-- include/qapi/visitor-impl.h | 80 ++++-- scripts/qapi-commands.py | 10 + scripts/qapi-event.py | 5 +- scripts/qapi-visit.py | 56 ++-- include/qapi/dealloc-visitor.h | 4 + include/qapi/opts-visitor.h | 4 + include/qapi/qmp-output-visitor.h | 1 + include/qapi/qmp/dispatch.h | 6 - include/qapi/string-input-visitor.h | 5 + include/qapi/string-output-visitor.h | 5 + qapi/qapi-visit-core.c | 112 ++++++-- hw/ppc/spapr_drc.c | 11 +- hw/virtio/virtio-balloon.c | 15 +- qapi/opts-visitor.c | 65 ++--- qapi/qapi-dealloc-visitor.c | 43 +--- qapi/qmp-dispatch.c | 18 +- qapi/qmp-input-visitor.c | 168 +++++++----- qapi/qmp-output-visitor.c | 72 +++--- qapi/qmp-registry.c | 1 - qapi/string-input-visitor.c | 39 +-- qapi/string-output-visitor.c | 43 ++-- qom/object.c | 5 +- qom/object_interfaces.c | 29 ++- tests/check-qnull.c | 68 +++++ tests/test-qmp-commands.c | 13 +- tests/test-qmp-input-strict.c | 19 +- tests/test-qmp-input-visitor.c | 27 +- tests/test-qmp-output-visitor.c | 17 +- docs/qapi-code-gen.txt | 33 ++- tests/.gitignore | 1 + tests/Makefile | 6 +- 32 files changed, 1077 insertions(+), 389 deletions(-) create mode 100644 tests/check-qnull.c -- 2.5.0