[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH RFC v2 02/47] qapi: Clean up cgen() and mcgen()
From: |
Markus Armbruster |
Subject: |
[Qemu-devel] [PATCH RFC v2 02/47] qapi: Clean up cgen() and mcgen() |
Date: |
Wed, 1 Jul 2015 22:21:50 +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>
---
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..20383ef 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 + '\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]
--
1.9.3
- [Qemu-devel] [PATCH RFC v2 00/47] qapi: QMP introspection, Markus Armbruster, 2015/07/01
- [Qemu-devel] [PATCH RFC v2 03/47] qapi: Simplify guardname(), Markus Armbruster, 2015/07/01
- [Qemu-devel] [PATCH RFC v2 12/47] tests/qapi-schema: Document events with with base don't work, Markus Armbruster, 2015/07/01
- [Qemu-devel] [PATCH RFC v2 04/47] qapi-event: Clean up how name of enum QAPIEvent is made, Markus Armbruster, 2015/07/01
- [Qemu-devel] [PATCH RFC v2 02/47] qapi: Clean up cgen() and mcgen(),
Markus Armbruster <=
- [Qemu-devel] [PATCH RFC v2 09/47] qapi-visit: Replace list implicit_structs by set, Markus Armbruster, 2015/07/01
- [Qemu-devel] [PATCH RFC v2 07/47] qapi: Generate a nicer struct for flat unions, Markus Armbruster, 2015/07/01
- Re: [Qemu-devel] [PATCH RFC v2 07/47] qapi: Generate a nicer struct for flat unions, Eric Blake, 2015/07/28