Hi On Fri, Jul 6, 2018 at 2:59 PM Marc-André Lureau <marcandre.lur...@redhat.com> wrote: > > 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
Rebased series updated on github branch: https://github.com/elmarco/qemu/commits/qapi-if (mostly unchanged, except patch "add #if conditions to generated code members" which had to accommodate with Eric's introspection comment patch) thanks > 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 > > -- Marc-André Lureau