mirror of https://gitee.com/openkylin/qemu.git
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:
parent
29637a6ee9
commit
d44f9ac80c
|
@ -1018,28 +1018,18 @@ def visit(self, visitor):
|
|||
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 @@ def describe(self):
|
|||
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.
|
||||
|
|
Loading…
Reference in New Issue