Skip to content

Commit

Permalink
qapi.py: Allow top-level type reference for command definitions
Browse files Browse the repository at this point in the history
If 'data' for a command definition isn't a dict, but a string, it is
taken as a (struct) type name and the fields of this struct are directly
used as parameters.

This is useful for transactionable commands that can use the same type
definition for both the transaction action and the arguments of the
standalone command.

Signed-off-by: Kevin Wolf <[email protected]>
Reviewed-by: Michael Roth <[email protected]>
Signed-off-by: Luiz Capitulino <[email protected]>
  • Loading branch information
kevmw authored and Luiz Capitulino committed Jul 10, 2013
1 parent bd9927f commit b35284e
Showing 1 changed file with 19 additions and 0 deletions.
19 changes: 19 additions & 0 deletions scripts/qapi.py
Original file line number Diff line number Diff line change
Expand Up @@ -106,11 +106,18 @@ def parse_schema(fp):
add_enum(expr_eval['enum'])
elif expr_eval.has_key('union'):
add_enum('%sKind' % expr_eval['union'])
elif expr_eval.has_key('type'):
add_struct(expr_eval)
exprs.append(expr_eval)

return exprs

def parse_args(typeinfo):
if isinstance(typeinfo, basestring):
struct = find_struct(typeinfo)
assert struct != None
typeinfo = struct['data']

for member in typeinfo:
argname = member
argentry = typeinfo[member]
Expand Down Expand Up @@ -180,6 +187,18 @@ def type_name(name):
return name

enum_types = []
struct_types = []

def add_struct(definition):
global struct_types
struct_types.append(definition)

def find_struct(name):
global struct_types
for struct in struct_types:
if struct['type'] == name:
return struct
return None

def add_enum(name):
global enum_types
Expand Down

0 comments on commit b35284e

Please sign in to comment.