From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:46053) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZuMUW-0005ES-E7 for qemu-devel@nongnu.org; Thu, 05 Nov 2015 10:30:22 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ZuMUS-0002d9-Bg for qemu-devel@nongnu.org; Thu, 05 Nov 2015 10:30:20 -0500 Received: from mx1.redhat.com ([209.132.183.28]:34456) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZuMUS-0002d1-3A for qemu-devel@nongnu.org; Thu, 05 Nov 2015 10:30:16 -0500 From: Markus Armbruster Date: Thu, 5 Nov 2015 16:30:02 +0100 Message-Id: <1446737402-15597-6-git-send-email-armbru@redhat.com> In-Reply-To: <1446737402-15597-1-git-send-email-armbru@redhat.com> References: <1446618049-13596-22-git-send-email-eblake@redhat.com> <1446737402-15597-1-git-send-email-armbru@redhat.com> Subject: [Qemu-devel] [PATCH RFC 5/5] Revert "qapi: allow override of default enum prefix naming" List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: mdroth@linux.vnet.ibm.com This reverts commit 351d36e454cddc67a1675740916636a7ccbf1c4b. The previous commit removed the feature's lone user. The common name mangling should do going forward. Conflicts: docs/qapi-code-gen.txt scripts/qapi-types.py scripts/qapi.py tests/Makefile tests/qapi-schema/qapi-schema-test.out Signed-off-by: Markus Armbruster --- docs/qapi-code-gen.txt | 9 -------- scripts/qapi-introspect.py | 2 +- scripts/qapi-types.py | 6 +++--- scripts/qapi-visit.py | 2 +- scripts/qapi.py | 37 ++++++++++++--------------------- tests/Makefile | 1 - tests/qapi-schema/enum-bad-prefix.err | 1 - tests/qapi-schema/enum-bad-prefix.exit | 1 - tests/qapi-schema/enum-bad-prefix.json | 2 -- tests/qapi-schema/enum-bad-prefix.out | 0 tests/qapi-schema/qapi-schema-test.json | 5 ----- tests/qapi-schema/qapi-schema-test.out | 2 -- tests/qapi-schema/test-qapi.py | 4 +--- 13 files changed, 19 insertions(+), 53 deletions(-) delete mode 100644 tests/qapi-schema/enum-bad-prefix.err delete mode 100644 tests/qapi-schema/enum-bad-prefix.exit delete mode 100644 tests/qapi-schema/enum-bad-prefix.json delete mode 100644 tests/qapi-schema/enum-bad-prefix.out diff --git a/docs/qapi-code-gen.txt b/docs/qapi-code-gen.txt index 24ab324..01b52de 100644 --- a/docs/qapi-code-gen.txt +++ b/docs/qapi-code-gen.txt @@ -245,7 +245,6 @@ both fields like this: === Enumeration types === Usage: { 'enum': STRING, 'data': ARRAY-OF-STRING } - { 'enum': STRING, '*prefix': STRING, 'data': ARRAY-OF-STRING } An enumeration type is a dictionary containing a single 'data' key whose value is a list of strings. An example enumeration is: @@ -257,14 +256,6 @@ useful. The list of strings should be lower case; if an enum name represents multiple words, use '-' between words. The string 'max' is not allowed as an enum value, and values should not be repeated. -FIXME obsolete, rewrite -The enum constants will be named by using a heuristic to turn the -type name into a set of underscore separated words. For the example -above, 'MyEnum' will turn into 'MY_ENUM' giving a constant name -of 'MY_ENUM_VALUE1' for the first value. If the default heuristic -does not result in a desirable name, the optional 'prefix' field -can be used when defining the enum. - The enumeration values are passed as strings over the Client JSON Protocol, but are encoded as C enum integral values in generated code. While the C code starts numbering at 0, it is better to use explicit diff --git a/scripts/qapi-introspect.py b/scripts/qapi-introspect.py index 64f2cd0..f693c49 100644 --- a/scripts/qapi-introspect.py +++ b/scripts/qapi-introspect.py @@ -134,7 +134,7 @@ const char %(c_name)s[] = %(c_string)s; def visit_builtin_type(self, name, info, json_type): self._gen_json(name, 'builtin', {'json-type': json_type}) - def visit_enum_type(self, name, info, values, prefix): + def visit_enum_type(self, name, info, values): self._gen_json(name, 'enum', {'values': values}) def visit_array_type(self, name, info, element_type): diff --git a/scripts/qapi-types.py b/scripts/qapi-types.py index 2f2f7df..247ea4f 100644 --- a/scripts/qapi-types.py +++ b/scripts/qapi-types.py @@ -232,9 +232,9 @@ class QAPISchemaGenTypeVisitor(QAPISchemaVisitor): self.decl += gen_type_cleanup_decl(name) self.defn += gen_type_cleanup(name) - def visit_enum_type(self, name, info, values, prefix): - self._fwdecl += gen_enum(name, values, prefix) - self._fwdefn += gen_enum_lookup(name, values, prefix) + def visit_enum_type(self, name, info, values): + self._fwdecl += gen_enum(name, values) + self._fwdefn += gen_enum_lookup(name, values) def visit_array_type(self, name, info, element_type): if isinstance(element_type, QAPISchemaBuiltinType): diff --git a/scripts/qapi-visit.py b/scripts/qapi-visit.py index 94cd113..a8b3cd7 100644 --- a/scripts/qapi-visit.py +++ b/scripts/qapi-visit.py @@ -346,7 +346,7 @@ class QAPISchemaGenVisitVisitor(QAPISchemaVisitor): return not (entity.is_implicit() and isinstance(entity, QAPISchemaObjectType)) - def visit_enum_type(self, name, info, values, prefix): + def visit_enum_type(self, name, info, values): self.decl += gen_visit_decl(name, scalar=True) self.defn += gen_visit_enum(name) diff --git a/scripts/qapi.py b/scripts/qapi.py index 8e935d7..e761e33 100644 --- a/scripts/qapi.py +++ b/scripts/qapi.py @@ -666,15 +666,11 @@ def check_alternate(expr, expr_info): def check_enum(expr, expr_info): name = expr['enum'] members = expr.get('data') - prefix = expr.get('prefix') values = {'MAX': '(automatic)'} if not isinstance(members, list): raise QAPIExprError(expr_info, "Enum '%s' requires an array for 'data'" % name) - if prefix is not None and not isinstance(prefix, str): - raise QAPIExprError(expr_info, - "Enum '%s' requires a string for 'prefix'" % name) for member in members: check_name(expr_info, "Member of enum '%s'" % name, member, enum_member=True) @@ -732,7 +728,7 @@ def check_exprs(exprs): expr = expr_elem['expr'] info = expr_elem['info'] if 'enum' in expr: - check_keys(expr_elem, 'enum', ['data'], ['prefix']) + check_keys(expr_elem, 'enum', ['data']) add_enum(expr['enum'], info, expr['data']) elif 'union' in expr: check_keys(expr_elem, 'union', ['data'], @@ -831,7 +827,7 @@ class QAPISchemaVisitor(object): def visit_builtin_type(self, name, info, json_type): pass - def visit_enum_type(self, name, info, values, prefix): + def visit_enum_type(self, name, info, values): pass def visit_array_type(self, name, info, element_type): @@ -904,13 +900,11 @@ class QAPISchemaBuiltinType(QAPISchemaType): class QAPISchemaEnumType(QAPISchemaType): - def __init__(self, name, info, values, prefix): + def __init__(self, name, info, values): QAPISchemaType.__init__(self, name, info) for v in values: assert isinstance(v, str) - assert prefix is None or isinstance(prefix, str) self.values = values - self.prefix = prefix def check(self, schema): assert len(set(self.values)) == len(self.values) @@ -923,15 +917,13 @@ class QAPISchemaEnumType(QAPISchemaType): return c_name(self.name) def c_null(self): - return c_enum_const(self.name, (self.values + ['MAX'])[0], - self.prefix) + return c_enum_const(self.name, (self.values + ['MAX'])[0]) def json_type(self): return 'string' def visit(self, visitor): - visitor.visit_enum_type(self.name, self.info, - self.values, self.prefix) + visitor.visit_enum_type(self.name, self.info, self.values) class QAPISchemaArrayType(QAPISchemaType): @@ -1209,7 +1201,7 @@ class QAPISchema(object): def _make_implicit_enum_type(self, name, info, values): name = name + 'Kind' # Use namespace reserved by add_name() - self._def_entity(QAPISchemaEnumType(name, info, values, None)) + self._def_entity(QAPISchemaEnumType(name, info, values)) return name def _make_array_type(self, element_type, info): @@ -1230,8 +1222,7 @@ class QAPISchema(object): def _def_enum_type(self, expr, info): name = expr['enum'] data = expr['data'] - prefix = expr.get('prefix') - self._def_entity(QAPISchemaEnumType(name, info, data, prefix)) + self._def_entity(QAPISchemaEnumType(name, info, data)) def _make_member(self, name, typ, info): optional = False @@ -1362,9 +1353,7 @@ class QAPISchema(object): # Code generation helpers # -def c_enum_const(type_name, const_name, prefix=None): - if prefix is not None: - type_name = prefix +def c_enum_const(type_name, const_name): return c_name(type_name + '_' + const_name) c_name_trans = string.maketrans('.-', '__') @@ -1477,20 +1466,20 @@ def guardend(name): name=guardname(name)) -def gen_enum_lookup(name, values, prefix=None): +def gen_enum_lookup(name, values): ret = mcgen(''' const char *const %(c_name)s_lookup[] = { ''', c_name=c_name(name)) for value in values: - index = c_enum_const(name, value, prefix) + index = c_enum_const(name, value) ret += mcgen(''' [%(index)s] = "%(value)s", ''', index=index, value=value) - max_index = c_enum_const(name, 'MAX', prefix) + max_index = c_enum_const(name, 'MAX') ret += mcgen(''' [%(max_index)s] = NULL, }; @@ -1499,7 +1488,7 @@ const char *const %(c_name)s_lookup[] = { return ret -def gen_enum(name, values, prefix=None): +def gen_enum(name, values): # append automatically generated _MAX value enum_values = values + ['MAX'] @@ -1514,7 +1503,7 @@ typedef enum %(c_name)s { ret += mcgen(''' %(c_enum)s = %(i)d, ''', - c_enum=c_enum_const(name, value, prefix), + c_enum=c_enum_const(name, value), i=i) i += 1 diff --git a/tests/Makefile b/tests/Makefile index 92969e8..1c8c8bf 100644 --- a/tests/Makefile +++ b/tests/Makefile @@ -259,7 +259,6 @@ qapi-schema += double-type.json qapi-schema += duplicate-key.json qapi-schema += empty.json qapi-schema += enum-bad-name.json -qapi-schema += enum-bad-prefix.json qapi-schema += enum-clash-member.json qapi-schema += enum-dict-member.json qapi-schema += enum-int-member.json diff --git a/tests/qapi-schema/enum-bad-prefix.err b/tests/qapi-schema/enum-bad-prefix.err deleted file mode 100644 index 399f5f7..0000000 --- a/tests/qapi-schema/enum-bad-prefix.err +++ /dev/null @@ -1 +0,0 @@ -tests/qapi-schema/enum-bad-prefix.json:2: Enum 'MyEnum' requires a string for 'prefix' diff --git a/tests/qapi-schema/enum-bad-prefix.exit b/tests/qapi-schema/enum-bad-prefix.exit deleted file mode 100644 index d00491f..0000000 --- a/tests/qapi-schema/enum-bad-prefix.exit +++ /dev/null @@ -1 +0,0 @@ -1 diff --git a/tests/qapi-schema/enum-bad-prefix.json b/tests/qapi-schema/enum-bad-prefix.json deleted file mode 100644 index 996f628..0000000 --- a/tests/qapi-schema/enum-bad-prefix.json +++ /dev/null @@ -1,2 +0,0 @@ -# The prefix must be a string type -{ 'enum': 'MyEnum', 'data': [ 'one' ], 'prefix': [ 'fish' ] } diff --git a/tests/qapi-schema/enum-bad-prefix.out b/tests/qapi-schema/enum-bad-prefix.out deleted file mode 100644 index e69de29..0000000 diff --git a/tests/qapi-schema/qapi-schema-test.json b/tests/qapi-schema/qapi-schema-test.json index 44638da..3b53b6a 100644 --- a/tests/qapi-schema/qapi-schema-test.json +++ b/tests/qapi-schema/qapi-schema-test.json @@ -18,11 +18,6 @@ { 'struct': 'Empty1', 'data': { } } { 'struct': 'Empty2', 'base': 'Empty1', 'data': { } } -# for testing override of default naming heuristic -{ 'enum': 'QEnumTwo', - 'prefix': 'QENUM_TWO', - 'data': [ 'value1', 'value2' ] } - # for testing nested structs { 'struct': 'UserDefOne', 'base': 'UserDefZero', # intentional forward reference diff --git a/tests/qapi-schema/qapi-schema-test.out b/tests/qapi-schema/qapi-schema-test.out index 786024e..41e87dd 100644 --- a/tests/qapi-schema/qapi-schema-test.out +++ b/tests/qapi-schema/qapi-schema-test.out @@ -99,8 +99,6 @@ object NestedEnumsOne member enum2: EnumOne optional=True member enum3: EnumOne optional=False member enum4: EnumOne optional=True -enum QEnumTwo ['value1', 'value2'] - prefix QENUM_TWO object TestStruct member integer: int optional=False member boolean: bool optional=False diff --git a/tests/qapi-schema/test-qapi.py b/tests/qapi-schema/test-qapi.py index 649677e..4602da7 100644 --- a/tests/qapi-schema/test-qapi.py +++ b/tests/qapi-schema/test-qapi.py @@ -17,10 +17,8 @@ import sys class QAPISchemaTestVisitor(QAPISchemaVisitor): - def visit_enum_type(self, name, info, values, prefix): + def visit_enum_type(self, name, info, values): print 'enum %s %s' % (name, values) - if prefix: - print ' prefix %s' % prefix def visit_object_type(self, name, info, base, members, variants): print 'object %s' % name -- 2.4.3