[Cython] weird code in argument unpacking (memoryview related?)
mark florisson
markflorisson88 at gmail.com
Fri Mar 30 14:25:28 CEST 2012
On 30 March 2012 12:19, Stefan Behnel <stefan_ml at behnel.de> wrote:
> Hi,
>
> this code in Nodes.py around line 3950, at the end of the DefNodeWrapper's
> method generate_keyword_unpacking_code(), was added as part of the memory
> view changes, back in July last year:
>
> """
> # convert arg values to their final type and assign them
> for i, arg in enumerate(all_args):
> if arg.default and not arg.type.is_pyobject:
> code.putln("if (values[%d]) {" % i)
> if arg.default and not arg.type.is_pyobject:
> code.putln('} else {')
> code.putln(
> "%s = %s;" % (
> arg.entry.cname,
> arg.calculate_default_value_code(code)))
> if arg.type.is_memoryviewslice:
> code.put_incref_memoryviewslice(arg.entry.cname,
> have_gil=True)
> code.putln('}')
> """
>
> By being overly complicated, it hides rather well what it's actually meant
> to achieve. It doesn't do at all what its comment says and also refers to
> the default value of the argument, which is already assigned way before
> this place in the code. Therefore, I'd be surprised if it generated
> anything but dead C code, because the case that "values[i]" is NULL should
> never happen.
>
> Mark, could you comment on this? Is this just a left-over from a broken
> merge or something?
Hm, IIRC I was fixing acquisition count errors for memoryview slices
(of which there were many) for arguments with default values, I was
cleaning up after the initial memoryview implementation.
All I did was add another case for memoryview slices in old code (I
only wrote the last 3 lines, you wrote the other ones in 2008). Very
similar but more recent code (probably copied and pasted) can be found
around line ~3730 in generate_tuple_and_keyword_parsing_code (instead
of generate_keyword_unpacking_code).
There are tests for default arguments and acquisition count errors
should fail immediately and hard, so I trust your judgement to remove
any or all of this.
> Stefan
> _______________________________________________
> cython-devel mailing list
> cython-devel at python.org
> http://mail.python.org/mailman/listinfo/cython-devel
More information about the cython-devel
mailing list