Hi list and Mark,
it seems that C code with questionable casts is generated when using memory 
views of extension types. I get following warnings from gcc:

extension_type_memoryview.c: In function 
‘__pyx_pf_25extension_type_memoryview_test_getitem’:
extension_type_memoryview.c:1468:15: warning: assignment from incompatible 
pointer type
extension_type_memoryview.c: In function 
‘__pyx_pf_25extension_type_memoryview_2test_getitem_typed’:
extension_type_memoryview.c:1565:15: warning: assignment from incompatible 
pointer type
extension_type_memoryview.c:1568:18: warning: assignment from incompatible 
pointer type
    
And following errors if compiling in C++ mode with g++:
extension_type_memoryview.c: In function ‘PyObject* 
__pyx_pf_25extension_type_memoryview_test_getitem(PyObject*)’:
extension_type_memoryview.c:1468:213: error: cannot convert 
‘__pyx_obj_25extension_type_memoryview_ExtensionType*’ to ‘PyObject*’ in 
assignment
extension_type_memoryview.c: In function ‘PyObject* 
__pyx_pf_25extension_type_memoryview_2test_getitem_typed(PyObject*)’:
extension_type_memoryview.c:1565:213: error: cannot convert 
‘__pyx_obj_25extension_type_memoryview_ExtensionType*’ to ‘PyObject*’ in 
assignment
extension_type_memoryview.c:1568:20: error: cannot convert ‘PyObject*’ to 
‘__pyx_obj_25extension_type_memoryview_ExtensionType*’ in assignment

I get exactly the same error when --cplus is passed to Cython and
extension_type_memoryview.cpp is generated/compiled.

...which currently prevents my project combining C++ code with extension
types and memory views to compile. :-( Test-case is attached. Cython 0.17.2.

Regards,
                Matěj
# mode: run
# tags: numpy, cpp

import numpy as np


cdef class ExtensionType(object):
    cdef public int dummy

    def __init__(self, n):
        self.dummy = n

items = [ExtensionType(1), ExtensionType(2)]
cdef ExtensionType[:] view = np.array(items, dtype=ExtensionType)

def test_getitem():
    """
    >>> test_getitem()
    1
    2
    """
    for i in range(view.shape[0]):
        item = view[i]
        print item.dummy

def test_getitem_typed():
    """
    >>> test_getitem_typed()
    1
    2
    """
    cdef ExtensionType item
    for i in range(view.shape[0]):
        item = view[i]
        print item.dummy
_______________________________________________
cython-devel mailing list
cython-devel@python.org
http://mail.python.org/mailman/listinfo/cython-devel

Reply via email to