How many bits we use internally is an implementation detail. It could be pressed into external interface service as very approximate range information, but that's probably a bad idea. If we need range information, we better do it properly.
Reduces output of query-schema by a negligible 0.5 out of 85KiB. Signed-off-by: Markus Armbruster <arm...@redhat.com> Reviewed-by: Eric Blake <ebl...@redhat.com> --- docs/qapi-code-gen.txt | 11 ++++++++--- scripts/qapi-introspect.py | 7 +++++++ 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/docs/qapi-code-gen.txt b/docs/qapi-code-gen.txt index 893a6f6..458b217 100644 --- a/docs/qapi-code-gen.txt +++ b/docs/qapi-code-gen.txt @@ -668,14 +668,19 @@ Example: the SchemaInfo for MyEnum from section Enumeration types "values": [ "value1", "value2", "value3" ] } The SchemaInfo for a built-in type has the same name as the type in -the QAPI schema (see section Built-in Types). It has variant member -"json-type" that shows how values of this type are encoded on the -wire. +the QAPI schema (see section Built-in Types), with one exception +detailed below. It has variant member "json-type" that shows how +values of this type are encoded on the wire. Example: the SchemaInfo for str { "name": "str", "meta-type": "builtin", "json-type": "string" } +The QAPI schema supports a number of integer types that only differ in +how they map to C. They are identical as far as SchemaInfo is +concerned. Therefore, they get all mapped to a single type "int" in +SchemaInfo. + As explained above, type names are not part of the wire ABI. Not even the names of built-in types. Clients should examine member "json-type" instead of hard-coding names of built-in types. diff --git a/scripts/qapi-introspect.py b/scripts/qapi-introspect.py index 754f263..1bc26f0 100644 --- a/scripts/qapi-introspect.py +++ b/scripts/qapi-introspect.py @@ -77,6 +77,13 @@ const char %(c_name)s[] = %(c_string)s; self._used_types = None def _use_type(self, typ): + # Map the various integer types to plain int + if typ.json_type() == 'int': + typ = self._schema.lookup_type('int') + elif (isinstance(typ, QAPISchemaArrayType) and + typ.element_type.json_type() == 'int'): + typ = self._schema.lookup_type('intList') + # Add type to work queue if new if typ not in self._used_types: self._used_types.append(typ) return typ.name -- 2.4.3