aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Blake <eblake@redhat.com>2015-12-01 22:20:54 -0700
committerMarkus Armbruster <armbru@redhat.com>2015-12-17 08:21:29 +0100
commitd44f9ac80c43e34b1522cde8829f0ab371f086ca (patch)
treec1abfe9e64392617be1bf359c404ea1b5062d631
parent29637a6ee913df8fcdf371426ee48956b945b618 (diff)
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>
-rw-r--r--scripts/qapi.py29
1 files changed, 17 insertions, 12 deletions
diff --git a/scripts/qapi.py b/scripts/qapi.py
index 58ecdf2a95..168463abb7 100644
--- a/scripts/qapi.py
+++ b/scripts/qapi.py
@@ -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.