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

Stefan Behnel stefan_ml at behnel.de
Fri Aug 12 05:50:02 CEST 2011


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

Stefan


More information about the cython-devel mailing list