[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 12/20] qapi: Reuse code for flat union base validatio
From: |
Markus Armbruster |
Subject: |
[Qemu-devel] [PULL 12/20] qapi: Reuse code for flat union base validation |
Date: |
Fri, 9 Oct 2015 17:14:13 +0200 |
From: Eric Blake <address@hidden>
Rather than open-code the check for a valid base type, we
should reuse the common functionality. This allows for
consistent error messages, and also makes it easier for a
later patch to turn on support for inline anonymous base
structures.
Test flat-union-inline is updated to test only one feature
(anonymous branch dictionaries), which can be implemented
independently (test flat-union-bad-base already covers the
idea of an anonymous base dictionary).
Signed-off-by: Eric Blake <address@hidden>
Message-Id: <address@hidden>
Signed-off-by: Markus Armbruster <address@hidden>
---
scripts/qapi.py | 11 +++++------
tests/qapi-schema/flat-union-bad-base.err | 2 +-
tests/qapi-schema/flat-union-base-any.err | 2 +-
tests/qapi-schema/flat-union-base-union.err | 2 +-
tests/qapi-schema/flat-union-inline.err | 2 +-
tests/qapi-schema/flat-union-inline.json | 4 ++--
tests/qapi-schema/flat-union-no-base.err | 2 +-
tests/qapi-schema/union-invalid-base.err | 2 +-
8 files changed, 13 insertions(+), 14 deletions(-)
diff --git a/scripts/qapi.py b/scripts/qapi.py
index 8d2681b..c0728d7 100644
--- a/scripts/qapi.py
+++ b/scripts/qapi.py
@@ -560,15 +560,14 @@ def check_union(expr, expr_info):
# Else, it's a flat union.
else:
# The object must have a string member 'base'.
- if not isinstance(base, str):
+ check_type(expr_info, "'base' for union '%s'" % name,
+ base, allow_metas=['struct'])
+ if not base:
raise QAPIExprError(expr_info,
- "Flat union '%s' must have a string base field"
+ "Flat union '%s' must have a base"
% name)
base_fields = find_base_fields(base)
- if not base_fields:
- raise QAPIExprError(expr_info,
- "Base '%s' is not a valid struct"
- % base)
+ assert base_fields
# The value of member 'discriminator' must name a non-optional
# member of the base struct.
diff --git a/tests/qapi-schema/flat-union-bad-base.err
b/tests/qapi-schema/flat-union-bad-base.err
index f9c31b2..79b8a71 100644
--- a/tests/qapi-schema/flat-union-bad-base.err
+++ b/tests/qapi-schema/flat-union-bad-base.err
@@ -1 +1 @@
-tests/qapi-schema/flat-union-bad-base.json:9: Flat union 'TestUnion' must have
a string base field
+tests/qapi-schema/flat-union-bad-base.json:9: 'base' for union 'TestUnion'
should be a type name
diff --git a/tests/qapi-schema/flat-union-base-any.err
b/tests/qapi-schema/flat-union-base-any.err
index ad4d629..646f1c9 100644
--- a/tests/qapi-schema/flat-union-base-any.err
+++ b/tests/qapi-schema/flat-union-base-any.err
@@ -1 +1 @@
-tests/qapi-schema/flat-union-base-any.json:8: Base 'any' is not a valid struct
+tests/qapi-schema/flat-union-base-any.json:8: 'base' for union 'TestUnion'
cannot use built-in type 'any'
diff --git a/tests/qapi-schema/flat-union-base-union.err
b/tests/qapi-schema/flat-union-base-union.err
index 28725ed..f138395 100644
--- a/tests/qapi-schema/flat-union-base-union.err
+++ b/tests/qapi-schema/flat-union-base-union.err
@@ -1 +1 @@
-tests/qapi-schema/flat-union-base-union.json:14: Base 'UnionBase' is not a
valid struct
+tests/qapi-schema/flat-union-base-union.json:14: 'base' for union 'TestUnion'
cannot use union type 'UnionBase'
diff --git a/tests/qapi-schema/flat-union-inline.err
b/tests/qapi-schema/flat-union-inline.err
index ec58627..2333358 100644
--- a/tests/qapi-schema/flat-union-inline.err
+++ b/tests/qapi-schema/flat-union-inline.err
@@ -1 +1 @@
-tests/qapi-schema/flat-union-inline.json:7: Flat union 'TestUnion' must have a
string base field
+tests/qapi-schema/flat-union-inline.json:7: Member 'value1' of union
'TestUnion' should be a type name
diff --git a/tests/qapi-schema/flat-union-inline.json
b/tests/qapi-schema/flat-union-inline.json
index 6bfdd65..62c7cda 100644
--- a/tests/qapi-schema/flat-union-inline.json
+++ b/tests/qapi-schema/flat-union-inline.json
@@ -1,11 +1,11 @@
# we require branches to be a struct name
-# TODO: should we allow anonymous inline types?
+# TODO: should we allow anonymous inline branch types?
{ 'enum': 'TestEnum',
'data': [ 'value1', 'value2' ] }
{ 'struct': 'Base',
'data': { 'enum1': 'TestEnum', 'kind': 'str' } }
{ 'union': 'TestUnion',
- 'base': { 'enum1': 'TestEnum', 'kind': 'str' },
+ 'base': 'Base',
'discriminator': 'enum1',
'data': { 'value1': { 'string': 'str' },
'value2': { 'integer': 'int' } } }
diff --git a/tests/qapi-schema/flat-union-no-base.err
b/tests/qapi-schema/flat-union-no-base.err
index bb3f708..841c93b 100644
--- a/tests/qapi-schema/flat-union-no-base.err
+++ b/tests/qapi-schema/flat-union-no-base.err
@@ -1 +1 @@
-tests/qapi-schema/flat-union-no-base.json:9: Flat union 'TestUnion' must have
a string base field
+tests/qapi-schema/flat-union-no-base.json:9: Flat union 'TestUnion' must have
a base
diff --git a/tests/qapi-schema/union-invalid-base.err
b/tests/qapi-schema/union-invalid-base.err
index 9f63796..03d7b97 100644
--- a/tests/qapi-schema/union-invalid-base.err
+++ b/tests/qapi-schema/union-invalid-base.err
@@ -1 +1 @@
-tests/qapi-schema/union-invalid-base.json:8: Base 'int' is not a valid struct
+tests/qapi-schema/union-invalid-base.json:8: 'base' for union 'TestUnion'
cannot use built-in type 'int'
--
2.4.3
- [Qemu-devel] [PULL 00/20] QAPI patches, Markus Armbruster, 2015/10/09
- [Qemu-devel] [PULL 01/20] docs: Move files from docs/qmp/ to docs/, Markus Armbruster, 2015/10/09
- [Qemu-devel] [PULL 15/20] qapi: Consistent generated code: prefer common labels, Markus Armbruster, 2015/10/09
- [Qemu-devel] [PULL 12/20] qapi: Reuse code for flat union base validation,
Markus Armbruster <=
- [Qemu-devel] [PULL 16/20] qapi: Consistent generated code: prefer common indentation, Markus Armbruster, 2015/10/09
- [Qemu-devel] [PULL 13/20] qapi: Consistent generated code: prefer error 'err', Markus Armbruster, 2015/10/09
- [Qemu-devel] [PULL 09/20] qapi: Avoid assertion failure on union 'type' collision, Markus Armbruster, 2015/10/09
- [Qemu-devel] [PULL 14/20] qapi: Consistent generated code: prefer visitor 'v', Markus Armbruster, 2015/10/09
- [Qemu-devel] [PULL 10/20] qapi: Add tests for empty unions, Markus Armbruster, 2015/10/09
- [Qemu-devel] [PULL 08/20] qapi: Test for various name collisions, Markus Armbruster, 2015/10/09
- [Qemu-devel] [PULL 18/20] qapi: Share gen_err_check(), Markus Armbruster, 2015/10/09
- [Qemu-devel] [PULL 06/20] qapi: Invoke exception superclass initializer, Markus Armbruster, 2015/10/09
- [Qemu-devel] [PULL 05/20] qapi: Improve 'include' error message, Markus Armbruster, 2015/10/09
- [Qemu-devel] [PULL 20/20] qapi: Simplify gen_visit_fields() error handling, Markus Armbruster, 2015/10/09