[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