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: Eric Blake <eblake@redhat.com>
Message-Id: <1449033659-25497-11-git-send-email-eblake@redhat.com>
Signed-off-by: Markus Armbruster <armbru@redhat.com>
This commit is contained in:
Eric Blake 2015-12-01 22:20:54 -07:00 committed by Markus Armbruster
parent 29637a6ee9
commit d44f9ac80c
1 changed files with 17 additions and 12 deletions

View File

@ -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.