[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PULL 02/33] qapi: Clean up cgen() and mcgen()
From: |
Laurent Desnogues |
Subject: |
Re: [Qemu-devel] [PULL 02/33] qapi: Clean up cgen() and mcgen() |
Date: |
Mon, 7 Sep 2015 14:42:09 +0200 |
Hello Markus,
I found some Python issue with this commit.
On Fri, Sep 4, 2015 at 4:21 PM, Markus Armbruster <address@hidden> wrote:
> 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)
subn with 5 parameters requires Python 2.7 which isn't part of CentOS/RHEL 6.
Thanks,
Laurent
> + 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 11/33] qapi-visit: Fix two name arguments passed to visitors, (continued)
- [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, 2015/09/04
- Re: [Qemu-devel] [PULL 02/33] qapi: Clean up cgen() and mcgen(),
Laurent Desnogues <=
- [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
- [Qemu-devel] [PULL 19/33] qapi-tests: New tests for union, alternate command arguments, Markus Armbruster, 2015/09/04