[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 02/33] qapi: Clean up cgen() and mcgen()
From: |
Markus Armbruster |
Subject: |
[Qemu-devel] [PULL 02/33] qapi: Clean up cgen() and mcgen() |
Date: |
Fri, 4 Sep 2015 16:21:09 +0200 |
Commit 05dfb26 added eatspace stripping to mcgen(). Move it to
cgen(), just in case somebody gets tempted to use cgen() directly
instead of via mcgen().
cgen() indents blank lines. No such lines get generated right now,
but fix it anyway.
We use triple-quoted strings for program text, like this:
'''
Program text
any number of lines
'''
Keeps the program text relatively readable, but puts an extra newline
at either end. mcgen() "fixes" that by dropping the first and last
line outright. Drop only the newlines.
This unmasks a bug in qapi-commands.py: four quotes instead of three.
Fix it up.
Output doesn't change
Signed-off-by: Markus Armbruster <address@hidden>
Reviewed-by: Eric Blake <address@hidden>
---
scripts/qapi-commands.py | 2 +-
scripts/qapi.py | 19 ++++++++++++-------
2 files changed, 13 insertions(+), 8 deletions(-)
diff --git a/scripts/qapi-commands.py b/scripts/qapi-commands.py
index ca22acc..ce51408 100644
--- a/scripts/qapi-commands.py
+++ b/scripts/qapi-commands.py
@@ -56,7 +56,7 @@ def gen_sync_call(name, args, ret_type, indent=0):
name=c_name(name), args=arglist, retval=retval).rstrip()
if ret_type:
ret += "\n" + gen_err_check('local_err')
- ret += "\n" + mcgen(''''
+ ret += "\n" + mcgen('''
%(marshal_output_call)s
''',
marshal_output_call=gen_marshal_output_call(name,
ret_type)).rstrip()
diff --git a/scripts/qapi.py b/scripts/qapi.py
index 06d7fc2..e656beb 100644
--- a/scripts/qapi.py
+++ b/scripts/qapi.py
@@ -943,16 +943,21 @@ def pop_indent(indent_amount=4):
global indent_level
indent_level -= indent_amount
+# Generate @code with @kwds interpolated.
+# Obey indent_level, and strip eatspace.
def cgen(code, **kwds):
- indent = genindent(indent_level)
- lines = code.split('\n')
- lines = map(lambda x: indent + x, lines)
- return '\n'.join(lines) % kwds + '\n'
-
-def mcgen(code, **kwds):
- raw = cgen('\n'.join(code.split('\n')[1:-1]), **kwds)
+ raw = code % kwds
+ if indent_level:
+ indent = genindent(indent_level)
+ raw = re.subn("^.", indent + r'\g<0>', raw, 0, re.MULTILINE)
+ raw = raw[0]
return re.sub(re.escape(eatspace) + ' *', '', raw)
+def mcgen(code, **kwds):
+ if code[0] == '\n':
+ code = code[1:]
+ return cgen(code, **kwds)
+
def basename(filename):
return filename.split("/")[-1]
--
2.4.3
- [Qemu-devel] [PULL 01/33] qapi: Clarify docs on including the same file multiple times, (continued)
- [Qemu-devel] [PULL 01/33] qapi: Clarify docs on including the same file multiple times, Markus Armbruster, 2015/09/04
- [Qemu-devel] [PULL 11/33] qapi-visit: Fix two name arguments passed to visitors, Markus Armbruster, 2015/09/04
- [Qemu-devel] [PULL 07/33] qapi: Fix generated code when flat union has member 'kind', Markus Armbruster, 2015/09/04
- [Qemu-devel] [PULL 14/33] qapi: Document that input visitor semantics are prone to leaks, Markus Armbruster, 2015/09/04
- [Qemu-devel] [PULL 13/33] tests/qapi-schema: Document events with base don't work, Markus Armbruster, 2015/09/04
- [Qemu-devel] [PULL 15/33] qapi: Document shortcoming with union 'data' branch, Markus Armbruster, 2015/09/04
- [Qemu-devel] [PULL 06/33] qapi: Drop unused and useless parameters and variables, Markus Armbruster, 2015/09/04
- [Qemu-devel] [PULL 23/33] qapi-commands: Inline gen_marshal_output_call(), Markus Armbruster, 2015/09/04
- [Qemu-devel] [PULL 27/33] qapi: Drop one of two "simple union must not have base" checks, Markus Armbruster, 2015/09/04
- [Qemu-devel] [PULL 25/33] qapi-commands: Drop useless initialization, Markus Armbruster, 2015/09/04
- [Qemu-devel] [PULL 02/33] qapi: Clean up cgen() and mcgen(),
Markus Armbruster <=
- [Qemu-devel] [PULL 22/33] qapi-commands: Fix gen_err_check(e) for e and e != 'local_err', Markus Armbruster, 2015/09/04
- [Qemu-devel] [PULL 08/33] qapi: Generate a nicer struct for flat unions, Markus Armbruster, 2015/09/04
- [Qemu-devel] [PULL 12/33] tests/qapi-schema: Document alternate's enum lacks visit function, Markus Armbruster, 2015/09/04
- [Qemu-devel] [PULL 16/33] qapi: Document flaws in checking of names, Markus Armbruster, 2015/09/04
- [Qemu-devel] [PULL 30/33] qapi: Fix errors for non-string, non-dictionary members, Markus Armbruster, 2015/09/04
- [Qemu-devel] [PULL 29/33] tests/qapi-schema: Cover non-string, non-dictionary members, Markus Armbruster, 2015/09/04
- [Qemu-devel] [PULL 24/33] qapi-commands: Don't feed output of mcgen() to mcgen() again, Markus Armbruster, 2015/09/04
- [Qemu-devel] [PULL 28/33] tests/qapi-schema: Cover two more syntax errors, Markus Armbruster, 2015/09/04