diff options
author | Kurt Smith <kwmsmith@gmail.com> | 2009-07-16 23:43:53 -0400 |
---|---|---|
committer | Mark Florisson <markflorisson88@gmail.com> | 2011-09-30 14:53:27 +0100 |
commit | 307ad6392177e420c40d5728e512019a9750faa4 (patch) | |
tree | ba73cd3ce580e0c34be9d1b797aa9aa9f1e2df5f /Cython/Compiler/CythonScope.py | |
parent | 3bed371c9c3fdafd4fca0497527b6dc191b233ba (diff) | |
download | cython-307ad6392177e420c40d5728e512019a9750faa4.tar.gz |
memoryview utility code pulled in when memview array syntax used in Cython source.
Diffstat (limited to 'Cython/Compiler/CythonScope.py')
-rw-r--r-- | Cython/Compiler/CythonScope.py | 29 |
1 files changed, 19 insertions, 10 deletions
diff --git a/Cython/Compiler/CythonScope.py b/Cython/Compiler/CythonScope.py index d707e7a0a..b7d7aebb3 100644 --- a/Cython/Compiler/CythonScope.py +++ b/Cython/Compiler/CythonScope.py @@ -91,12 +91,11 @@ class CythonScope(ModuleScope): # # cython.view.memoryview declaration # - name = u'memoryview' - entry = viewscope.declare_c_class(name, None, + self.memviewentry = entry = viewscope.declare_c_class(memview_name, None, implementing=1, - objstruct_cname = '__pyx_obj_'+name, - typeobj_cname = '__pyx_tobj_'+name, - typeptr_cname=Naming.typeptr_prefix+name) + objstruct_cname = memviewext_objstruct_cname, + typeobj_cname = memviewext_typeobj_cname, + typeptr_cname= memviewext_typeptr_cname) entry.utility_code_definition = view_utility_code @@ -130,8 +129,7 @@ class CythonScope(ModuleScope): for idx, name in enumerate(('__getbuffer__', '__releasebuffer__')): entry = arr_scope.declare_pyfunction(name, None) - # XXX: absolutely horrendous hack right here!!! - # To be fixed!!! + # FIXME XXX: hack right here!!! entry.func_cname = '__pyx_pf_9__pyxutil_5array_%d' % (idx + 1) + name entry.utility_code_definition = cython_array_utility_code @@ -236,6 +234,10 @@ cdef object _testscope(int value): return "hello from cython.view scope, value=%d" % value """) +memview_name = u'memoryview' +memviewext_typeptr_cname = Naming.typeptr_prefix+memview_name +memviewext_typeobj_cname = '__pyx_tobj_'+memview_name +memviewext_objstruct_cname = '__pyx_obj_'+memview_name view_utility_code = CythonUtilityCode(u""" cdef class Enum: cdef object name @@ -258,12 +260,19 @@ cdef extern from *: cdef class memoryview: cdef Py_buffer view + cdef int gotbuf_flag + + def __cinit__(self): + self.gotbuf_flag = 0 - def __cinit__(memoryview self, obj, int flags): + cdef memoryview from_obj(memoryview self, obj, int flags): __Pyx_GetBuffer(obj, &self.view, flags) + self.gotbuf_flag = 1 def __dealloc__(memoryview self): - __Pyx_ReleaseBuffer(&self.view) + if self.gotbuf_flag: + __Pyx_ReleaseBuffer(&self.view) + self.gotbuf_flag = 0 """, prefix="__pyx_viewaxis_") @@ -387,4 +396,4 @@ cdef class array: self.shape = NULL self.format = NULL self.itemsize = 0 -''', prefix=cyarray_prefix)
\ No newline at end of file +''', prefix=cyarray_prefix) |