John Snow <js...@redhat.com> writes: > lookup_type() is capable of returning None, but introspect.py isn't > prepared for that. (And rightly so, if these built-in types are absent, > something has gone hugely wrong.) > > RFC: This is slightly cumbersome as-is, but a patch at the end of this series > tries to address it with some slightly slicker lookup functions that > don't need as much hand-holding. > > Signed-off-by: John Snow <js...@redhat.com> > --- > scripts/qapi/introspect.py | 8 ++++++-- > 1 file changed, 6 insertions(+), 2 deletions(-) > > diff --git a/scripts/qapi/introspect.py b/scripts/qapi/introspect.py > index 67c7d89aae0..42981bce163 100644 > --- a/scripts/qapi/introspect.py > +++ b/scripts/qapi/introspect.py > @@ -227,10 +227,14 @@ def _use_type(self, typ: QAPISchemaType) -> str: > > # Map the various integer types to plain int > if typ.json_type() == 'int': > - typ = self._schema.lookup_type('int') > + tmp = self._schema.lookup_type('int') > + assert tmp is not None
More laconic: assert tmp > + typ = tmp > elif (isinstance(typ, QAPISchemaArrayType) and > typ.element_type.json_type() == 'int'): > - typ = self._schema.lookup_type('intList') > + tmp = self._schema.lookup_type('intList') > + assert tmp is not None > + typ = tmp > # Add type to work queue if new > if typ not in self._used_types: > self._used_types.append(typ) Not fond of naming things @tmp, but I don't have a better name to offer. We could avoid the lookup by having _def_predefineds() set suitable attributes, like it serts .the_empty_object_type. Matter of taste. Not now unless you want to.