[Cython] cython crash: default parameters in methods of template cppclass
Robert Bradshaw
robertwb at math.washington.edu
Tue Mar 29 02:32:59 CEST 2011
On Tue, Mar 22, 2011 at 7:21 AM, Simon Anders <anders at embl.de> wrote:
> Hi,
>
> I found a little bug in Cython 0.14.1.
>
> The following causes the Cython compiler to throw an exception:
>
> ---8<---
> cdef extern from "foo.h":
> cdef cppclass foo[ T ]:
> bar( int b = 0 )
>
> cdef foo[ int ] a
> a.bar( 1 )
> ---8<---
>
> The exception is "AttributeError: 'CFuncType' object has no attribute
> 'op_arg_struct'", thrown in line 3044, in generate_result_code. Full stack
> trace attached.
>
> The file compiles without crash if one either
> - removes the last line, i.e. the call to the class's method, or
> - removes the template argument, i.e., the "[ T ]" in line 2 and
> the "[ int ]" in line 5.
>
> Hence, the issue only appears when calling methods of _templated_ classes,
> which have a _default_ value for their argument.
Default arguments in C++ are completely different from default
arguments in Cython, this is our bug for not catching that. You have
to declare this as an overloaded method
cdef extern from "foo.h":
cdef cppclass foo[ T ]:
bar()
bar(int)
Btw, unless it returns an object, you probably want to declare the
return type of your methods. Perhaps we should make this a warning for
extern declarations?
- Robert
More information about the cython-devel
mailing list