[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v6 04/15] qapi: leave the ifcond attribute undef
From: |
Markus Armbruster |
Subject: |
Re: [Qemu-devel] [PATCH v6 04/15] qapi: leave the ifcond attribute undefined until check() |
Date: |
Thu, 28 Jun 2018 19:45:44 +0200 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/26.1 (gnu/linux) |
Marc-André Lureau <address@hidden> writes:
> We commonly initialize attributes to None in .init(), then set their
> real value in .check(). Accessing the attribute before .check()
> yields None. If we're lucky, the code that accesses the attribute
> prematurely chokes on None.
>
> It won't for .ifcond, because None is a legitimate value.
>
> Leave the ifcond attribute undefined until check().
>
> Suggested-by: Markus Armbruster <address@hidden>
> Signed-off-by: Marc-André Lureau <address@hidden>
> Reviewed-by: Markus Armbruster <address@hidden>
Note to self: consider squashing into previous patch.
> ---
> scripts/qapi/common.py | 21 +++++++++++++++++----
> 1 file changed, 17 insertions(+), 4 deletions(-)
>
> diff --git a/scripts/qapi/common.py b/scripts/qapi/common.py
> index 4f4014b387..46e33e23e4 100644
> --- a/scripts/qapi/common.py
> +++ b/scripts/qapi/common.py
> @@ -1021,13 +1021,19 @@ class QAPISchemaEntity(object):
> # such place).
> self.info = info
> self.doc = doc
> - self.ifcond = listify_cond(ifcond)
> + self._ifcond = ifcond # self.ifcond is set only after .check()
>
> def c_name(self):
> return c_name(self.name)
>
> def check(self, schema):
> - pass
> + if isinstance(self._ifcond, QAPISchemaType):
> + # inherit the condition from a type
> + typ = self._ifcond
> + typ.check(schema)
> + self.ifcond = typ.ifcond
> + else:
> + self.ifcond = listify_cond(self._ifcond)
>
> def is_implicit(self):
> return not self.info
One of the questions I had on v5 of this patch is still open. I asked
whether we can restrict the inheritance feature to array elements. You
pointed to implicit object types. I asked for an example (because I
couldn't figure out what you meant). Please reply in that thread.
[...]
- [Qemu-devel] [PATCH v6 00/15] qapi: add #if pre-processor conditions to generated code (part 1), Marc-André Lureau, 2018/06/27
- [Qemu-devel] [PATCH v6 01/15] qapi: add 'if' to top-level expressions, Marc-André Lureau, 2018/06/27
- [Qemu-devel] [PATCH v6 02/15] tests, Marc-André Lureau, 2018/06/27
- [Qemu-devel] [PATCH v6 03/15] qapi: pass 'if' condition into QAPISchemaEntity objects, Marc-André Lureau, 2018/06/27
- [Qemu-devel] [PATCH v6 04/15] qapi: leave the ifcond attribute undefined until check(), Marc-André Lureau, 2018/06/27
- Re: [Qemu-devel] [PATCH v6 04/15] qapi: leave the ifcond attribute undefined until check(),
Markus Armbruster <=
- [Qemu-devel] [PATCH v6 06/15] qapi: mcgen() shouldn't indent # lines, Marc-André Lureau, 2018/06/27
- [Qemu-devel] [PATCH v6 05/15] qapi: add 'ifcond' to visitor methods, Marc-André Lureau, 2018/06/27
- [Qemu-devel] [PATCH v6 07/15] qapi: add #if/#endif helpers, Marc-André Lureau, 2018/06/27
- [Qemu-devel] [PATCH v6 08/15] qapi-introspect: modify to_qlit() to append ', ' on level > 0, Marc-André Lureau, 2018/06/27
- [Qemu-devel] [PATCH v6 11/15] qapi/events: add #if conditions to events, Marc-André Lureau, 2018/06/27
- [Qemu-devel] [PATCH v6 09/15] qapi-introspect: add preprocessor conditions to generated QLit, Marc-André Lureau, 2018/06/27
- [Qemu-devel] [PATCH v6 10/15] qapi/commands: add #if conditions to commands, Marc-André Lureau, 2018/06/27
- [Qemu-devel] [PATCH v6 12/15] qapi-types: add #if conditions to types & visitors, Marc-André Lureau, 2018/06/27
- [Qemu-devel] [PATCH v6 13/15] qapi: add 'If:' section to generated documentation, Marc-André Lureau, 2018/06/27