diff options
author | John Snow | 2021-02-01 20:37:42 +0100 |
---|---|---|
committer | Markus Armbruster | 2021-02-08 14:15:58 +0100 |
commit | fd9b1603843df86b430083b583157fe0c352901e (patch) | |
tree | 6b4cd6828c3fda27d5204cfec40ce539a7f2f437 | |
parent | qapi: centralize the built-in module name definition (diff) | |
download | qemu-fd9b1603843df86b430083b583157fe0c352901e.tar.gz qemu-fd9b1603843df86b430083b583157fe0c352901e.tar.xz qemu-fd9b1603843df86b430083b583157fe0c352901e.zip |
qapi/gen: write _genc/_genh access shims
Many places assume they can access these fields without checking them
first to ensure they are defined. Eliminating the _genc and _genh fields
and replacing them with functional properties that check for correct
state can ease the typing overhead by eliminating the Optional[T] return
type.
Signed-off-by: John Snow <jsnow@redhat.com>
Message-Id: <20210201193747.2169670-12-jsnow@redhat.com>
Reviewed-by: Markus Armbruster <armbru@redhat.com>
Signed-off-by: Markus Armbruster <armbru@redhat.com>
-rw-r--r-- | scripts/qapi/gen.py | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/scripts/qapi/gen.py b/scripts/qapi/gen.py index 8ded0f7e5a..b2bb9d12ff 100644 --- a/scripts/qapi/gen.py +++ b/scripts/qapi/gen.py @@ -244,11 +244,20 @@ class QAPISchemaModularCVisitor(QAPISchemaVisitor): self._user_blurb = user_blurb self._builtin_blurb = builtin_blurb self._pydoc = pydoc - self._genc: Optional[QAPIGenC] = None - self._genh: Optional[QAPIGenH] = None + self._current_module: Optional[str] = None self._module: Dict[str, Tuple[QAPIGenC, QAPIGenH]] = {} self._main_module: Optional[str] = None + @property + def _genc(self) -> QAPIGenC: + assert self._current_module is not None + return self._module[self._current_module][0] + + @property + def _genh(self) -> QAPIGenH: + assert self._current_module is not None + return self._module[self._current_module][1] + @staticmethod def _module_dirname(name: str) -> str: if QAPISchemaModule.is_user_module(name): @@ -279,7 +288,7 @@ class QAPISchemaModularCVisitor(QAPISchemaVisitor): genc = QAPIGenC(basename + '.c', blurb, self._pydoc) genh = QAPIGenH(basename + '.h', blurb, self._pydoc) self._module[name] = (genc, genh) - self._genc, self._genh = self._module[name] + self._current_module = name def write(self, output_dir: str, opt_builtins: bool = False) -> None: for name in self._module: @@ -303,8 +312,7 @@ class QAPISchemaModularCVisitor(QAPISchemaVisitor): else: # The built-in module has not been created. No code may # be generated. - self._genc = None - self._genh = None + self._current_module = None else: assert QAPISchemaModule.is_user_module(name) self._add_module(name, self._user_blurb) |