Message ID | 20180321115211.17937-18-marcandre.lureau@redhat.com |
---|---|
State | New |
Headers | show |
Series | qapi: add #if pre-processor conditions to generated code | expand |
Marc-André Lureau <marcandre.lureau@redhat.com> writes: > This will allow to add and access more properties associated with enum > values/members, like the associated 'if' condition. We may want to > have a specialized type QAPISchemaEnumMember, for now this will do. > > Suggested-by: Markus Armbruster <armbru@redhat.com> > Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> > --- > scripts/qapi/common.py | 12 ++++++------ > scripts/qapi/events.py | 2 +- > scripts/qapi/introspect.py | 3 ++- > tests/qapi-schema/test-qapi.py | 2 +- > 4 files changed, 10 insertions(+), 9 deletions(-) > > diff --git a/scripts/qapi/common.py b/scripts/qapi/common.py > index ea5cdfe3be..4d19146064 100644 > --- a/scripts/qapi/common.py > +++ b/scripts/qapi/common.py > @@ -1198,7 +1198,7 @@ class QAPISchemaEnumType(QAPISchemaType): > > def visit(self, visitor): > visitor.visit_enum_type(self.name, self.info, self.ifcond, > - self.member_names(), self.prefix) > + self.members, self.prefix) > > > class QAPISchemaArrayType(QAPISchemaType): > @@ -2007,11 +2007,11 @@ const QEnumLookup %(c_name)s_lookup = { > ''', > c_name=c_name(name)) > for m in members: > - index = c_enum_const(name, m, prefix) > + index = c_enum_const(name, m.name, prefix) > ret += mcgen(''' > - [%(index)s] = "%(value)s", > + [%(index)s] = "%(name)s", > ''', > - index=index, value=m) > + index=index, name=m.name) > > ret += mcgen(''' > }, > @@ -2024,7 +2024,7 @@ const QEnumLookup %(c_name)s_lookup = { > > def gen_enum(name, members, prefix=None): > # append automatically generated _MAX value > - enum_members = members + ['_MAX'] > + enum_members = members + [QAPISchemaMember('_MAX')] > > ret = mcgen(''' > This hunk gave me pause... > @@ -2036,7 +2036,7 @@ typedef enum %(c_name)s { > ret += mcgen(''' > %(c_enum)s, > ''', > - c_enum=c_enum_const(name, m, prefix)) > + c_enum=c_enum_const(name, m.name, prefix)) > > ret += mcgen(''' > } %(c_name)s; > diff --git a/scripts/qapi/events.py b/scripts/qapi/events.py > index dae03e3d88..233c27a6c8 100644 > --- a/scripts/qapi/events.py > +++ b/scripts/qapi/events.py > @@ -188,7 +188,7 @@ class QAPISchemaGenEventVisitor(QAPISchemaModularCVisitor): > with ifcontext(ifcond, self._genh, self._genc): > self._genh.add(gen_event_send_decl(name, arg_type, boxed)) > self._genc.add(gen_event_send(name, arg_type, boxed, self._enum_name)) > - self._event_names.append(name) > + self._event_names.append(QAPISchemaMember(name)) > > ... and this one as well, until I realized that you're *also* changing gen_enum_lookup() and gen_enum(). And then I realized that I missed something about the previous patch. Going to explain it there. Anyway, let's mention the change to gen_enum_lookup() and gen_enum() in the commit message. > def gen_events(schema, output_dir, prefix): > diff --git a/scripts/qapi/introspect.py b/scripts/qapi/introspect.py > index 66f7fd00a9..d62fca84de 100644 > --- a/scripts/qapi/introspect.py > +++ b/scripts/qapi/introspect.py > @@ -164,7 +164,8 @@ const QLitObject %(c_name)s = %(c_string)s; > self._gen_qlit(name, 'builtin', {'json-type': json_type}, []) > > def visit_enum_type(self, name, info, ifcond, members, prefix): > - self._gen_qlit(name, 'enum', {'values': members}, ifcond) > + self._gen_qlit(name, 'enum', > + {'values': [m.name for m in members]}, ifcond) > > def visit_array_type(self, name, info, ifcond, element_type): > element = self._use_type(element_type) > diff --git a/tests/qapi-schema/test-qapi.py b/tests/qapi-schema/test-qapi.py > index f4b8feb9bc..3623deae62 100644 > --- a/tests/qapi-schema/test-qapi.py > +++ b/tests/qapi-schema/test-qapi.py > @@ -24,7 +24,7 @@ class QAPISchemaTestVisitor(QAPISchemaVisitor): > print('include %s' % name) > > def visit_enum_type(self, name, info, ifcond, members, prefix): > - print('enum %s %s' % (name, members)) > + print('enum %s %s' % (name, [m.name for m in members])) > if prefix: > print(' prefix %s' % prefix) > self._print_if(ifcond)
diff --git a/scripts/qapi/common.py b/scripts/qapi/common.py index ea5cdfe3be..4d19146064 100644 --- a/scripts/qapi/common.py +++ b/scripts/qapi/common.py @@ -1198,7 +1198,7 @@ class QAPISchemaEnumType(QAPISchemaType): def visit(self, visitor): visitor.visit_enum_type(self.name, self.info, self.ifcond, - self.member_names(), self.prefix) + self.members, self.prefix) class QAPISchemaArrayType(QAPISchemaType): @@ -2007,11 +2007,11 @@ const QEnumLookup %(c_name)s_lookup = { ''', c_name=c_name(name)) for m in members: - index = c_enum_const(name, m, prefix) + index = c_enum_const(name, m.name, prefix) ret += mcgen(''' - [%(index)s] = "%(value)s", + [%(index)s] = "%(name)s", ''', - index=index, value=m) + index=index, name=m.name) ret += mcgen(''' }, @@ -2024,7 +2024,7 @@ const QEnumLookup %(c_name)s_lookup = { def gen_enum(name, members, prefix=None): # append automatically generated _MAX value - enum_members = members + ['_MAX'] + enum_members = members + [QAPISchemaMember('_MAX')] ret = mcgen(''' @@ -2036,7 +2036,7 @@ typedef enum %(c_name)s { ret += mcgen(''' %(c_enum)s, ''', - c_enum=c_enum_const(name, m, prefix)) + c_enum=c_enum_const(name, m.name, prefix)) ret += mcgen(''' } %(c_name)s; diff --git a/scripts/qapi/events.py b/scripts/qapi/events.py index dae03e3d88..233c27a6c8 100644 --- a/scripts/qapi/events.py +++ b/scripts/qapi/events.py @@ -188,7 +188,7 @@ class QAPISchemaGenEventVisitor(QAPISchemaModularCVisitor): with ifcontext(ifcond, self._genh, self._genc): self._genh.add(gen_event_send_decl(name, arg_type, boxed)) self._genc.add(gen_event_send(name, arg_type, boxed, self._enum_name)) - self._event_names.append(name) + self._event_names.append(QAPISchemaMember(name)) def gen_events(schema, output_dir, prefix): diff --git a/scripts/qapi/introspect.py b/scripts/qapi/introspect.py index 66f7fd00a9..d62fca84de 100644 --- a/scripts/qapi/introspect.py +++ b/scripts/qapi/introspect.py @@ -164,7 +164,8 @@ const QLitObject %(c_name)s = %(c_string)s; self._gen_qlit(name, 'builtin', {'json-type': json_type}, []) def visit_enum_type(self, name, info, ifcond, members, prefix): - self._gen_qlit(name, 'enum', {'values': members}, ifcond) + self._gen_qlit(name, 'enum', + {'values': [m.name for m in members]}, ifcond) def visit_array_type(self, name, info, ifcond, element_type): element = self._use_type(element_type) diff --git a/tests/qapi-schema/test-qapi.py b/tests/qapi-schema/test-qapi.py index f4b8feb9bc..3623deae62 100644 --- a/tests/qapi-schema/test-qapi.py +++ b/tests/qapi-schema/test-qapi.py @@ -24,7 +24,7 @@ class QAPISchemaTestVisitor(QAPISchemaVisitor): print('include %s' % name) def visit_enum_type(self, name, info, ifcond, members, prefix): - print('enum %s %s' % (name, members)) + print('enum %s %s' % (name, [m.name for m in members])) if prefix: print(' prefix %s' % prefix) self._print_if(ifcond)
This will allow to add and access more properties associated with enum values/members, like the associated 'if' condition. We may want to have a specialized type QAPISchemaEnumMember, for now this will do. Suggested-by: Markus Armbruster <armbru@redhat.com> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> --- scripts/qapi/common.py | 12 ++++++------ scripts/qapi/events.py | 2 +- scripts/qapi/introspect.py | 3 ++- tests/qapi-schema/test-qapi.py | 2 +- 4 files changed, 10 insertions(+), 9 deletions(-)