|
@@ -833,7 +833,7 @@ def check_alternate(expr, info):
|
|
check_name(info, "Member of alternate '%s'" % name, key)
|
|
check_name(info, "Member of alternate '%s'" % name, key)
|
|
check_known_keys(info,
|
|
check_known_keys(info,
|
|
"member '%s' of alternate '%s'" % (key, name),
|
|
"member '%s' of alternate '%s'" % (key, name),
|
|
- value, ['type'], [])
|
|
|
|
|
|
+ value, ['type'], ['if'])
|
|
typ = value['type']
|
|
typ = value['type']
|
|
|
|
|
|
# Ensure alternates have no type conflicts.
|
|
# Ensure alternates have no type conflicts.
|
|
@@ -1754,8 +1754,8 @@ def _def_struct_type(self, expr, info, doc):
|
|
self._make_members(data, info),
|
|
self._make_members(data, info),
|
|
None))
|
|
None))
|
|
|
|
|
|
- def _make_variant(self, case, typ):
|
|
|
|
- return QAPISchemaObjectTypeVariant(case, typ)
|
|
|
|
|
|
+ def _make_variant(self, case, typ, ifcond):
|
|
|
|
+ return QAPISchemaObjectTypeVariant(case, typ, ifcond)
|
|
|
|
|
|
def _make_simple_variant(self, case, typ, ifcond, info):
|
|
def _make_simple_variant(self, case, typ, ifcond, info):
|
|
if isinstance(typ, list):
|
|
if isinstance(typ, list):
|
|
@@ -1778,7 +1778,7 @@ def _def_union_type(self, expr, info, doc):
|
|
name, info, doc, ifcond,
|
|
name, info, doc, ifcond,
|
|
'base', self._make_members(base, info))
|
|
'base', self._make_members(base, info))
|
|
if tag_name:
|
|
if tag_name:
|
|
- variants = [self._make_variant(key, value['type'])
|
|
|
|
|
|
+ variants = [self._make_variant(key, value['type'], value.get('if'))
|
|
for (key, value) in data.items()]
|
|
for (key, value) in data.items()]
|
|
members = []
|
|
members = []
|
|
else:
|
|
else:
|
|
@@ -1799,7 +1799,7 @@ def _def_alternate_type(self, expr, info, doc):
|
|
name = expr['alternate']
|
|
name = expr['alternate']
|
|
data = expr['data']
|
|
data = expr['data']
|
|
ifcond = expr.get('if')
|
|
ifcond = expr.get('if')
|
|
- variants = [self._make_variant(key, value['type'])
|
|
|
|
|
|
+ variants = [self._make_variant(key, value['type'], value.get('if'))
|
|
for (key, value) in data.items()]
|
|
for (key, value) in data.items()]
|
|
tag_member = QAPISchemaObjectTypeMember('type', 'QType', False)
|
|
tag_member = QAPISchemaObjectTypeMember('type', 'QType', False)
|
|
self._def_entity(
|
|
self._def_entity(
|