[PATCH v6 00/11] qapi: untie 'if' conditions from C preprocessor

marcandre.lureau@redhat.com posted 11 patches 2 years, 10 months ago
Test checkpatch passed
Failed in applying to current master (apply log)
There is a newer version of this series
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(-)
[PATCH v6 00/11] qapi: untie 'if' conditions from C preprocessor
Posted by marcandre.lureau@redhat.com 2 years, 10 months ago
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



Re: [PATCH v6 00/11] qapi: untie 'if' conditions from C preprocessor
Posted by Markus Armbruster 2 years, 8 months ago
marcandre.lureau@redhat.com writes:

> 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

I like this overall.

The commit messages are rather terse in places.  I have a few questions,
I asked for a few minor tweaks, and I also noted a few possible
improvements that can be done on top.  I wonder whether we can drop
PATCH 04.

Let's discuss my findings, then decide whether we want a respin.

Thank you!


Re: [PATCH v6 00/11] qapi: untie 'if' conditions from C preprocessor
Posted by Marc-André Lureau 2 years, 8 months ago
Hi

On Tue, Aug 3, 2021 at 5:44 PM Markus Armbruster <armbru@redhat.com> wrote:

> marcandre.lureau@redhat.com writes:
>
> > 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
>
> I like this overall.
>
> The commit messages are rather terse in places.  I have a few questions,
> I asked for a few minor tweaks, and I also noted a few possible
> improvements that can be done on top.  I wonder whether we can drop
> PATCH 04.
>
> Let's discuss my findings, then decide whether we want a respin.
>

Thanks, I am sending v7 with the requested changes.