|
@@ -910,8 +910,6 @@ def pprint(elems):
|
|
|
|
|
|
def check_keys(expr, info, meta, required, optional=[]):
|
|
|
name = expr[meta]
|
|
|
- if not isinstance(name, str):
|
|
|
- raise QAPISemError(info, "'%s' key must have a string value" % meta)
|
|
|
required = required + [meta]
|
|
|
source = "%s '%s'" % (meta, name)
|
|
|
check_known_keys(expr, info, source, required, optional)
|
|
@@ -969,37 +967,18 @@ def check_exprs(exprs):
|
|
|
|
|
|
if 'enum' in expr:
|
|
|
meta = 'enum'
|
|
|
- check_keys(expr, info, 'enum', ['data'], ['if', 'prefix'])
|
|
|
- normalize_enum(expr)
|
|
|
elif 'union' in expr:
|
|
|
meta = 'union'
|
|
|
- check_keys(expr, info, 'union', ['data'],
|
|
|
- ['base', 'discriminator', 'if'])
|
|
|
- normalize_members(expr.get('base'))
|
|
|
- normalize_members(expr['data'])
|
|
|
elif 'alternate' in expr:
|
|
|
meta = 'alternate'
|
|
|
- check_keys(expr, info, 'alternate', ['data'], ['if'])
|
|
|
- normalize_members(expr['data'])
|
|
|
elif 'struct' in expr:
|
|
|
meta = 'struct'
|
|
|
- check_keys(expr, info, 'struct', ['data'],
|
|
|
- ['base', 'if', 'features'])
|
|
|
- normalize_members(expr['data'])
|
|
|
- normalize_features(expr.get('features'))
|
|
|
elif 'command' in expr:
|
|
|
meta = 'command'
|
|
|
- check_keys(expr, info, 'command', [],
|
|
|
- ['data', 'returns', 'gen', 'success-response',
|
|
|
- 'boxed', 'allow-oob', 'allow-preconfig', 'if'])
|
|
|
- normalize_members(expr.get('data'))
|
|
|
elif 'event' in expr:
|
|
|
meta = 'event'
|
|
|
- check_keys(expr, info, 'event', [], ['data', 'boxed', 'if'])
|
|
|
- normalize_members(expr.get('data'))
|
|
|
else:
|
|
|
raise QAPISemError(info, "expression is missing metatype")
|
|
|
- normalize_if(expr)
|
|
|
|
|
|
name = expr[meta]
|
|
|
check_name_is_str(name, info, "'%s'" % meta)
|
|
@@ -1013,20 +992,39 @@ def check_exprs(exprs):
|
|
|
% (name, doc.symbol))
|
|
|
|
|
|
if meta == 'enum':
|
|
|
+ check_keys(expr, info, 'enum', ['data'], ['if', 'prefix'])
|
|
|
+ normalize_enum(expr)
|
|
|
check_enum(expr, info)
|
|
|
elif meta == 'union':
|
|
|
+ check_keys(expr, info, 'union', ['data'],
|
|
|
+ ['base', 'discriminator', 'if'])
|
|
|
+ normalize_members(expr.get('base'))
|
|
|
+ normalize_members(expr['data'])
|
|
|
check_union(expr, info)
|
|
|
elif meta == 'alternate':
|
|
|
+ check_keys(expr, info, 'alternate', ['data'], ['if'])
|
|
|
+ normalize_members(expr['data'])
|
|
|
check_alternate(expr, info)
|
|
|
elif meta == 'struct':
|
|
|
+ check_keys(expr, info, 'struct', ['data'],
|
|
|
+ ['base', 'if', 'features'])
|
|
|
+ normalize_members(expr['data'])
|
|
|
+ normalize_features(expr.get('features'))
|
|
|
check_struct(expr, info)
|
|
|
elif meta == 'command':
|
|
|
+ check_keys(expr, info, 'command', [],
|
|
|
+ ['data', 'returns', 'gen', 'success-response',
|
|
|
+ 'boxed', 'allow-oob', 'allow-preconfig', 'if'])
|
|
|
+ normalize_members(expr.get('data'))
|
|
|
check_command(expr, info)
|
|
|
elif meta == 'event':
|
|
|
+ check_keys(expr, info, 'event', [], ['data', 'boxed', 'if'])
|
|
|
+ normalize_members(expr.get('data'))
|
|
|
check_event(expr, info)
|
|
|
else:
|
|
|
assert False, 'unexpected meta type'
|
|
|
|
|
|
+ normalize_if(expr)
|
|
|
check_if(expr, info)
|
|
|
check_flags(expr, info)
|
|
|
|