aboutsummaryrefslogtreecommitdiff
path: root/scripts/qapi.py
diff options
context:
space:
mode:
authorMarc-André Lureau <marcandre.lureau@redhat.com>2017-08-24 10:46:10 +0200
committerMarkus Armbruster <armbru@redhat.com>2017-09-04 13:09:13 +0200
commitf7abe0ecd4973dfe36944b916c5b9cf8ec199b8a (patch)
tree99ca676afbfcf2da0182b3bf99811d000cb69c58 /scripts/qapi.py
parent788b305c91398f18e5952667b929d7f45e2c211c (diff)
qapi: Change data type of the FOO_lookup generated for enum FOO
Currently, a FOO_lookup is an array of strings terminated by a NULL sentinel. A future patch will generate enums with "holes". NULL-termination will cease to work then. To prepare for that, store the length in the FOO_lookup by wrapping it in a struct and adding a member for the length. The sentinel will be dropped next. Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> Message-Id: <20170822132255.23945-13-marcandre.lureau@redhat.com> [Basically redone] Signed-off-by: Markus Armbruster <armbru@redhat.com> Message-Id: <1503564371-26090-16-git-send-email-armbru@redhat.com> [Rebased]
Diffstat (limited to 'scripts/qapi.py')
-rw-r--r--scripts/qapi.py13
1 files changed, 8 insertions, 5 deletions
diff --git a/scripts/qapi.py b/scripts/qapi.py
index 8736b9c786..39a67270fc 100644
--- a/scripts/qapi.py
+++ b/scripts/qapi.py
@@ -1849,19 +1849,22 @@ def guardend(name):
def gen_enum_lookup(name, values, prefix=None):
ret = mcgen('''
-const char *const %(c_name)s_lookup[] = {
+const QEnumLookup %(c_name)s_lookup = {
+ .array = (const char *const[]) {
''',
c_name=c_name(name))
for value in values:
index = c_enum_const(name, value, prefix)
ret += mcgen('''
- [%(index)s] = "%(value)s",
+ [%(index)s] = "%(value)s",
''',
index=index, value=value)
max_index = c_enum_const(name, '_MAX', prefix)
ret += mcgen('''
- [%(max_index)s] = NULL,
+ [%(max_index)s] = NULL,
+ },
+ .size = %(max_index)s
};
''',
max_index=max_index)
@@ -1895,9 +1898,9 @@ typedef enum %(c_name)s {
ret += mcgen('''
#define %(c_name)s_str(val) \\
- qapi_enum_lookup(%(c_name)s_lookup, (val))
+ qapi_enum_lookup(&%(c_name)s_lookup, (val))
-extern const char *const %(c_name)s_lookup[];
+extern const QEnumLookup %(c_name)s_lookup;
''',
c_name=c_name(name))
return ret