qapi: Prefer 'struct' over 'type' in generator
authorEric Blake <eblake@redhat.com>
Mon, 4 May 2015 15:05:25 +0000 (09:05 -0600)
committerMarkus Armbruster <armbru@redhat.com>
Tue, 5 May 2015 16:39:01 +0000 (18:39 +0200)
Referring to "type" as both a meta-type (built-in, enum, union,
alternate, or struct) and a specific type (the name that the
schema uses for declaring structs) is confusing.  The confusion
is only made worse by the fact that the generator mostly already
refers to struct even when dealing with expr['type'].  This
commit changes the generator to consistently refer to it as
struct everywhere, plus a single back-compat tweak that allows
accepting the existing .json files as-is, so that the meat of
this change is separate from the mindless churn of that change.

Fix the testsuite fallout for error messages that change, and
in some cases, become more legible.  Improve comments to better
match our intentions where a struct (rather than any complex
type) is required.  Note that in some cases, an error message
now refers to 'struct' while the schema still refers to 'type';
that will be cleaned up in the later commit to the schema.

Signed-off-by: Eric Blake <eblake@redhat.com>
Reviewed-by: Markus Armbruster <armbru@redhat.com>
Signed-off-by: Markus Armbruster <armbru@redhat.com>
22 files changed:
scripts/qapi-types.py
scripts/qapi-visit.py
scripts/qapi.py
tests/qapi-schema/alternate-good.out
tests/qapi-schema/bad-base.err
tests/qapi-schema/bad-ident.err
tests/qapi-schema/bad-type-bool.err
tests/qapi-schema/data-member-array.out
tests/qapi-schema/double-type.err
tests/qapi-schema/flat-union-bad-base.json
tests/qapi-schema/flat-union-base-star.err
tests/qapi-schema/flat-union-base-star.json
tests/qapi-schema/flat-union-base-union.err
tests/qapi-schema/flat-union-base-union.json
tests/qapi-schema/flat-union-branch-clash.out
tests/qapi-schema/flat-union-inline.json
tests/qapi-schema/flat-union-int-branch.json
tests/qapi-schema/flat-union-invalid-discriminator.err
tests/qapi-schema/flat-union-reverse-define.out
tests/qapi-schema/qapi-schema-test.out
tests/qapi-schema/union-invalid-base.err
tests/qapi-schema/unknown-expr-key.err

index 9c8d68cfb4aac5769dda650bbc0266148c92c194..a429d9ec055f3c71d4693b9d0d72a68fb116afbf 100644 (file)
@@ -83,7 +83,7 @@ def generate_struct_fields(members):
 
 def generate_struct(expr):
 
-    structname = expr.get('type', "")
+    structname = expr.get('struct', "")
     fieldname = expr.get('field', "")
     members = expr['data']
     base = expr.get('base')
@@ -394,8 +394,8 @@ fdecl.write(guardend("QAPI_TYPES_BUILTIN_STRUCT_DECL"))
 
 for expr in exprs:
     ret = "\n"
-    if expr.has_key('type'):
-        ret += generate_fwd_struct(expr['type'], expr['data'])
+    if expr.has_key('struct'):
+        ret += generate_fwd_struct(expr['struct'], expr['data'])
     elif expr.has_key('enum'):
         ret += generate_enum(expr['enum'], expr['data']) + "\n"
         ret += generate_fwd_enum_struct(expr['enum'], expr['data'])
@@ -435,12 +435,12 @@ if do_builtins:
 
 for expr in exprs:
     ret = "\n"
-    if expr.has_key('type'):
+    if expr.has_key('struct'):
         ret += generate_struct(expr) + "\n"
-        ret += generate_type_cleanup_decl(expr['type'] + "List")
-        fdef.write(generate_type_cleanup(expr['type'] + "List") + "\n")
-        ret += generate_type_cleanup_decl(expr['type'])
-        fdef.write(generate_type_cleanup(expr['type']) + "\n")
+        ret += generate_type_cleanup_decl(expr['struct'] + "List")
+        fdef.write(generate_type_cleanup(expr['struct'] + "List") + "\n")
+        ret += generate_type_cleanup_decl(expr['struct'])
+        fdef.write(generate_type_cleanup(expr['struct']) + "\n")
     elif expr.has_key('union'):
         ret += generate_union(expr, 'union')
         ret += generate_type_cleanup_decl(expr['union'] + "List")
index 9222671ff824bc8365be2cc789bc49b2ccd4715c..c739a95a87efc5b37af0077d713eb6e086598ee2 100644 (file)
@@ -178,7 +178,7 @@ def generate_visit_struct_body(field_prefix, name, members):
 
 def generate_visit_struct(expr):
 
-    name = expr['type']
+    name = expr['struct']
     members = expr['data']
     base = expr.get('base')
 
@@ -545,12 +545,12 @@ if do_builtins:
         fdef.write(generate_visit_list(typename, None))
 
 for expr in exprs:
-    if expr.has_key('type'):
+    if expr.has_key('struct'):
         ret = generate_visit_struct(expr)
-        ret += generate_visit_list(expr['type'], expr['data'])
+        ret += generate_visit_list(expr['struct'], expr['data'])
         fdef.write(ret)
 
-        ret = generate_declaration(expr['type'], expr['data'])
+        ret = generate_declaration(expr['struct'], expr['data'])
         fdecl.write(ret)
     elif expr.has_key('union'):
         ret = generate_visit_union(expr)
index e391b5a649a670fb67d9520d22f6d64db16c2197..e50fec826bd6f8ba2bac16f65f51484494dabcc8 100644 (file)
@@ -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
 
index c3a6b7723c5d09487ebdf92a5e9ea1782b343cdd..99848eefbb7493d179cb7cf793d6b5ea0ff3529c 100644 (file)
@@ -1,6 +1,6 @@
-[OrderedDict([('type', 'Data'), ('data', OrderedDict([('*number', 'int'), ('*name', 'str')]))]),
+[OrderedDict([('struct', 'Data'), ('data', OrderedDict([('*number', 'int'), ('*name', 'str')]))]),
  OrderedDict([('enum', 'Enum'), ('data', ['hello', 'world'])]),
  OrderedDict([('alternate', 'Alt'), ('data', OrderedDict([('value', 'int'), ('string', 'Enum'), ('struct', 'Data')]))])]
 [{'enum_name': 'Enum', 'enum_values': ['hello', 'world']},
  {'enum_name': 'AltKind', 'enum_values': None}]
-[OrderedDict([('type', 'Data'), ('data', OrderedDict([('*number', 'int'), ('*name', 'str')]))])]
+[OrderedDict([('struct', 'Data'), ('data', OrderedDict([('*number', 'int'), ('*name', 'str')]))])]
index f398bbb7d3f41d2dbfcf7ba8b76829288f699918..154274bdd3f2678da93b90328976892be6e10503 100644 (file)
@@ -1 +1 @@
-tests/qapi-schema/bad-base.json:3: 'base' for type 'MyType' cannot use union type 'Union'
+tests/qapi-schema/bad-base.json:3: 'base' for struct 'MyType' cannot use union type 'Union'
index 42b490ce0b26e1f9cabe56012481fb1e0eb0b18b..c4190602b5c4f552b4fea0fe3d6f9e186134cd11 100644 (file)
@@ -1 +1 @@
-tests/qapi-schema/bad-ident.json:2: 'type' does not allow optional name '*oops'
+tests/qapi-schema/bad-ident.json:2: 'struct' does not allow optional name '*oops'
index de6168c82d6f06c6fe87e8eb6495871726707a50..62fd70baafd63ec5e37ecd445663959bcb9023df 100644 (file)
@@ -1 +1 @@
-tests/qapi-schema/bad-type-bool.json:2: 'type' key must have a string value
+tests/qapi-schema/bad-type-bool.json:2: 'struct' key must have a string value
index 82871204ed4499ac2773ac63ce09dd19c190919d..c39fa254843a49988a557e94a5c9e91debfa6b41 100644 (file)
@@ -1,5 +1,5 @@
 [OrderedDict([('enum', 'abc'), ('data', ['a', 'b', 'c'])]),
- OrderedDict([('type', 'def'), ('data', OrderedDict([('array', ['abc'])]))]),
+ OrderedDict([('struct', 'def'), ('data', OrderedDict([('array', ['abc'])]))]),
  OrderedDict([('command', 'okay'), ('data', OrderedDict([('member1', ['int']), ('member2', ['def'])]))])]
 [{'enum_name': 'abc', 'enum_values': ['a', 'b', 'c']}]
-[OrderedDict([('type', 'def'), ('data', OrderedDict([('array', ['abc'])]))])]
+[OrderedDict([('struct', 'def'), ('data', OrderedDict([('array', ['abc'])]))])]
index ceb6e46cfed15edcecd68e1e1383aa792efbc3c9..f9613c6d6b53b4c07d40b280979a846745157970 100644 (file)
@@ -1 +1 @@
-tests/qapi-schema/double-type.json:2: Unknown key 'command' in type 'bar'
+tests/qapi-schema/double-type.json:2: Unknown key 'command' in struct 'bar'
index bb0f02d298a14515df1eec12a735ef7df5bb71af..d41c80c3bdc84928c4699aeaf4c9b79d04677558 100644 (file)
@@ -1,4 +1,4 @@
-# we require the base to be an existing complex type
+# we require the base to be an existing struct
 # TODO: should we allow an anonymous inline base type?
 { 'enum': 'TestEnum',
   'data': [ 'value1', 'value2' ] }
index 60e47efab58df62039e2925f889b3599fdb2610e..b7748f08bfdff0c170c1282107034c8f541dfa7c 100644 (file)
@@ -1 +1 @@
-tests/qapi-schema/flat-union-base-star.json:8: Base '**' is not a valid type
+tests/qapi-schema/flat-union-base-star.json:8: Base '**' is not a valid struct
index 994533a514e50cb11d283ec80c5006e79eb3d975..76724075b16d3f46f18b8df19e5283c85b118d57 100644 (file)
@@ -1,4 +1,4 @@
-# we require the base to be an existing complex type
+# we require the base to be an existing struct
 { 'enum': 'TestEnum',
   'data': [ 'value1', 'value2' ] }
 { 'type': 'TestTypeA',
index 185bf51a72aa2a38d7bc12ec7c7d63ce591a4cbe..ede9859a398e2b1e3fb2c227f053ea4225d2117c 100644 (file)
@@ -1 +1 @@
-tests/qapi-schema/flat-union-base-union.json:11: Base 'UnionBase' is not a valid type
+tests/qapi-schema/flat-union-base-union.json:11: Base 'UnionBase' is not a valid struct
index 838986c48a5eb0792368cbbde6d501b21b9f6ea5..0ba6e28d3be4443143946a30aa71ae2aa9973fa9 100644 (file)
@@ -1,4 +1,4 @@
-# FIXME: the error message needs help: we require the base to be a struct
+# we require the base to be a struct
 { 'enum': 'TestEnum',
   'data': [ 'value1', 'value2' ] }
 { 'type': 'TestTypeA',
index 5d541133b9364d4c26ea02a310a2ee89622f966e..04c239565e6fcd1678e27fe7be17cd35f4d2b3aa 100644 (file)
@@ -1,9 +1,9 @@
 [OrderedDict([('enum', 'TestEnum'), ('data', ['value1', 'value2'])]),
- OrderedDict([('type', 'Base'), ('data', OrderedDict([('enum1', 'TestEnum'), ('name', 'str')]))]),
- OrderedDict([('type', 'Branch1'), ('data', OrderedDict([('name', 'str')]))]),
- OrderedDict([('type', 'Branch2'), ('data', OrderedDict([('value', 'int')]))]),
+ OrderedDict([('struct', 'Base'), ('data', OrderedDict([('enum1', 'TestEnum'), ('name', 'str')]))]),
+ OrderedDict([('struct', 'Branch1'), ('data', OrderedDict([('name', 'str')]))]),
+ OrderedDict([('struct', 'Branch2'), ('data', OrderedDict([('value', 'int')]))]),
  OrderedDict([('union', 'TestUnion'), ('base', 'Base'), ('discriminator', 'enum1'), ('data', OrderedDict([('value1', 'Branch1'), ('value2', 'Branch2')]))])]
 [{'enum_name': 'TestEnum', 'enum_values': ['value1', 'value2']}]
-[OrderedDict([('type', 'Base'), ('data', OrderedDict([('enum1', 'TestEnum'), ('name', 'str')]))]),
- OrderedDict([('type', 'Branch1'), ('data', OrderedDict([('name', 'str')]))]),
- OrderedDict([('type', 'Branch2'), ('data', OrderedDict([('value', 'int')]))])]
+[OrderedDict([('struct', 'Base'), ('data', OrderedDict([('enum1', 'TestEnum'), ('name', 'str')]))]),
+ OrderedDict([('struct', 'Branch1'), ('data', OrderedDict([('name', 'str')]))]),
+ OrderedDict([('struct', 'Branch2'), ('data', OrderedDict([('value', 'int')]))])]
index f3da1175f885e9f38dd9742d6119d323a3b9bcaf..65c15d0a1e53b5911aa28c63c378b7a3c29321b9 100644 (file)
@@ -1,4 +1,4 @@
-# we require branches to be a complex type name
+# we require branches to be a struct name
 # TODO: should we allow anonymous inline types?
 { 'enum': 'TestEnum',
   'data': [ 'value1', 'value2' ] }
index d373131653dfa2372eda9dd9fe935a137da4e800..ee93cf803abf67be0fb458a0961e95a02c645240 100644 (file)
@@ -1,4 +1,4 @@
-# we require flat union branches to be a complex type
+# we require flat union branches to be a struct
 { 'enum': 'TestEnum',
   'data': [ 'value1', 'value2' ] }
 { 'type': 'Base',
index 790b6759b8348fd6d06d00696a43845ed7d6bb96..5f4055614eab17214adf2e8da4b543bac3083bd9 100644 (file)
@@ -1 +1 @@
-tests/qapi-schema/flat-union-invalid-discriminator.json:13: Discriminator 'enum_wrong' is not a member of base type 'TestBase'
+tests/qapi-schema/flat-union-invalid-discriminator.json:13: Discriminator 'enum_wrong' is not a member of base struct 'TestBase'
index 03c952e28a8c6aa6d858310ef053a9f3eacbbc60..1ed7b8a51900758e85703132a91ce100f8b1981c 100644 (file)
@@ -1,9 +1,9 @@
 [OrderedDict([('union', 'TestUnion'), ('base', 'TestBase'), ('discriminator', 'enum1'), ('data', OrderedDict([('value1', 'TestTypeA'), ('value2', 'TestTypeB')]))]),
- OrderedDict([('type', 'TestBase'), ('data', OrderedDict([('enum1', 'TestEnum')]))]),
+ OrderedDict([('struct', 'TestBase'), ('data', OrderedDict([('enum1', 'TestEnum')]))]),
  OrderedDict([('enum', 'TestEnum'), ('data', ['value1', 'value2'])]),
- OrderedDict([('type', 'TestTypeA'), ('data', OrderedDict([('string', 'str')]))]),
- OrderedDict([('type', 'TestTypeB'), ('data', OrderedDict([('integer', 'int')]))])]
+ OrderedDict([('struct', 'TestTypeA'), ('data', OrderedDict([('string', 'str')]))]),
+ OrderedDict([('struct', 'TestTypeB'), ('data', OrderedDict([('integer', 'int')]))])]
 [{'enum_name': 'TestEnum', 'enum_values': ['value1', 'value2']}]
-[OrderedDict([('type', 'TestBase'), ('data', OrderedDict([('enum1', 'TestEnum')]))]),
- OrderedDict([('type', 'TestTypeA'), ('data', OrderedDict([('string', 'str')]))]),
- OrderedDict([('type', 'TestTypeB'), ('data', OrderedDict([('integer', 'int')]))])]
+[OrderedDict([('struct', 'TestBase'), ('data', OrderedDict([('enum1', 'TestEnum')]))]),
+ OrderedDict([('struct', 'TestTypeA'), ('data', OrderedDict([('string', 'str')]))]),
+ OrderedDict([('struct', 'TestTypeB'), ('data', OrderedDict([('integer', 'int')]))])]
index 313ecf3ad38829a0544b9d8156611be4ec2a20c1..83ab1a51390c42e2e935574ec39b66c75c9585e2 100644 (file)
@@ -1,13 +1,13 @@
 [OrderedDict([('enum', 'EnumOne'), ('data', ['value1', 'value2', 'value3'])]),
- OrderedDict([('type', 'NestedEnumsOne'), ('data', OrderedDict([('enum1', 'EnumOne'), ('*enum2', 'EnumOne'), ('enum3', 'EnumOne'), ('*enum4', 'EnumOne')]))]),
- OrderedDict([('type', 'UserDefZero'), ('data', OrderedDict([('integer', 'int')]))]),
- OrderedDict([('type', 'UserDefOne'), ('base', 'UserDefZero'), ('data', OrderedDict([('string', 'str'), ('*enum1', 'EnumOne')]))]),
- OrderedDict([('type', 'UserDefTwo'), ('data', OrderedDict([('string', 'str'), ('dict', OrderedDict([('string', 'str'), ('dict', OrderedDict([('userdef', 'UserDefOne'), ('string', 'str')])), ('*dict2', OrderedDict([('userdef', 'UserDefOne'), ('string', 'str')]))]))]))]),
- OrderedDict([('type', 'UserDefNested'), ('data', OrderedDict([('string0', 'str'), ('dict1', OrderedDict([('string1', 'str'), ('dict2', OrderedDict([('userdef1', 'UserDefOne'), ('string2', 'str')])), ('*dict3', OrderedDict([('userdef2', 'UserDefOne'), ('string3', 'str')]))]))]))]),
- OrderedDict([('type', 'UserDefA'), ('data', OrderedDict([('boolean', 'bool')]))]),
- OrderedDict([('type', 'UserDefB'), ('data', OrderedDict([('integer', 'int')]))]),
- OrderedDict([('type', 'UserDefC'), ('data', OrderedDict([('string1', 'str'), ('string2', 'str')]))]),
- OrderedDict([('type', 'UserDefUnionBase'), ('data', OrderedDict([('string', 'str'), ('enum1', 'EnumOne')]))]),
+ OrderedDict([('struct', 'NestedEnumsOne'), ('data', OrderedDict([('enum1', 'EnumOne'), ('*enum2', 'EnumOne'), ('enum3', 'EnumOne'), ('*enum4', 'EnumOne')]))]),
+ OrderedDict([('struct', 'UserDefZero'), ('data', OrderedDict([('integer', 'int')]))]),
+ OrderedDict([('struct', 'UserDefOne'), ('base', 'UserDefZero'), ('data', OrderedDict([('string', 'str'), ('*enum1', 'EnumOne')]))]),
+ OrderedDict([('struct', 'UserDefTwo'), ('data', OrderedDict([('string', 'str'), ('dict', OrderedDict([('string', 'str'), ('dict', OrderedDict([('userdef', 'UserDefOne'), ('string', 'str')])), ('*dict2', OrderedDict([('userdef', 'UserDefOne'), ('string', 'str')]))]))]))]),
+ OrderedDict([('struct', 'UserDefNested'), ('data', OrderedDict([('string0', 'str'), ('dict1', OrderedDict([('string1', 'str'), ('dict2', OrderedDict([('userdef1', 'UserDefOne'), ('string2', 'str')])), ('*dict3', OrderedDict([('userdef2', 'UserDefOne'), ('string3', 'str')]))]))]))]),
+ OrderedDict([('struct', 'UserDefA'), ('data', OrderedDict([('boolean', 'bool')]))]),
+ OrderedDict([('struct', 'UserDefB'), ('data', OrderedDict([('integer', 'int')]))]),
+ OrderedDict([('struct', 'UserDefC'), ('data', OrderedDict([('string1', 'str'), ('string2', 'str')]))]),
+ OrderedDict([('struct', 'UserDefUnionBase'), ('data', OrderedDict([('string', 'str'), ('enum1', 'EnumOne')]))]),
  OrderedDict([('union', 'UserDefFlatUnion'), ('base', 'UserDefUnionBase'), ('discriminator', 'enum1'), ('data', OrderedDict([('value1', 'UserDefA'), ('value2', 'UserDefB'), ('value3', 'UserDefB')]))]),
  OrderedDict([('union', 'UserDefFlatUnion2'), ('base', 'UserDefUnionBase'), ('discriminator', 'enum1'), ('data', OrderedDict([('value1', 'UserDefC'), ('value2', 'UserDefB'), ('value3', 'UserDefA')]))]),
  OrderedDict([('alternate', 'UserDefAlternate'), ('data', OrderedDict([('uda', 'UserDefA'), ('s', 'str'), ('i', 'int')]))]),
@@ -16,8 +16,8 @@
  OrderedDict([('command', 'user_def_cmd1'), ('data', OrderedDict([('ud1a', 'UserDefOne')]))]),
  OrderedDict([('command', 'user_def_cmd2'), ('data', OrderedDict([('ud1a', 'UserDefOne'), ('*ud1b', 'UserDefOne')])), ('returns', 'UserDefTwo')]),
  OrderedDict([('command', 'user_def_cmd3'), ('data', OrderedDict([('a', 'int'), ('*b', 'int')])), ('returns', 'int')]),
- OrderedDict([('type', 'UserDefOptions'), ('data', OrderedDict([('*i64', ['int']), ('*u64', ['uint64']), ('*u16', ['uint16']), ('*i64x', 'int'), ('*u64x', 'uint64')]))]),
- OrderedDict([('type', 'EventStructOne'), ('data', OrderedDict([('struct1', 'UserDefOne'), ('string', 'str'), ('*enum2', 'EnumOne')]))]),
+ OrderedDict([('struct', 'UserDefOptions'), ('data', OrderedDict([('*i64', ['int']), ('*u64', ['uint64']), ('*u16', ['uint16']), ('*i64x', 'int'), ('*u64x', 'uint64')]))]),
+ OrderedDict([('struct', 'EventStructOne'), ('data', OrderedDict([('struct1', 'UserDefOne'), ('string', 'str'), ('*enum2', 'EnumOne')]))]),
  OrderedDict([('event', 'EVENT_A')]),
  OrderedDict([('event', 'EVENT_B'), ('data', OrderedDict())]),
  OrderedDict([('event', 'EVENT_C'), ('data', OrderedDict([('*a', 'int'), ('*b', 'UserDefOne'), ('c', 'str')]))]),
 [{'enum_name': 'EnumOne', 'enum_values': ['value1', 'value2', 'value3']},
  {'enum_name': 'UserDefAlternateKind', 'enum_values': None},
  {'enum_name': 'UserDefNativeListUnionKind', 'enum_values': None}]
-[OrderedDict([('type', 'NestedEnumsOne'), ('data', OrderedDict([('enum1', 'EnumOne'), ('*enum2', 'EnumOne'), ('enum3', 'EnumOne'), ('*enum4', 'EnumOne')]))]),
- OrderedDict([('type', 'UserDefZero'), ('data', OrderedDict([('integer', 'int')]))]),
- OrderedDict([('type', 'UserDefOne'), ('base', 'UserDefZero'), ('data', OrderedDict([('string', 'str'), ('*enum1', 'EnumOne')]))]),
- OrderedDict([('type', 'UserDefTwo'), ('data', OrderedDict([('string', 'str'), ('dict', OrderedDict([('string', 'str'), ('dict', OrderedDict([('userdef', 'UserDefOne'), ('string', 'str')])), ('*dict2', OrderedDict([('userdef', 'UserDefOne'), ('string', 'str')]))]))]))]),
- OrderedDict([('type', 'UserDefNested'), ('data', OrderedDict([('string0', 'str'), ('dict1', OrderedDict([('string1', 'str'), ('dict2', OrderedDict([('userdef1', 'UserDefOne'), ('string2', 'str')])), ('*dict3', OrderedDict([('userdef2', 'UserDefOne'), ('string3', 'str')]))]))]))]),
- OrderedDict([('type', 'UserDefA'), ('data', OrderedDict([('boolean', 'bool')]))]),
- OrderedDict([('type', 'UserDefB'), ('data', OrderedDict([('integer', 'int')]))]),
- OrderedDict([('type', 'UserDefC'), ('data', OrderedDict([('string1', 'str'), ('string2', 'str')]))]),
- OrderedDict([('type', 'UserDefUnionBase'), ('data', OrderedDict([('string', 'str'), ('enum1', 'EnumOne')]))]),
- OrderedDict([('type', 'UserDefOptions'), ('data', OrderedDict([('*i64', ['int']), ('*u64', ['uint64']), ('*u16', ['uint16']), ('*i64x', 'int'), ('*u64x', 'uint64')]))]),
- OrderedDict([('type', 'EventStructOne'), ('data', OrderedDict([('struct1', 'UserDefOne'), ('string', 'str'), ('*enum2', 'EnumOne')]))])]
+[OrderedDict([('struct', 'NestedEnumsOne'), ('data', OrderedDict([('enum1', 'EnumOne'), ('*enum2', 'EnumOne'), ('enum3', 'EnumOne'), ('*enum4', 'EnumOne')]))]),
+ OrderedDict([('struct', 'UserDefZero'), ('data', OrderedDict([('integer', 'int')]))]),
+ OrderedDict([('struct', 'UserDefOne'), ('base', 'UserDefZero'), ('data', OrderedDict([('string', 'str'), ('*enum1', 'EnumOne')]))]),
+ OrderedDict([('struct', 'UserDefTwo'), ('data', OrderedDict([('string', 'str'), ('dict', OrderedDict([('string', 'str'), ('dict', OrderedDict([('userdef', 'UserDefOne'), ('string', 'str')])), ('*dict2', OrderedDict([('userdef', 'UserDefOne'), ('string', 'str')]))]))]))]),
+ OrderedDict([('struct', 'UserDefNested'), ('data', OrderedDict([('string0', 'str'), ('dict1', OrderedDict([('string1', 'str'), ('dict2', OrderedDict([('userdef1', 'UserDefOne'), ('string2', 'str')])), ('*dict3', OrderedDict([('userdef2', 'UserDefOne'), ('string3', 'str')]))]))]))]),
+ OrderedDict([('struct', 'UserDefA'), ('data', OrderedDict([('boolean', 'bool')]))]),
+ OrderedDict([('struct', 'UserDefB'), ('data', OrderedDict([('integer', 'int')]))]),
+ OrderedDict([('struct', 'UserDefC'), ('data', OrderedDict([('string1', 'str'), ('string2', 'str')]))]),
+ OrderedDict([('struct', 'UserDefUnionBase'), ('data', OrderedDict([('string', 'str'), ('enum1', 'EnumOne')]))]),
+ OrderedDict([('struct', 'UserDefOptions'), ('data', OrderedDict([('*i64', ['int']), ('*u64', ['uint64']), ('*u16', ['uint16']), ('*i64x', 'int'), ('*u64x', 'uint64')]))]),
+ OrderedDict([('struct', 'EventStructOne'), ('data', OrderedDict([('struct1', 'UserDefOne'), ('string', 'str'), ('*enum2', 'EnumOne')]))])]
index 3cc82c0701cffb68d4023680d3f100aed2bcd5eb..9f637963e8f43c8124ce4569bf13be4ff2d88794 100644 (file)
@@ -1 +1 @@
-tests/qapi-schema/union-invalid-base.json:8: Base 'int' is not a valid type
+tests/qapi-schema/union-invalid-base.json:8: Base 'int' is not a valid struct
index 0a35bfdbd62e4843dec8e03dc39cb28d98cf7d38..12f5ed5b435bab9a6aaf487b9a8a9ca3a5e73408 100644 (file)
@@ -1 +1 @@
-tests/qapi-schema/unknown-expr-key.json:2: Unknown key 'bogus' in type 'bar'
+tests/qapi-schema/unknown-expr-key.json:2: Unknown key 'bogus' in struct 'bar'