[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v7 06/14] qapi: Create simple union type member
From: |
Markus Armbruster |
Subject: |
Re: [Qemu-devel] [PATCH v7 06/14] qapi: Create simple union type member earlier |
Date: |
Wed, 07 Oct 2015 18:44:47 +0200 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/24.5 (gnu/linux) |
Eric Blake <address@hidden> writes:
> For simple unions, we were creating the implicit 'type' tag
> member during the QAPISchemaObjectTypeVariants constructor.
> This is different from every other implicit QAPISchemaEntity
> object, which get created by QAPISchema methods. Hoist the
> creation to the caller (renaming _make_tag_enum() to
> _make_implicit_tag()), and pass the entity rather than the
> string name, so that we have the nice property that no
> entities are created as a side effect within a different
> entity. A later patch will then have an easier time of
> associating location info with each entity creation.
>
> No change to generated code.
>
> Signed-off-by: Eric Blake <address@hidden>
>
> ---
> v7: Rework assertions, rename to _make_implicit_tag()
> v6: New patch
> ---
> scripts/qapi.py | 29 +++++++++++++++--------------
> 1 file changed, 15 insertions(+), 14 deletions(-)
>
> diff --git a/scripts/qapi.py b/scripts/qapi.py
> index b1134b8..eaa43b8 100644
> --- a/scripts/qapi.py
> +++ b/scripts/qapi.py
> @@ -1033,18 +1033,18 @@ class QAPISchemaObjectTypeMember(object):
>
>
> class QAPISchemaObjectTypeVariants(object):
> - def __init__(self, tag_name, tag_enum, variants):
> - assert tag_name is None or isinstance(tag_name, str)
> - assert tag_enum is None or isinstance(tag_enum, str)
> + def __init__(self, tag_name, tag_member, variants):
> + # Flat unions pass tag_name but not tag_member.
> + # Simple unions and alternates pass tag_member but not tag_name.
> + # After check(), tag_member is always set, and tag_name remains
> + # a reliable witness of being used by a flat union.
> + assert bool(tag_member) != bool(tag_name)
> + assert (isinstance(tag_name, str) or
> + isinstance(tag_member, QAPISchemaObjectTypeMember))
> for v in variants:
> assert isinstance(v, QAPISchemaObjectTypeVariant)
> self.tag_name = tag_name
> - if tag_name:
> - assert not tag_enum
> - self.tag_member = None
> - else:
> - self.tag_member = QAPISchemaObjectTypeMember('type', tag_enum,
> - False)
> + self.tag_member = tag_member
> self.variants = variants
>
> def check(self, schema, members, seen):
> @@ -1251,9 +1251,10 @@ class QAPISchema(object):
> typ, 'wrapper', [self._make_member('data', typ, info)])
> return QAPISchemaObjectTypeVariant(case, typ)
>
> - def _make_tag_enum(self, type_name, variants):
> - return self._make_implicit_enum_type(type_name,
> - [v.name for v in variants])
> + def _make_implicit_tag(self, type_name, variants):
> + typ = self._make_implicit_enum_type(type_name,
> + [v.name for v in variants])
> + return QAPISchemaObjectTypeMember('type', typ, False)
>
> def _def_union_type(self, expr, info):
> name = expr['union']
> @@ -1267,7 +1268,7 @@ class QAPISchema(object):
> else:
> variants = [self._make_simple_variant(key, value, info)
> for (key, value) in data.iteritems()]
> - tag_enum = self._make_tag_enum(name, variants)
> + tag_enum = self._make_implicit_tag(name, variants)
Rename tag_enum to tag_member or tag?
> self._def_entity(
> QAPISchemaObjectType(name, info, base,
> self._make_members(OrderedDict(), info),
> @@ -1280,7 +1281,7 @@ class QAPISchema(object):
> data = expr['data']
> variants = [self._make_variant(key, value)
> for (key, value) in data.iteritems()]
> - tag_enum = self._make_tag_enum(name, variants)
> + tag_enum = self._make_implicit_tag(name, variants)
> self._def_entity(
> QAPISchemaAlternateType(name, info,
> QAPISchemaObjectTypeVariants(None,
Likewise.
- [Qemu-devel] [PATCH v7 00/14] post-introspection cleanups, subset B, Eric Blake, 2015/10/08
- [Qemu-devel] [PATCH v7 12/14] qapi: Move duplicate enum value checks to schema check(), Eric Blake, 2015/10/08
- [Qemu-devel] [PATCH v7 02/14] qapi: Prepare for errors during check(), Eric Blake, 2015/10/08
- [Qemu-devel] [PATCH v7 04/14] qapi: Don't use info as witness of implicit object type, Eric Blake, 2015/10/08
- [Qemu-devel] [PATCH v7 06/14] qapi: Create simple union type member earlier, Eric Blake, 2015/10/08
- Re: [Qemu-devel] [PATCH v7 06/14] qapi: Create simple union type member earlier,
Markus Armbruster <=
- [Qemu-devel] [PATCH v7 07/14] qapi: Move union tag quirks into subclass, Eric Blake, 2015/10/08
- [Qemu-devel] [PATCH v7 05/14] qapi: Lazy creation of array types, Eric Blake, 2015/10/08