qemu-devel
[Top][All Lists]
Advanced

[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
>
>



reply via email to

[Prev in Thread] Current Thread [Next in Thread]