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>
This commit is contained in:
parent
39b2d838f1
commit
fd9b160384
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user