qapi: Reserve '*List' type names for list types

Type names ending in 'List' can clash with qapi list types in
generated C. We don't currently use such names. It is easier to
outlaw them now than to worry about how to resolve such a clash
in the future. For precedence, see commit 4dc2e69, which did the
same for names ending in 'Kind' versus implicit enum types for
qapi unions.

Update the testsuite to match.

Backports commit 255960dd374d4497d6ea537305f1b0d8a3433789 from qemu
This commit is contained in:
Eric Blake 2018-02-19 19:08:11 -05:00 committed by Lioncash
parent 017baefb66
commit b9f93dd0e8
No known key found for this signature in database
GPG Key ID: 4E3C3CC1031BA9C7

View File

@ -391,10 +391,10 @@ def add_name(name, info, meta, implicit=False):
raise QAPIExprError(info,
"%s '%s' is already defined"
% (all_names[name], name))
if not implicit and name.endswith('Kind'):
if not implicit and (name.endswith('Kind') or name.endswith('List')):
raise QAPIExprError(info,
"%s '%s' should not end in 'Kind'"
% (meta, name))
"%s '%s' should not end in '%s'"
% (meta, name, name[-4:]))
all_names[name] = meta
@ -1195,9 +1195,7 @@ class QAPISchema(object):
return name
def _make_array_type(self, element_type, info):
# TODO fooList namespace is not reserved; user can create collisions,
# or abuse our type system with ['fooList'] for 2D array
name = element_type + 'List'
name = element_type + 'List' # Use namespace reserved by add_name()
if not self.lookup_type(name):
self._def_entity(QAPISchemaArrayType(name, info, element_type))
return name