All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v6 00/11] qapi: untie 'if' conditions from C preprocessor
@ 2021-06-18 10:24 marcandre.lureau
  2021-06-18 10:24 ` [PATCH v6 01/11] docs: update the documentation upfront about schema configuration marcandre.lureau
                   ` (11 more replies)
  0 siblings, 12 replies; 39+ messages in thread
From: marcandre.lureau @ 2021-06-18 10:24 UTC (permalink / raw)
  To: qemu-devel
  Cc: jsnow, Eric Blake, Markus Armbruster, stefanha, Marc-André Lureau

From: Marc-André Lureau <marcandre.lureau@redhat.com>

Hi,

This series makes the 'if' conditions less liberal, by formalizing a simple
expression tree based on bare boolean logic of configure option identifiers.

(this allows to express conditions in Rust in my QAPI-Rust PoC series)

thanks

v6: after Markus review
 - drop the predicate tree, QAPISchemaIfCond simply holds the original object
 - introduce the dict operations ('all', 'any', 'not') in multiple patches
 - split QAPISchemaIfCond introduction in multiple patches
 - replace __bool__ usage with is_present()
 - removed __eq__
 - move cgen/docgen implementation to common.py
 - doc & commit message updates
 - rebased

v5:
 - drop the [ COND, ... ] sugar form
 - move documentation update as first patch
 - documentation and commit message tweaks

v4:
 - keep gen_if/gen_endif in common.py, reducing C codegen in schema.py
 - raise NotImplemented instead of False for unhandled __eq__
 - change check_if() to keep the json/raw form, add _make_if() to build a
   QAPISchemaIfCond
 - improve __repr__ usage
 - drop ABC usage
 - tweaks here and there
 - add various commit tags

v3:
 - rebasing on queued pt4 (after waiting for it to land)
 - improve documentation generation, to be more human-friendly
 - drop typing annotations from schema.py (not yet queued)
 - commit message tweaks

v2:
 - fix the normalization step to handle recursive expr
 - replace IfCond by QAPISchemaIf (JohnS)
 - commit message and documentation tweaks
 - mypy/flake8/isort

Marc-André Lureau (11):
  docs: update the documentation upfront about schema configuration
  qapi: wrap Sequence[str] in an object
  qapi: add QAPISchemaIfCond.is_present()
  qapi: _make_enum_members() to work with pre-built QAPISchemaIfCond
  qapi: introduce QAPISchemaIfCond.cgen()
  qapidoc: introduce QAPISchemaIfCond.docgen()
  qapi: replace if condition list with dict {'all': [...]}
  qapi: add 'any' condition
  qapi: convert 'if' C-expressions to the new syntax tree
  qapi: add 'not' condition operation
  qapi: make 'if' condition strings simple identifiers

 docs/devel/qapi-code-gen.txt                  | 30 ++++---
 docs/sphinx/qapidoc.py                        | 22 ++---
 qapi/block-core.json                          | 16 ++--
 qapi/block-export.json                        |  6 +-
 qapi/char.json                                | 12 +--
 qapi/machine-target.json                      | 28 ++++--
 qapi/migration.json                           | 10 +--
 qapi/misc-target.json                         | 40 +++++----
 qapi/qom.json                                 | 10 +--
 qapi/sockets.json                             |  6 +-
 qapi/tpm.json                                 | 18 ++--
 qapi/ui.json                                  | 48 +++++------
 qga/qapi-schema.json                          |  8 +-
 tests/unit/test-qmp-cmds.c                    |  1 +
 scripts/qapi/commands.py                      |  4 +-
 scripts/qapi/common.py                        | 58 ++++++++++---
 scripts/qapi/events.py                        |  5 +-
 scripts/qapi/expr.py                          | 55 +++++++-----
 scripts/qapi/gen.py                           | 14 +--
 scripts/qapi/introspect.py                    | 26 +++---
 scripts/qapi/schema.py                        | 85 +++++++++++++------
 scripts/qapi/types.py                         | 33 +++----
 scripts/qapi/visit.py                         | 23 ++---
 .../alternate-branch-if-invalid.err           |  2 +-
 tests/qapi-schema/bad-if-empty-list.json      |  2 +-
 tests/qapi-schema/bad-if-empty.err            |  2 +-
 tests/qapi-schema/bad-if-list.err             |  2 +-
 tests/qapi-schema/bad-if-list.json            |  2 +-
 tests/qapi-schema/bad-if.err                  |  3 +-
 tests/qapi-schema/bad-if.json                 |  2 +-
 tests/qapi-schema/doc-good.json               | 15 ++--
 tests/qapi-schema/doc-good.out                | 14 +--
 tests/qapi-schema/doc-good.txt                | 21 ++++-
 tests/qapi-schema/enum-if-invalid.err         |  3 +-
 tests/qapi-schema/features-if-invalid.err     |  2 +-
 tests/qapi-schema/features-missing-name.json  |  2 +-
 tests/qapi-schema/qapi-schema-test.json       | 60 +++++++------
 tests/qapi-schema/qapi-schema-test.out        | 67 ++++++++-------
 .../qapi-schema/struct-member-if-invalid.err  |  2 +-
 tests/qapi-schema/test-qapi.py                |  4 +-
 tests/qapi-schema/union-branch-if-invalid.err |  2 +-
 .../qapi-schema/union-branch-if-invalid.json  |  2 +-
 42 files changed, 458 insertions(+), 309 deletions(-)

-- 
2.29.0




^ permalink raw reply	[flat|nested] 39+ messages in thread

end of thread, other threads:[~2021-08-06 11:21 UTC | newest]

Thread overview: 39+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-06-18 10:24 [PATCH v6 00/11] qapi: untie 'if' conditions from C preprocessor marcandre.lureau
2021-06-18 10:24 ` [PATCH v6 01/11] docs: update the documentation upfront about schema configuration marcandre.lureau
2021-07-12 14:07   ` Markus Armbruster
2021-06-18 10:24 ` [PATCH v6 02/11] qapi: wrap Sequence[str] in an object marcandre.lureau
2021-08-02  9:21   ` Markus Armbruster
2021-08-03 17:55     ` John Snow
2021-08-04  8:22     ` Marc-André Lureau
2021-08-05 10:44       ` Markus Armbruster
2021-08-06 11:19       ` Markus Armbruster
2021-06-18 10:24 ` [PATCH v6 03/11] qapi: add QAPISchemaIfCond.is_present() marcandre.lureau
2021-08-02  9:52   ` Markus Armbruster
2021-08-04  8:22     ` Marc-André Lureau
2021-06-18 10:25 ` [PATCH v6 04/11] qapi: _make_enum_members() to work with pre-built QAPISchemaIfCond marcandre.lureau
2021-08-02 10:41   ` Markus Armbruster
2021-08-04  8:22     ` Marc-André Lureau
2021-06-18 10:25 ` [PATCH v6 05/11] qapi: introduce QAPISchemaIfCond.cgen() marcandre.lureau
2021-08-02 14:46   ` Markus Armbruster
2021-08-03 11:19     ` Markus Armbruster
2021-08-03 11:20       ` Markus Armbruster
2021-08-03 11:23         ` Markus Armbruster
2021-08-04  8:23     ` Marc-André Lureau
2021-06-18 10:25 ` [PATCH v6 06/11] qapidoc: introduce QAPISchemaIfCond.docgen() marcandre.lureau
2021-08-02 15:47   ` Markus Armbruster
2021-08-04  8:23     ` Marc-André Lureau
2021-06-18 10:25 ` [PATCH v6 07/11] qapi: replace if condition list with dict {'all': [...]} marcandre.lureau
2021-08-03 13:05   ` Markus Armbruster
2021-08-04  8:23     ` Marc-André Lureau
2021-08-05 15:11     ` John Snow
2021-08-03 13:17   ` Markus Armbruster
2021-06-18 10:25 ` [PATCH v6 08/11] qapi: add 'any' condition marcandre.lureau
2021-08-03 13:20   ` Markus Armbruster
2021-06-18 10:25 ` [PATCH v6 09/11] qapi: convert 'if' C-expressions to the new syntax tree marcandre.lureau
2021-08-03 13:22   ` Markus Armbruster
2021-06-18 10:25 ` [PATCH v6 10/11] qapi: add 'not' condition operation marcandre.lureau
2021-06-18 10:25 ` [PATCH v6 11/11] qapi: make 'if' condition strings simple identifiers marcandre.lureau
2021-08-03 13:35   ` Markus Armbruster
2021-08-04  8:22     ` Marc-André Lureau
2021-08-03 13:44 ` [PATCH v6 00/11] qapi: untie 'if' conditions from C preprocessor Markus Armbruster
2021-08-04  8:25   ` Marc-André Lureau

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.