[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v5 02/28] qapi: Fix generation of 'size' builtin typ
From: |
Eric Blake |
Subject: |
[Qemu-devel] [PATCH v5 02/28] qapi: Fix generation of 'size' builtin type |
Date: |
Tue, 24 Mar 2015 14:03:27 -0600 |
We were missing the 'size' builtin type (which means that QAPI using
[ 'size' ] would fail to compile). Futhermore, there was some
redundancy between builtin_types[] and builtin_type_qtypes{}.
Signed-off-by: Eric Blake <address@hidden>
---
scripts/qapi-types.py | 10 +++++-----
scripts/qapi-visit.py | 6 +++---
scripts/qapi.py | 9 ++-------
tests/qapi-schema/qapi-schema-test.json | 3 ++-
tests/qapi-schema/qapi-schema-test.out | 2 +-
5 files changed, 13 insertions(+), 17 deletions(-)
diff --git a/scripts/qapi-types.py b/scripts/qapi-types.py
index db87218..e400b03 100644
--- a/scripts/qapi-types.py
+++ b/scripts/qapi-types.py
@@ -182,8 +182,8 @@ const int %(name)s_qtypes[QTYPE_MAX] = {
for key in members:
qapi_type = members[key]
- if builtin_type_qtypes.has_key(qapi_type):
- qtype = builtin_type_qtypes[qapi_type]
+ if builtin_types.has_key(qapi_type):
+ qtype = builtin_types[qapi_type]
elif find_struct(qapi_type):
qtype = "QTYPE_QDICT"
elif find_union(qapi_type):
@@ -398,7 +398,7 @@ exprs = parse_schema(input_file)
exprs = filter(lambda expr: not expr.has_key('gen'), exprs)
fdecl.write(guardstart("QAPI_TYPES_BUILTIN_STRUCT_DECL"))
-for typename in builtin_types:
+for typename in builtin_types.keys():
fdecl.write(generate_fwd_struct(typename, None, builtin_type=True))
fdecl.write(guardend("QAPI_TYPES_BUILTIN_STRUCT_DECL"))
@@ -426,7 +426,7 @@ for expr in exprs:
# to avoid header dependency hell, we always generate declarations
# for built-in types in our header files and simply guard them
fdecl.write(guardstart("QAPI_TYPES_BUILTIN_CLEANUP_DECL"))
-for typename in builtin_types:
+for typename in builtin_types.keys():
fdecl.write(generate_type_cleanup_decl(typename + "List"))
fdecl.write(guardend("QAPI_TYPES_BUILTIN_CLEANUP_DECL"))
@@ -435,7 +435,7 @@ fdecl.write(guardend("QAPI_TYPES_BUILTIN_CLEANUP_DECL"))
# over these cases
if do_builtins:
fdef.write(guardstart("QAPI_TYPES_BUILTIN_CLEANUP_DEF"))
- for typename in builtin_types:
+ for typename in builtin_types.keys():
fdef.write(generate_type_cleanup(typename + "List"))
fdef.write(guardend("QAPI_TYPES_BUILTIN_CLEANUP_DEF"))
diff --git a/scripts/qapi-visit.py b/scripts/qapi-visit.py
index 8f845a2..4416677 100644
--- a/scripts/qapi-visit.py
+++ b/scripts/qapi-visit.py
@@ -261,7 +261,7 @@ void visit_type_%(name)s(Visitor *m, %(name)s **obj, const
char *name, Error **e
disc_type = '%sKind' % (name)
for key in members:
- assert (members[key] in builtin_types
+ assert (members[key] in builtin_types.keys()
or find_struct(members[key])
or find_union(members[key])
or find_enum(members[key])), "Invalid anonymous union member"
@@ -541,7 +541,7 @@ exprs = parse_schema(input_file)
# to avoid header dependency hell, we always generate declarations
# for built-in types in our header files and simply guard them
fdecl.write(guardstart("QAPI_VISIT_BUILTIN_VISITOR_DECL"))
-for typename in builtin_types:
+for typename in builtin_types.keys():
fdecl.write(generate_declaration(typename, None, genlist=True,
builtin_type=True))
fdecl.write(guardend("QAPI_VISIT_BUILTIN_VISITOR_DECL"))
@@ -550,7 +550,7 @@ fdecl.write(guardend("QAPI_VISIT_BUILTIN_VISITOR_DECL"))
# have the functions defined, so we use -b option to provide control
# over these cases
if do_builtins:
- for typename in builtin_types:
+ for typename in builtin_types.keys():
fdef.write(generate_visit_list(typename, None))
for expr in exprs:
diff --git a/scripts/qapi.py b/scripts/qapi.py
index 77d46aa..d470347 100644
--- a/scripts/qapi.py
+++ b/scripts/qapi.py
@@ -16,13 +16,7 @@ from ordereddict import OrderedDict
import os
import sys
-builtin_types = [
- 'str', 'int', 'number', 'bool',
- 'int8', 'int16', 'int32', 'int64',
- 'uint8', 'uint16', 'uint32', 'uint64'
-]
-
-builtin_type_qtypes = {
+builtin_types = {
'str': 'QTYPE_QSTRING',
'int': 'QTYPE_QINT',
'number': 'QTYPE_QFLOAT',
@@ -35,6 +29,7 @@ builtin_type_qtypes = {
'uint16': 'QTYPE_QINT',
'uint32': 'QTYPE_QINT',
'uint64': 'QTYPE_QINT',
+ 'size': 'QTYPE_QINT',
}
def error_path(parent):
diff --git a/tests/qapi-schema/qapi-schema-test.json
b/tests/qapi-schema/qapi-schema-test.json
index d43b5fd..84f0f07 100644
--- a/tests/qapi-schema/qapi-schema-test.json
+++ b/tests/qapi-schema/qapi-schema-test.json
@@ -74,7 +74,8 @@
'u64': ['uint64'],
'number': ['number'],
'boolean': ['bool'],
- 'string': ['str'] } }
+ 'string': ['str'],
+ 'sizes': ['size'] } }
# testing commands
{ 'command': 'user_def_cmd', 'data': {} }
diff --git a/tests/qapi-schema/qapi-schema-test.out
b/tests/qapi-schema/qapi-schema-test.out
index 08d7304..915a61b 100644
--- a/tests/qapi-schema/qapi-schema-test.out
+++ b/tests/qapi-schema/qapi-schema-test.out
@@ -12,7 +12,7 @@
OrderedDict([('union', 'UserDefFlatUnion'), ('base', 'UserDefUnionBase'),
('discriminator', 'enum1'), ('data', OrderedDict([('value1', 'UserDefA'),
('value2', 'UserDefB'), ('value3', 'UserDefB')]))]),
OrderedDict([('union', 'UserDefFlatUnion2'), ('base', 'UserDefUnionBase'),
('discriminator', 'enum1'), ('data', OrderedDict([('value1', 'UserDefC'),
('value2', 'UserDefB'), ('value3', 'UserDefA')]))]),
OrderedDict([('union', 'UserDefAnonUnion'), ('discriminator', OrderedDict()),
('data', OrderedDict([('uda', 'UserDefA'), ('s', 'str'), ('i', 'int')]))]),
- OrderedDict([('union', 'UserDefNativeListUnion'), ('data',
OrderedDict([('integer', ['int']), ('s8', ['int8']), ('s16', ['int16']),
('s32', ['int32']), ('s64', ['int64']), ('u8', ['uint8']), ('u16', ['uint16']),
('u32', ['uint32']), ('u64', ['uint64']), ('number', ['number']), ('boolean',
['bool']), ('string', ['str'])]))]),
+ OrderedDict([('union', 'UserDefNativeListUnion'), ('data',
OrderedDict([('integer', ['int']), ('s8', ['int8']), ('s16', ['int16']),
('s32', ['int32']), ('s64', ['int64']), ('u8', ['uint8']), ('u16', ['uint16']),
('u32', ['uint32']), ('u64', ['uint64']), ('number', ['number']), ('boolean',
['bool']), ('string', ['str']), ('sizes', ['size'])]))]),
OrderedDict([('command', 'user_def_cmd'), ('data', OrderedDict())]),
OrderedDict([('command', 'user_def_cmd1'), ('data', OrderedDict([('ud1a',
'UserDefOne')]))]),
OrderedDict([('command', 'user_def_cmd2'), ('data', OrderedDict([('ud1a',
'UserDefOne'), ('*ud1b', 'UserDefOne')])), ('returns', 'UserDefTwo')]),
--
2.1.0
Re: [Qemu-devel] [PATCH v5 01/28] qapi: Document type-safety considerations, Kevin Wolf, 2015/03/31