summary refs log tree commit diff stats
path: root/scripts/qapi.py
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/qapi.py')
-rw-r--r--scripts/qapi.py46
1 files changed, 29 insertions, 17 deletions
diff --git a/scripts/qapi.py b/scripts/qapi.py
index e391b5a649..e50fec826b 100644
--- a/scripts/qapi.py
+++ b/scripts/qapi.py
@@ -419,7 +419,7 @@ def check_union(expr, expr_info):
     members = expr['data']
     values = { 'MAX': '(automatic)' }
 
-    # If the object has a member 'base', its value must name a complex type,
+    # If the object has a member 'base', its value must name a struct,
     # and there must be a discriminator.
     if base is not None:
         if discriminator is None:
@@ -448,18 +448,18 @@ def check_union(expr, expr_info):
         base_fields = find_base_fields(base)
         if not base_fields:
             raise QAPIExprError(expr_info,
-                                "Base '%s' is not a valid type"
+                                "Base '%s' is not a valid struct"
                                 % base)
 
         # The value of member 'discriminator' must name a non-optional
-        # member of the base type.
+        # member of the base struct.
         check_name(expr_info, "Discriminator of flat union '%s'" % name,
                    discriminator)
         discriminator_type = base_fields.get(discriminator)
         if not discriminator_type:
             raise QAPIExprError(expr_info,
                                 "Discriminator '%s' is not a member of base "
-                                "type '%s'"
+                                "struct '%s'"
                                 % (discriminator, base))
         enum_define = find_enum(discriminator_type)
         allow_metas=['struct']
@@ -546,12 +546,12 @@ def check_enum(expr, expr_info):
         values[key] = member
 
 def check_struct(expr, expr_info):
-    name = expr['type']
+    name = expr['struct']
     members = expr['data']
 
-    check_type(expr_info, "'data' for type '%s'" % name, members,
+    check_type(expr_info, "'data' for struct '%s'" % name, members,
                allow_dict=True, allow_optional=True)
-    check_type(expr_info, "'base' for type '%s'" % name, expr.get('base'),
+    check_type(expr_info, "'base' for struct '%s'" % name, expr.get('base'),
                allow_metas=['struct'])
 
 def check_exprs(schema):
@@ -565,7 +565,7 @@ def check_exprs(schema):
             check_union(expr, info)
         elif expr.has_key('alternate'):
             check_alternate(expr, info)
-        elif expr.has_key('type'):
+        elif expr.has_key('struct'):
             check_struct(expr, info)
         elif expr.has_key('command'):
             check_command(expr, info)
@@ -617,6 +617,20 @@ def parse_schema(input_file):
         for expr_elem in schema.exprs:
             expr = expr_elem['expr']
             info = expr_elem['info']
+
+            # back-compat hack until all schemas have been converted;
+            # preserve the ordering of the original expression
+            if expr.has_key('type'):
+                seen_type = False
+                for (key, value) in expr.items():
+                    if key == 'type':
+                        seen_type = True
+                        del expr['type']
+                        expr['struct'] = value
+                    elif seen_type:
+                        del expr[key]
+                        expr[key] = value
+
             if expr.has_key('enum'):
                 check_keys(expr_elem, 'enum', ['data'])
                 add_enum(expr['enum'], info, expr['data'])
@@ -627,8 +641,8 @@ def parse_schema(input_file):
             elif expr.has_key('alternate'):
                 check_keys(expr_elem, 'alternate', ['data'])
                 add_name(expr['alternate'], info, 'alternate')
-            elif expr.has_key('type'):
-                check_keys(expr_elem, 'type', ['data'], ['base'])
+            elif expr.has_key('struct'):
+                check_keys(expr_elem, 'struct', ['data'], ['base'])
                 add_struct(expr, info)
             elif expr.has_key('command'):
                 check_keys(expr_elem, 'command', [],
@@ -745,11 +759,9 @@ def type_name(name):
         return c_list_type(name[0])
     return name
 
-def add_name(name, info, meta, implicit = False, source = None):
+def add_name(name, info, meta, implicit = False):
     global all_names
-    if not source:
-        source = "'%s'" % meta
-    check_name(info, source, name)
+    check_name(info, "'%s'" % meta, name)
     if name in all_names:
         raise QAPIExprError(info,
                             "%s '%s' is already defined"
@@ -762,14 +774,14 @@ def add_name(name, info, meta, implicit = False, source = None):
 
 def add_struct(definition, info):
     global struct_types
-    name = definition['type']
-    add_name(name, info, 'struct', source="'type'")
+    name = definition['struct']
+    add_name(name, info, 'struct')
     struct_types.append(definition)
 
 def find_struct(name):
     global struct_types
     for struct in struct_types:
-        if struct['type'] == name:
+        if struct['struct'] == name:
             return struct
     return None