Commit d44f9ac8 authored by Eric Blake's avatar Eric Blake Committed by Markus Armbruster
Browse files

qapi: Prepare new QAPISchemaMember base class



We want to share some clash detection code between enum values
and object type members.  To assist with that, split off part
of QAPISchemaObjectTypeMember into a new base class
QAPISchemaMember that tracks name, owner, and common clash
detection code; while the former keeps the additional fields
for type and optional flag.

Signed-off-by: default avatarEric Blake <eblake@redhat.com>
Message-Id: <1449033659-25497-11-git-send-email-eblake@redhat.com>
Signed-off-by: default avatarMarkus Armbruster <armbru@redhat.com>
parent 29637a6e
Loading
Loading
Loading
Loading
+17 −12
Original line number Diff line number Diff line
@@ -1018,28 +1018,18 @@ class QAPISchemaObjectType(QAPISchemaType):
                                       self.members, self.variants)


class QAPISchemaObjectTypeMember(object):
class QAPISchemaMember(object):
    role = 'member'

    def __init__(self, name, typ, optional):
    def __init__(self, name):
        assert isinstance(name, str)
        assert isinstance(typ, str)
        assert isinstance(optional, bool)
        self.name = name
        self._type_name = typ
        self.type = None
        self.optional = optional
        self.owner = None

    def set_owner(self, name):
        assert not self.owner
        self.owner = name

    def check(self, schema):
        assert self.owner
        self.type = schema.lookup_type(self._type_name)
        assert self.type

    def check_clash(self, info, seen):
        cname = c_name(self.name)
        if cname in seen:
@@ -1066,6 +1056,21 @@ class QAPISchemaObjectTypeMember(object):
        return "'%s' %s" % (self.name, self._pretty_owner())


class QAPISchemaObjectTypeMember(QAPISchemaMember):
    def __init__(self, name, typ, optional):
        QAPISchemaMember.__init__(self, name)
        assert isinstance(typ, str)
        assert isinstance(optional, bool)
        self._type_name = typ
        self.type = None
        self.optional = optional

    def check(self, schema):
        assert self.owner
        self.type = schema.lookup_type(self._type_name)
        assert self.type


class QAPISchemaObjectTypeVariants(object):
    def __init__(self, tag_name, tag_member, variants):
        # Flat unions pass tag_name but not tag_member.