From b9f93dd0e80c1429959bfad9a0b87f02a9f499bf Mon Sep 17 00:00:00 2001 From: Eric Blake Date: Mon, 19 Feb 2018 19:08:11 -0500 Subject: [PATCH] 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 --- qemu/scripts/qapi.py | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/qemu/scripts/qapi.py b/qemu/scripts/qapi.py index 77df6234..08f47cc9 100644 --- a/qemu/scripts/qapi.py +++ b/qemu/scripts/qapi.py @@ -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