[Cython] Cython bug ? - Entry.is_arg flag not set for all arguments

Vitja Makarov vitja.makarov at gmail.com
Fri Aug 12 08:21:53 CEST 2011


2011/8/12 Stefan Behnel <stefan_ml at behnel.de>:
> [fixed subject]
>
> Romain Guillebert, 12.08.2011 03:19:
>>
>> I tried to compiled Demos/primes.pyx using the ctypes backend and I
>> think I've found a bug :
>> The Entry for the kmax parameter does not set is_arg to 1. However if I
>> turn the def into a cdef, it works fine.
>>
>> Is this a bug or a known hack ?
>
> Vitja already brought this up, too:
>
> http://article.gmane.org/gmane.comp.python.cython.devel/12385
>
> A quick grep on the sources gives me this:
>
> """
> Cython/Compiler/Buffer.py:            if entry.is_arg:
> Cython/Compiler/Buffer.py:                if entry.is_arg:
> Cython/Compiler/ExprNodes.py:        return entry and (entry.is_local or
> entry.is_arg) and not entry.in_closure
> Cython/Compiler/FlowControl.py:        return (entry.is_local or
> entry.is_pyclass_attr or entry.is_arg or
> Cython/Compiler/FlowControl.py:        self.is_arg = False
> Cython/Compiler/FlowControl.py:        self.is_arg = True
> Cython/Compiler/FlowControl.py:                if assmt.is_arg:
> Cython/Compiler/FlowControl.py:            # TODO: starred args entries are
> not marked with is_arg flag
> Cython/Compiler/FlowControl.py:                if assmt.is_arg:
> Cython/Compiler/FlowControl.py:                    is_arg = True
> Cython/Compiler/FlowControl.py:                is_arg = False
> Cython/Compiler/FlowControl.py:            if is_arg:
> Cython/Compiler/Symtab.py:    # is_arg           boolean    Is the arg of a
> method
> Cython/Compiler/Symtab.py:    is_arg = 0
> Cython/Compiler/Symtab.py:        entry.is_arg = 1
> """
>
> This doesn't look like it would be wrong (or even just unsafe) to consider
> the unset flag a bug and fix it. Basically, it's almost unused in the
> original sources, all places where the flag is being read currently are
> somewhat recent code that looks reasonable to me and that appear to assume
> that the flag is actually set.
>
> So, I'd say, if anyone wants to properly clean this up, please go ahead and
> do so, but please do it right on the master branch and send it through
> Jenkins.
>

Yeah, that would be really nice if all args including starred ones
will have is_arg attribute set.

-- 
vitja.


More information about the cython-devel mailing list