From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:45568) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WL1pZ-0004ae-4x for qemu-devel@nongnu.org; Tue, 04 Mar 2014 21:45:19 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1WL1pS-0007jM-ED for qemu-devel@nongnu.org; Tue, 04 Mar 2014 21:45:12 -0500 Received: from mail-pb0-x22c.google.com ([2607:f8b0:400e:c01::22c]:51084) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WL1pS-0007hq-6k for qemu-devel@nongnu.org; Tue, 04 Mar 2014 21:45:06 -0500 Received: by mail-pb0-f44.google.com with SMTP id rp16so425007pbb.17 for ; Tue, 04 Mar 2014 18:45:05 -0800 (PST) From: Wenchao Xia Date: Tue, 4 Mar 2014 18:44:31 -0800 Message-Id: <1393987480-37579-2-git-send-email-wenchaoqemu@gmail.com> In-Reply-To: <1393987480-37579-1-git-send-email-wenchaoqemu@gmail.com> References: <1393987480-37579-1-git-send-email-wenchaoqemu@gmail.com> Subject: [Qemu-devel] [PATCH V9 01/10] qapi script: remember explicitly defined enum values List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: kwolf@redhat.com, Wenchao Xia , mdroth@linux.vnet.ibm.com, armbru@redhat.com, lcapitulino@redhat.com Later other scripts will need to check the enum values. Signed-off-by: Wenchao Xia Reviewed-by: Eric Blake --- scripts/qapi.py | 16 +++++++++++----- tests/qapi-schema/comments.out | 2 +- tests/qapi-schema/qapi-schema-test.out | 10 +++++----- 3 files changed, 17 insertions(+), 11 deletions(-) diff --git a/scripts/qapi.py b/scripts/qapi.py index f3c2a20..023930e 100644 --- a/scripts/qapi.py +++ b/scripts/qapi.py @@ -169,7 +169,7 @@ def parse_schema(fp): for expr in schema.exprs: if expr.has_key('enum'): - add_enum(expr['enum']) + add_enum(expr['enum'], expr['data']) elif expr.has_key('union'): add_union(expr) add_enum('%sKind' % expr['union']) @@ -289,13 +289,19 @@ def find_union(name): return union return None -def add_enum(name): +def add_enum(name, enum_values = None): global enum_types - enum_types.append(name) + enum_types.append({"enum_name": name, "enum_values": enum_values}) -def is_enum(name): +def find_enum(name): global enum_types - return (name in enum_types) + for enum in enum_types: + if enum['enum_name'] == name: + return enum + return None + +def is_enum(name): + return find_enum(name) != None def c_type(name): if name == 'str': diff --git a/tests/qapi-schema/comments.out b/tests/qapi-schema/comments.out index e3bd904..4ce3dcf 100644 --- a/tests/qapi-schema/comments.out +++ b/tests/qapi-schema/comments.out @@ -1,3 +1,3 @@ [OrderedDict([('enum', 'Status'), ('data', ['good', 'bad', 'ugly'])])] -['Status'] +[{'enum_name': 'Status', 'enum_values': ['good', 'bad', 'ugly']}] [] diff --git a/tests/qapi-schema/qapi-schema-test.out b/tests/qapi-schema/qapi-schema-test.out index 89b53d4..01685d4 100644 --- a/tests/qapi-schema/qapi-schema-test.out +++ b/tests/qapi-schema/qapi-schema-test.out @@ -15,11 +15,11 @@ 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')]))])] -['EnumOne', - 'UserDefUnionKind', - 'UserDefFlatUnionKind', - 'UserDefAnonUnionKind', - 'UserDefNativeListUnionKind'] +[{'enum_name': 'EnumOne', 'enum_values': ['value1', 'value2', 'value3']}, + {'enum_name': 'UserDefUnionKind', 'enum_values': None}, + {'enum_name': 'UserDefFlatUnionKind', 'enum_values': None}, + {'enum_name': 'UserDefAnonUnionKind', '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')]))]), -- 1.7.1