[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v7 01/15] qapi: Consolidate object visitors
From: |
Eric Blake |
Subject: |
[Qemu-devel] [PATCH v7 01/15] qapi: Consolidate object visitors |
Date: |
Fri, 20 May 2016 16:40:10 -0600 |
Rather than having two separate visitor callbacks with items
already broken out, pass the actual QAPISchemaObjectType object
to the visitor. This lets the visitor access things like
type.is_implicit() without needing another parameter, resolving
a TODO from previous patches.
For convenience and consistency, the 'name' and 'info' parameters
are still provided, even though they are now redundant with
'typ.name' and 'typ.info'.
Signed-off-by: Eric Blake <address@hidden>
---
v7: no changes
[posted earlier as part of "cleanup subset E"]
v14: fix testsuite failures
[posted earlier as part of "easier unboxed visits/qapi implicit types"]
v6: new patch
---
scripts/qapi.py | 10 ++--------
scripts/qapi-introspect.py | 10 +++++-----
scripts/qapi-types.py | 13 ++++++-------
scripts/qapi-visit.py | 12 ++++++------
tests/qapi-schema/test-qapi.py | 10 +++++-----
5 files changed, 24 insertions(+), 31 deletions(-)
diff --git a/scripts/qapi.py b/scripts/qapi.py
index b13ae47..4dde43a 100644
--- a/scripts/qapi.py
+++ b/scripts/qapi.py
@@ -808,10 +808,7 @@ class QAPISchemaVisitor(object):
def visit_array_type(self, name, info, element_type):
pass
- def visit_object_type(self, name, info, base, members, variants):
- pass
-
- def visit_object_type_flat(self, name, info, members, variants):
+ def visit_object_type(self, name, info, typ):
pass
def visit_alternate_type(self, name, info, variants):
@@ -1005,10 +1002,7 @@ class QAPISchemaObjectType(QAPISchemaType):
return 'object'
def visit(self, visitor):
- visitor.visit_object_type(self.name, self.info,
- self.base, self.local_members, self.variants)
- visitor.visit_object_type_flat(self.name, self.info,
- self.members, self.variants)
+ visitor.visit_object_type(self.name, self.info, self)
class QAPISchemaMember(object):
diff --git a/scripts/qapi-introspect.py b/scripts/qapi-introspect.py
index e0f926b..474eafd 100644
--- a/scripts/qapi-introspect.py
+++ b/scripts/qapi-introspect.py
@@ -141,11 +141,11 @@ const char %(c_name)s[] = %(c_string)s;
element = self._use_type(element_type)
self._gen_json('[' + element + ']', 'array', {'element-type': element})
- def visit_object_type_flat(self, name, info, members, variants):
- obj = {'members': [self._gen_member(m) for m in members]}
- if variants:
- obj.update(self._gen_variants(variants.tag_member.name,
- variants.variants))
+ def visit_object_type(self, name, info, typ):
+ obj = {'members': [self._gen_member(m) for m in typ.members]}
+ if typ.variants:
+ obj.update(self._gen_variants(typ.variants.tag_member.name,
+ typ.variants.variants))
self._gen_json(name, 'object', obj)
def visit_alternate_type(self, name, info, variants):
diff --git a/scripts/qapi-types.py b/scripts/qapi-types.py
index 5ace2cf..b3038e5 100644
--- a/scripts/qapi-types.py
+++ b/scripts/qapi-types.py
@@ -218,17 +218,16 @@ class QAPISchemaGenTypeVisitor(QAPISchemaVisitor):
self.decl += gen_array(name, element_type)
self._gen_type_cleanup(name)
- def visit_object_type(self, name, info, base, members, variants):
+ def visit_object_type(self, name, info, typ):
# Nothing to do for the special empty builtin
if name == 'q_empty':
return
self._fwdecl += gen_fwd_object_or_array(name)
- self.decl += gen_object(name, base, members, variants)
- if base and not base.is_implicit():
- self.decl += gen_upcast(name, base)
- # TODO Worth changing the visitor signature, so we could
- # directly use rather than repeat type.is_implicit()?
- if not name.startswith('q_'):
+ self.decl += gen_object(name, typ.base, typ.local_members,
+ typ.variants)
+ if typ.base and not typ.base.is_implicit():
+ self.decl += gen_upcast(name, typ.base)
+ if not typ.is_implicit():
# implicit types won't be directly allocated/freed
self._gen_type_cleanup(name)
diff --git a/scripts/qapi-visit.py b/scripts/qapi-visit.py
index 7b85d2b..07ae6d1 100644
--- a/scripts/qapi-visit.py
+++ b/scripts/qapi-visit.py
@@ -298,18 +298,18 @@ class QAPISchemaGenVisitVisitor(QAPISchemaVisitor):
self.decl += decl
self.defn += defn
- def visit_object_type(self, name, info, base, members, variants):
+ def visit_object_type(self, name, info, typ):
# Nothing to do for the special empty builtin
if name == 'q_empty':
return
self.decl += gen_visit_members_decl(name)
- self.defn += gen_visit_object_members(name, base, members, variants)
- # TODO Worth changing the visitor signature, so we could
- # directly use rather than repeat type.is_implicit()?
- if not name.startswith('q_'):
+ self.defn += gen_visit_object_members(name, typ.base,
+ typ.local_members, typ.variants)
+ if not typ.is_implicit():
# only explicit types need an allocating visit
self.decl += gen_visit_decl(name)
- self.defn += gen_visit_object(name, base, members, variants)
+ self.defn += gen_visit_object(name, typ.base, typ.local_members,
+ typ.variants)
def visit_alternate_type(self, name, info, variants):
self.decl += gen_visit_decl(name)
diff --git a/tests/qapi-schema/test-qapi.py b/tests/qapi-schema/test-qapi.py
index 649677e..ccd1704 100644
--- a/tests/qapi-schema/test-qapi.py
+++ b/tests/qapi-schema/test-qapi.py
@@ -22,14 +22,14 @@ class QAPISchemaTestVisitor(QAPISchemaVisitor):
if prefix:
print ' prefix %s' % prefix
- def visit_object_type(self, name, info, base, members, variants):
+ def visit_object_type(self, name, info, typ):
print 'object %s' % name
- if base:
- print ' base %s' % base.name
- for m in members:
+ if typ.base:
+ print ' base %s' % typ.base.name
+ for m in typ.local_members:
print ' member %s: %s optional=%s' % \
(m.name, m.type.name, m.optional)
- self._print_variants(variants)
+ self._print_variants(typ.variants)
def visit_alternate_type(self, name, info, variants):
print 'alternate %s' % name
--
2.5.5
- [Qemu-devel] [PATCH v7 00/15] qapi netdev_add introspection (post-introspection cleanups subset F), Eric Blake, 2016/05/20
- [Qemu-devel] [PATCH v7 01/15] qapi: Consolidate object visitors,
Eric Blake <=
- [Qemu-devel] [PATCH v7 03/15] qapi: Require all branches of flat union enum to be covered, Eric Blake, 2016/05/20
- [Qemu-devel] [PATCH v7 04/15] qapi: Hide tag_name data member of variants, Eric Blake, 2016/05/20
- [Qemu-devel] [PATCH v7 05/15] qapi: Add type.is_empty() helper, Eric Blake, 2016/05/20
- [Qemu-devel] [PATCH v7 02/15] net: use Netdev instead of NetClientOptions in client init, Eric Blake, 2016/05/20
- [Qemu-devel] [PATCH v7 06/15] qapi: Plumb in 'box' to qapi generator lower levels, Eric Blake, 2016/05/20
- [Qemu-devel] [PATCH v7 07/15] qapi: Implement boxed types for commands/events, Eric Blake, 2016/05/20
- [Qemu-devel] [PATCH v7 10/15] qapi-event: Reduce chance of collision with event data, Eric Blake, 2016/05/20
- [Qemu-devel] [PATCH v7 14/15] qapi: Allow anonymous branch types in flat union, Eric Blake, 2016/05/20
- [Qemu-devel] [PATCH v7 12/15] net: Use correct type for bool flag, Eric Blake, 2016/05/20
- [Qemu-devel] [PATCH v7 13/15] net: Complete qapi-fication of netdev_add, Eric Blake, 2016/05/20