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: Markus Armbruster
Subject: Re: [Qemu-devel] [PULL 02/33] qapi: Clean up cgen() and mcgen()
Date: Mon, 07 Sep 2015 16:55:39 +0200
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/24.5 (gnu/linux)

Laurent Desnogues <address@hidden> writes:

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

You're right.  I guess I need to fall back to re.compile().

[...]



reply via email to

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