[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [RFC PATCH 15/18] qapi: Support empty modules
From: |
Markus Armbruster |
Subject: |
Re: [RFC PATCH 15/18] qapi: Support empty modules |
Date: |
Tue, 12 Nov 2019 09:29:07 +0100 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/26.2 (gnu/linux) |
Kevin Wolf <address@hidden> writes:
> If you added an include file that doesn't contain any definitions, no
> source files would be generated for it. However, in other source files,
> you would still get an #include for the header files of the empty
> module.
Bug.
Cause: we generate #include module.h always, and the module.h when
visiting its first definition. If there are no definitions, we don't.
> The intended behaviour is that empty source files are created for empty
> modules.
Yes.
> This patch makes QAPISchema keep a list of all modules
> (including empty ones) and modifies visit() to first visit all modules
> in that list.
Minimally invasive fix. Backends still initialize module output on
first visit_module(), but now all modules are visited upfront.
Separating "initialize module" from "switch to module" might be easier
to understand. Idea, not demand.
> Some test reference outputs need to be updated due to the additional
> visitor calls.
>
> Signed-off-by: Kevin Wolf <address@hidden>
> ---
> scripts/qapi/schema.py | 9 +++++++++
> tests/qapi-schema/comments.out | 2 ++
> tests/qapi-schema/doc-bad-section.out | 2 ++
> tests/qapi-schema/doc-good.out | 2 ++
> tests/qapi-schema/empty.out | 2 ++
> tests/qapi-schema/event-case.out | 2 ++
> tests/qapi-schema/include-repetition.out | 4 ++++
> tests/qapi-schema/include-simple.out | 3 +++
> tests/qapi-schema/indented-expr.out | 2 ++
> tests/qapi-schema/qapi-schema-test.out | 4 ++++
> 10 files changed, 32 insertions(+)
>
> diff --git a/scripts/qapi/schema.py b/scripts/qapi/schema.py
> index 38041098bd..e1b034d67d 100644
> --- a/scripts/qapi/schema.py
> +++ b/scripts/qapi/schema.py
> @@ -749,6 +749,7 @@ class QAPISchema(object):
> self.docs = parser.docs
> self._entity_list = []
> self._entity_dict = {}
> + self._modules = [os.path.basename(fname)]
> self._predefining = True
> self._def_predefineds()
> self._predefining = False
> @@ -800,6 +801,8 @@ class QAPISchema(object):
> main_info = main_info.parent
> fname = os.path.relpath(include, os.path.dirname(main_info.fname))
> self._def_entity(QAPISchemaInclude(fname, info))
> + if fname not in self._modules:
> + self._modules.append(fname)
>
> def _def_builtin_type(self, name, json_type, c_type):
> self._def_entity(QAPISchemaBuiltinType(name, json_type, c_type))
> @@ -1033,6 +1036,12 @@ class QAPISchema(object):
> visitor.visit_begin(self)
> module = None
> visitor.visit_module(module)
> +
> + # Make sure that all modules are visited, even if they contain no
> + # entities
> + for module in self._modules:
> + visitor.visit_module(module)
> +
Slightly neater, I think:
visitor.visit_begin(self)
+
+ # Visit all modules, to ensure @visitor sees them
+ for module in self._modules:
+ visitor.visit_module(module)
+
module = None
visitor.visit_module(module)
This way, we keep starting with module None rather than whatever user
module comes last. The .out diffs below then don't add a nother "module
None" line.
> for entity in self._entity_list:
> if visitor.visit_needed(entity):
> if entity.module != module:
> diff --git a/tests/qapi-schema/comments.out b/tests/qapi-schema/comments.out
> index 273f0f54e1..fa7e95d1cc 100644
> --- a/tests/qapi-schema/comments.out
> +++ b/tests/qapi-schema/comments.out
> @@ -1,4 +1,6 @@
> module None
> +module comments.json
> +module None
> object q_empty
> enum QType
> prefix QTYPE
[...]
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- Re: [RFC PATCH 15/18] qapi: Support empty modules,
Markus Armbruster <=