qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Markus Armbruster <armbru@redhat.com>
To: qemu-devel@nongnu.org
Subject: [Qemu-devel] [PULL 02/33] qapi: Clean up cgen() and mcgen()
Date: Fri,  4 Sep 2015 16:21:09 +0200	[thread overview]
Message-ID: <1441376500-14784-3-git-send-email-armbru@redhat.com> (raw)
In-Reply-To: <1441376500-14784-1-git-send-email-armbru@redhat.com>

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 <armbru@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
---
 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

  parent reply	other threads:[~2015-09-04 14:21 UTC|newest]

Thread overview: 37+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-09-04 14:21 [Qemu-devel] [PULL 00/33] qapi: Another round of fixes and cleanups Markus Armbruster
2015-09-04 14:21 ` [Qemu-devel] [PULL 01/33] qapi: Clarify docs on including the same file multiple times Markus Armbruster
2015-09-04 14:21 ` Markus Armbruster [this message]
2015-09-07 12:42   ` [Qemu-devel] [PULL 02/33] qapi: Clean up cgen() and mcgen() Laurent Desnogues
2015-09-07 14:55     ` Markus Armbruster
2015-09-04 14:21 ` [Qemu-devel] [PULL 03/33] qapi: Simplify guardname() Markus Armbruster
2015-09-04 14:21 ` [Qemu-devel] [PULL 04/33] qapi-event: Clean up how name of enum QAPIEvent is made Markus Armbruster
2015-09-04 14:21 ` [Qemu-devel] [PULL 05/33] qapi: Reject -p arguments that break qapi-event.py Markus Armbruster
2015-09-04 14:21 ` [Qemu-devel] [PULL 06/33] qapi: Drop unused and useless parameters and variables Markus Armbruster
2015-09-04 14:21 ` [Qemu-devel] [PULL 07/33] qapi: Fix generated code when flat union has member 'kind' Markus Armbruster
2015-09-04 14:21 ` [Qemu-devel] [PULL 08/33] qapi: Generate a nicer struct for flat unions Markus Armbruster
2015-09-04 14:21 ` [Qemu-devel] [PULL 09/33] qapi-visit: Fix generated code when schema has forward refs Markus Armbruster
2015-09-04 14:21 ` [Qemu-devel] [PULL 10/33] qapi-visit: Replace list implicit_structs by set Markus Armbruster
2015-09-04 14:21 ` [Qemu-devel] [PULL 11/33] qapi-visit: Fix two name arguments passed to visitors Markus Armbruster
2015-09-04 14:21 ` [Qemu-devel] [PULL 12/33] tests/qapi-schema: Document alternate's enum lacks visit function Markus Armbruster
2015-09-04 14:21 ` [Qemu-devel] [PULL 13/33] tests/qapi-schema: Document events with base don't work Markus Armbruster
2015-09-04 14:21 ` [Qemu-devel] [PULL 14/33] qapi: Document that input visitor semantics are prone to leaks Markus Armbruster
2015-09-04 14:21 ` [Qemu-devel] [PULL 15/33] qapi: Document shortcoming with union 'data' branch Markus Armbruster
2015-09-04 14:21 ` [Qemu-devel] [PULL 16/33] qapi: Document flaws in checking of names Markus Armbruster
2015-09-04 14:21 ` [Qemu-devel] [PULL 17/33] tests/qapi-schema: Restore test case for flat union base bug Markus Armbruster
2015-09-04 14:21 ` [Qemu-devel] [PULL 18/33] tests/qapi-schema: Rename tests from data- to args- Markus Armbruster
2015-09-04 14:21 ` [Qemu-devel] [PULL 19/33] qapi-tests: New tests for union, alternate command arguments Markus Armbruster
2015-09-04 14:21 ` [Qemu-devel] [PULL 20/33] qapi: Fix to reject union command and event arguments Markus Armbruster
2015-09-04 14:21 ` [Qemu-devel] [PULL 21/33] qapi: Command returning anonymous type doesn't work, outlaw Markus Armbruster
2015-09-04 14:21 ` [Qemu-devel] [PULL 22/33] qapi-commands: Fix gen_err_check(e) for e and e != 'local_err' Markus Armbruster
2015-09-04 14:21 ` [Qemu-devel] [PULL 23/33] qapi-commands: Inline gen_marshal_output_call() Markus Armbruster
2015-09-04 14:21 ` [Qemu-devel] [PULL 24/33] qapi-commands: Don't feed output of mcgen() to mcgen() again Markus Armbruster
2015-09-04 14:21 ` [Qemu-devel] [PULL 25/33] qapi-commands: Drop useless initialization Markus Armbruster
2015-09-04 14:21 ` [Qemu-devel] [PULL 26/33] qapi: Generated code cleanup Markus Armbruster
2015-09-04 14:21 ` [Qemu-devel] [PULL 27/33] qapi: Drop one of two "simple union must not have base" checks Markus Armbruster
2015-09-04 14:21 ` [Qemu-devel] [PULL 28/33] tests/qapi-schema: Cover two more syntax errors Markus Armbruster
2015-09-04 14:21 ` [Qemu-devel] [PULL 29/33] tests/qapi-schema: Cover non-string, non-dictionary members Markus Armbruster
2015-09-04 14:21 ` [Qemu-devel] [PULL 30/33] qapi: Fix errors for " Markus Armbruster
2015-09-04 14:21 ` [Qemu-devel] [PULL 31/33] qapi: Simplify error reporting for array types Markus Armbruster
2015-09-04 14:21 ` [Qemu-devel] [PULL 32/33] docs/qapi-code-gen.txt: Fix QAPI schema examples Markus Armbruster
2015-09-04 14:21 ` [Qemu-devel] [PULL 33/33] qapi: Generators crash when --output-dir isn't given, fix Markus Armbruster
2015-09-04 16:37 ` [Qemu-devel] [PULL 00/33] qapi: Another round of fixes and cleanups Peter Maydell

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1441376500-14784-3-git-send-email-armbru@redhat.com \
    --to=armbru@redhat.com \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).