[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v3 08/14] qapi: Make c_type() consistently convert q
From: |
Eric Blake |
Subject: |
[Qemu-devel] [PATCH v3 08/14] qapi: Make c_type() consistently convert qapi names |
Date: |
Tue, 5 May 2015 06:30:49 -0600 |
Continuing the string of cleanups for supporting downstream names
containing '.', this patch focuses on ensuring c_type() can
handle a downstream name. This patch alone does not fix the
places where generator output should be calling this function
but was open-coding things instead, but it gets us a step closer.
Note that we generate a List type for our builtins; the code has
to make sure that ['int'] maps to 'intList' (and not 'q_intList'),
and that a member with type 'int' still maps to the C type 'int';
on the other hand, a member with a name of 'int' will still map
to 'q_int' when going through c_name(). This patch had to teach
type_name() to special-case builtins, since it is used by
c_list_type() which in turn feeds c_type().
Signed-off-by: Eric Blake <address@hidden>
---
scripts/qapi.py | 17 +++++++++++++----
1 file changed, 13 insertions(+), 4 deletions(-)
diff --git a/scripts/qapi.py b/scripts/qapi.py
index b9822c6..a1dfc85 100644
--- a/scripts/qapi.py
+++ b/scripts/qapi.py
@@ -769,6 +769,9 @@ def c_enum_const(type_name, const_name):
c_name_trans = string.maketrans('.-', '__')
+# This function is used for converting the name portion of 'name':'type'
+# into a valid C name, for use as a struct member or substring of a
+# function name.
def c_name(name, protect=True):
# ANSI X3J11/88-090, 3.1.1
c89_words = set(['auto', 'break', 'case', 'char', 'const', 'continue',
@@ -800,13 +803,18 @@ def c_name(name, protect=True):
return "q_" + name
return name.translate(c_name_trans)
+# This function is used for computing the C type of a 'member':['name'] array.
def c_list_type(name):
- return '%sList' % name
+ return type_name(name) + 'List'
+# This function is used for converting the type of 'member':'name' into a
+# substring for use in C pointer types or function names.
def type_name(name):
if type(name) == list:
return c_list_type(name[0])
- return name
+ if name in builtin_types.keys():
+ return name
+ return c_name(name)
def add_name(name, info, meta, implicit = False):
global all_names
@@ -864,6 +872,7 @@ def is_enum(name):
eatspace = '\033EATSPACE.'
+# This function is used for computing the full C type of 'member':'name'.
# A special suffix is added in c_type() for pointer types, and it's
# stripped in mcgen(). So please notice this when you check the return
# value of c_type() outside mcgen().
@@ -888,13 +897,13 @@ def c_type(name, is_param=False):
elif type(name) == list:
return '%s *%s' % (c_list_type(name[0]), eatspace)
elif is_enum(name):
- return name
+ return c_name(name)
elif name == None or len(name) == 0:
return 'void'
elif name in events:
return '%sEvent *%s' % (camel_case(name), eatspace)
else:
- return '%s *%s' % (name, eatspace)
+ return '%s *%s' % (c_name(name), eatspace)
def is_c_ptr(name):
suffix = "*" + eatspace
--
2.1.0
- Re: [Qemu-devel] [PATCH v3 13/14] qapi: Support downstream alternates, (continued)
- [Qemu-devel] [PATCH v3 14/14] qapi: Support downstream events and commands, Eric Blake, 2015/05/05
- [Qemu-devel] [PATCH v3 01/14] qapi: Fix C identifiers generated for names containing '.', Eric Blake, 2015/05/05
- [Qemu-devel] [PATCH v3 02/14] qapi: Rename identical c_fun()/c_var() into c_name(), Eric Blake, 2015/05/05
- [Qemu-devel] [PATCH v3 06/14] qapi: Use c_enum_const() in generate_alternate_qtypes(), Eric Blake, 2015/05/05
- [Qemu-devel] [PATCH v3 03/14] qapi: Rename _generate_enum_string() to camel_to_upper(), Eric Blake, 2015/05/05
- [Qemu-devel] [PATCH v3 10/14] qapi: Support downstream structs, Eric Blake, 2015/05/05
- [Qemu-devel] [PATCH v3 08/14] qapi: Make c_type() consistently convert qapi names,
Eric Blake <=
- [Qemu-devel] [PATCH v3 09/14] qapi: Support downstream enums, Eric Blake, 2015/05/05
- Re: [Qemu-devel] [PATCH v3 00/14] Fix qapi mangling of downstream names, Markus Armbruster, 2015/05/12