On Thu, Sep 15, 2022 at 10:42:54PM +0200, Markus Armbruster wrote:
> In QAPI, absent optional members are distinct from any present value.
> We thus represent an optional schema member FOO as two C members: a
> FOO with the member's type, and a bool has_FOO.  Likewise for function
> arguments.
> 
> However, has_FOO is actually redundant for a pointer-valued FOO, which
> can be null only when has_FOO is false, i.e. has_FOO == !!FOO.  Except
> for arrays, where we a null FOO can also be a present empty array.
> 
> The redundant has_FOO are a nuisance to work with.  Improve the
> generator to elide them.  Uses of has_FOO need to be replaced as
> follows.
> 
> Tests of has_FOO become the equivalent comparison of FOO with null.
> For brevity, this is commonly done by implicit conversion to bool.
> 
> Assignments to has_FOO get dropped.
> 
> Likewise for arguments to has_FOO parameters.
> 
> Beware: code may violate the invariant has_FOO == !!FOO before the
> transformation, and get away with it.  The above transformation can
> then break things.  Two cases:
> 
> * Absent: if code ignores FOO entirely when !has_FOO (except for
>   freeing it if necessary), even non-null / uninitialized FOO works.
>   Such code is known to exist.
> 
> * Present: if code ignores FOO entirely when has_FOO, even null FOO
>   works.  Such code should not exist.
> 
> In both cases, replacing tests of has_FOO by FOO reverts their sense.
> We have to fix the value of FOO then.
> 
> To facilitate review of the necessary updates to handwritten code, add
> means to opt out of this change, and opt out for all QAPI schema
> modules where the change requires updates to handwritten code.  The
> next few commits will remove these opt-outs in reviewable chunks, then
> drop the means to opt out.
> 
> Signed-off-by: Markus Armbruster <arm...@redhat.com>
> ---
>  docs/devel/qapi-code-gen.rst            |  5 +--
>  docs/devel/writing-monitor-commands.rst | 14 ++++----
>  scripts/qapi/commands.py                |  2 +-
>  scripts/qapi/events.py                  |  2 +-
>  scripts/qapi/gen.py                     |  2 +-
>  scripts/qapi/schema.py                  | 47 +++++++++++++++++++++++++
>  scripts/qapi/types.py                   |  2 +-
>  scripts/qapi/visit.py                   | 17 +++++++--
>  8 files changed, 76 insertions(+), 15 deletions(-)
> 

Reviewed-by: Daniel P. Berrangé <berra...@redhat.com>

With regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|


Reply via email to