Hi, This is the second part of the "add #if pre-processor conditions to generated code" series, adding schema member conditions (roughly 16-38/49).
Members can be exploded as dictionnary with 'type'/'if' keys: { 'struct': 'TestIfStruct', 'data': { 'foo': 'int', 'bar': { 'type': 'int', 'if': 'defined(TEST_IF_STRUCT_BAR)'} } } Enum values can be exploded as dictionnary with 'type'/'if' keys: { 'enum': 'TestIfEnum', 'data': [ 'foo', { 'name' : 'bar', 'if': 'defined(TEST_IF_ENUM_BAR)' } ] } v6: - subset of v5 series: add schema member conditions - split "qapi: factor out check_known_keys()", error report improvements - add a patch to "qapi: include osdep.h in type headers" to avoid potential build configuration change issues - rebased, on top of Markus's qapi-next branch (first 4 patches, included for patchew testing) Marc-André Lureau (26): qmp-shell: learn to send commands with quoted arguments json: remove useless return value from lexer/parser tests: change /0.15/* tests to /qmp/* qapi: include osdep.h in type headers qapi: do not define enumeration value explicitly qapi: rename QAPISchemaEnumType.values to .members qapi: change enum visitor and gen_enum* to take QAPISchemaMember tests: print enum type members more like object type members qapi: factor out checking for keys qapi: improve reporting of unknown or missing keys qapi: add a dictionnary form with 'name' key for enum members qapi: add 'if' to enum members qapi-event: add 'if' condition to implicit event enum qapi: rename allow_dict to allow_implicit qapi: add a dictionary form with 'type' key for members qapi: add 'if' to implicit struct members qapi: add an error in case a discriminator is conditionnal qapi: add 'if' on union members qapi: add 'if' to alternate members qapi: add #if conditions to generated code members docs: document schema configuration qapi: add 'If:' condition to enum values documentation qapi: add 'If:' condition to struct members documentation qapi: add condition to variants documentation qapi: add more conditions to SPICE qapi: add conditions to REPLICATION type/commands on the schema Markus Armbruster (1): qapi: Fix some pycodestyle-3 complaints qapi/block-core.json | 13 +- qapi/char.json | 16 +- qapi/migration.json | 12 +- scripts/qapi/common.py | 256 ++++++++++++------ scripts/qapi/doc.py | 16 +- scripts/qapi/events.py | 2 +- scripts/qapi/introspect.py | 16 +- scripts/qapi/types.py | 11 +- scripts/qapi/visit.py | 10 +- include/qapi/qmp/json-lexer.h | 4 +- include/qapi/qmp/json-streamer.h | 4 +- migration/colo.c | 16 +- monitor.c | 5 - qobject/json-lexer.c | 23 +- qobject/json-streamer.c | 8 +- tests/test-qmp-cmds.c | 10 +- docs/devel/qapi-code-gen.txt | 19 ++ scripts/qmp/qmp-shell | 3 +- tests/Makefile.include | 8 +- tests/qapi-schema/alternate-base.err | 1 + tests/qapi-schema/alternate-invalid-dict.err | 1 + ...ember.exit => alternate-invalid-dict.exit} | 0 tests/qapi-schema/alternate-invalid-dict.json | 4 + ...-member.out => alternate-invalid-dict.out} | 0 tests/qapi-schema/comments.out | 14 +- tests/qapi-schema/doc-bad-section.out | 13 +- tests/qapi-schema/doc-good.json | 11 +- tests/qapi-schema/doc-good.out | 22 +- tests/qapi-schema/doc-good.texi | 8 +- tests/qapi-schema/double-type.err | 1 + tests/qapi-schema/empty.out | 9 +- tests/qapi-schema/enum-bad-member.err | 1 + tests/qapi-schema/enum-bad-member.exit | 1 + tests/qapi-schema/enum-bad-member.json | 2 + tests/qapi-schema/enum-bad-member.out | 0 .../qapi-schema/enum-dict-member-unknown.err | 2 + .../qapi-schema/enum-dict-member-unknown.exit | 1 + .../qapi-schema/enum-dict-member-unknown.json | 2 + .../qapi-schema/enum-dict-member-unknown.out | 0 tests/qapi-schema/enum-dict-member.err | 1 - tests/qapi-schema/enum-dict-member.json | 2 - tests/qapi-schema/enum-if-invalid.err | 1 + tests/qapi-schema/enum-if-invalid.exit | 1 + tests/qapi-schema/enum-if-invalid.json | 3 + tests/qapi-schema/enum-if-invalid.out | 0 tests/qapi-schema/enum-missing-data.err | 2 +- tests/qapi-schema/event-case.out | 9 +- tests/qapi-schema/event-nest-struct.err | 2 +- tests/qapi-schema/flat-union-inline.err | 2 +- .../flat-union-invalid-if-discriminator.err | 1 + .../flat-union-invalid-if-discriminator.exit | 1 + .../flat-union-invalid-if-discriminator.json | 17 ++ .../flat-union-invalid-if-discriminator.out | 0 tests/qapi-schema/ident-with-escape.out | 9 +- tests/qapi-schema/include-relpath.out | 14 +- tests/qapi-schema/include-repetition.out | 14 +- tests/qapi-schema/include-simple.out | 14 +- tests/qapi-schema/indented-expr.out | 9 +- tests/qapi-schema/nested-struct-data.err | 2 +- tests/qapi-schema/qapi-schema-test.json | 38 ++- tests/qapi-schema/qapi-schema-test.out | 76 +++++- .../struct-member-invalid-dict.err | 1 + .../struct-member-invalid-dict.exit | 1 + .../struct-member-invalid-dict.json | 3 + .../struct-member-invalid-dict.out | 0 tests/qapi-schema/test-qapi.py | 22 +- .../qapi-schema/union-branch-invalid-dict.err | 1 + .../union-branch-invalid-dict.exit | 1 + .../union-branch-invalid-dict.json | 4 + .../qapi-schema/union-branch-invalid-dict.out | 0 tests/qapi-schema/unknown-expr-key.err | 3 +- tests/qapi-schema/unknown-expr-key.json | 2 +- 72 files changed, 574 insertions(+), 227 deletions(-) create mode 100644 tests/qapi-schema/alternate-invalid-dict.err rename tests/qapi-schema/{enum-dict-member.exit => alternate-invalid-dict.exit} (100%) create mode 100644 tests/qapi-schema/alternate-invalid-dict.json rename tests/qapi-schema/{enum-dict-member.out => alternate-invalid-dict.out} (100%) create mode 100644 tests/qapi-schema/enum-bad-member.err create mode 100644 tests/qapi-schema/enum-bad-member.exit create mode 100644 tests/qapi-schema/enum-bad-member.json create mode 100644 tests/qapi-schema/enum-bad-member.out create mode 100644 tests/qapi-schema/enum-dict-member-unknown.err create mode 100644 tests/qapi-schema/enum-dict-member-unknown.exit create mode 100644 tests/qapi-schema/enum-dict-member-unknown.json create mode 100644 tests/qapi-schema/enum-dict-member-unknown.out delete mode 100644 tests/qapi-schema/enum-dict-member.err delete mode 100644 tests/qapi-schema/enum-dict-member.json create mode 100644 tests/qapi-schema/enum-if-invalid.err create mode 100644 tests/qapi-schema/enum-if-invalid.exit create mode 100644 tests/qapi-schema/enum-if-invalid.json create mode 100644 tests/qapi-schema/enum-if-invalid.out create mode 100644 tests/qapi-schema/flat-union-invalid-if-discriminator.err create mode 100644 tests/qapi-schema/flat-union-invalid-if-discriminator.exit create mode 100644 tests/qapi-schema/flat-union-invalid-if-discriminator.json create mode 100644 tests/qapi-schema/flat-union-invalid-if-discriminator.out create mode 100644 tests/qapi-schema/struct-member-invalid-dict.err create mode 100644 tests/qapi-schema/struct-member-invalid-dict.exit create mode 100644 tests/qapi-schema/struct-member-invalid-dict.json create mode 100644 tests/qapi-schema/struct-member-invalid-dict.out create mode 100644 tests/qapi-schema/union-branch-invalid-dict.err create mode 100644 tests/qapi-schema/union-branch-invalid-dict.exit create mode 100644 tests/qapi-schema/union-branch-invalid-dict.json create mode 100644 tests/qapi-schema/union-branch-invalid-dict.out -- 2.18.0.rc1