[pypy-commit] pypy cpyext-FromBuffer: name clarification, translation fixes
mattip
pypy.commits at gmail.com
Tue Jan 10 01:46:04 EST 2017
Author: Matti Picus <matti.picus at gmail.com>
Branch: cpyext-FromBuffer
Changeset: r89460:69a5e99dcc8e
Date: 2017-01-10 08:45 +0200
http://bitbucket.org/pypy/pypy/changeset/69a5e99dcc8e/
Log: name clarification, translation fixes
diff --git a/pypy/module/cpyext/memoryobject.py b/pypy/module/cpyext/memoryobject.py
--- a/pypy/module/cpyext/memoryobject.py
+++ b/pypy/module/cpyext/memoryobject.py
@@ -58,7 +58,7 @@
"""
Creates the memory object in the interpreter
"""
- from pypy.module.cpyext.slotdefs import CPyBuffer
+ from pypy.module.cpyext.slotdefs import CPyBuffer, fq
py_mem = rffi.cast(PyMemoryViewObject, obj)
view = py_mem.c_view
shape = None
@@ -67,13 +67,16 @@
strides = None
if view.c_strides:
strides = [view.c_strides[i] for i in range(view.c_ndim)]
- format = None
+ format = 'B'
if view.c_format:
format = rffi.charp2str(view.c_format)
buf = CPyBuffer(space, view.c_buf, view.c_len, from_ref(space, view.c_obj),
format=format, shape=shape, strides=strides,
ndim=view.c_ndim, itemsize=view.c_itemsize,
readonly=view.c_readonly)
+ # Ensure view.c_buf is released upon object finalization
+ fq.register_finalizer(buf)
+ # Allow subclassing W_MemeoryView
w_type = from_ref(space, rffi.cast(PyObject, obj.c_ob_type))
w_obj = space.allocate_instance(W_MemoryView, w_type)
w_obj.__init__(buf)
@@ -239,8 +242,14 @@
typedescr = get_typedescr(W_MemoryView.typedef)
py_obj = typedescr.allocate(space, space.w_memoryview)
py_mem = rffi.cast(PyMemoryViewObject, py_obj)
- for f in ('c_buf', 'c_obj', 'c_len', 'c_itemsize', 'c_readonly', 'c_ndim', 'c_format'):
- setattr(py_mem.c_view, f, getattr(view, f))
+ mview = py_mem.c_view
+ mview.c_buf = view.c_buf
+ mview.c_obj = view.c_obj
+ mview.c_len = view.c_len
+ mview.c_itemsize = view.c_itemsize
+ mview.c_readonly = view.c_readonly
+ mview.c_ndim = view.c_ndim
+ mview.c_format = view.c_format
if view.c_strides == rffi.cast(Py_ssize_tP, view.c__strides):
py_mem.c_view.c_strides = rffi.cast(Py_ssize_tP, py_mem.c_view.c__strides)
for i in range(view.c_ndim):
diff --git a/pypy/module/cpyext/slotdefs.py b/pypy/module/cpyext/slotdefs.py
--- a/pypy/module/cpyext/slotdefs.py
+++ b/pypy/module/cpyext/slotdefs.py
@@ -324,7 +324,7 @@
def __init__(self, space, ptr, size, w_obj, format='B', shape=None,
strides=None, ndim=1, itemsize=1, readonly=True,
- releasebuffer=None):
+ releasebufferproc=rffi.cast(rffi.VOIDP, 0)):
self.space = space
self.ptr = ptr
self.size = size
@@ -342,7 +342,7 @@
self.ndim = ndim
self.itemsize = itemsize
self.readonly = readonly
- self.releasebufferproc = releasebuffer
+ self.releasebufferproc = releasebufferproc
def releasebuffer(self):
if self.pyobj:
@@ -360,7 +360,10 @@
for i in range(self.ndim):
pybuf.c_shape[i] = self.shape[i]
pybuf.c_strides[i] = self.strides[i]
- pybuf.c_format = rffi.str2charp(self.format)
+ if self.format:
+ pybuf.c_format = rffi.str2charp(self.format)
+ else:
+ pybuf.c_format = rffi.str2charp("B")
generic_cpy_call(self.space, func_target, self.pyobj, pybuf)
self.releasebufferproc = rffi.cast(rffi.VOIDP, 0)
@@ -407,9 +410,9 @@
func_target = rffi.cast(readbufferproc, func)
py_obj = make_ref(space, w_self)
py_type = py_obj.c_ob_type
- releasebuffer = rffi.cast(rffi.VOIDP, 0)
+ rbp = rffi.cast(rffi.VOIDP, 0)
if py_type.c_tp_as_buffer:
- releasebuffer = rffi.cast(rffi.VOIDP, py_type.c_tp_as_buffer.c_bf_releasebuffer)
+ rbp = rffi.cast(rffi.VOIDP, py_type.c_tp_as_buffer.c_bf_releasebuffer)
decref(space, py_obj)
with lltype.scoped_alloc(rffi.VOIDPP.TO, 1) as ptr:
index = rffi.cast(Py_ssize_t, 0)
@@ -417,7 +420,7 @@
if size < 0:
space.fromcache(State).check_and_raise_exception(always=True)
buf = CPyBuffer(space, ptr[0], size, w_self,
- releasebuffer=releasebuffer)
+ releasebufferproc=rbp)
fq.register_finalizer(buf)
return space.newbuffer(buf)
@@ -426,16 +429,16 @@
py_obj = make_ref(space, w_self)
py_type = py_obj.c_ob_type
decref(space, py_obj)
- releasebuffer = rffi.cast(rffi.VOIDP, 0)
+ rbp = rffi.cast(rffi.VOIDP, 0)
if py_type.c_tp_as_buffer:
- releasebuffer = rffi.cast(rffi.VOIDP, py_type.c_tp_as_buffer.c_bf_releasebuffer)
+ rbp = rffi.cast(rffi.VOIDP, py_type.c_tp_as_buffer.c_bf_releasebuffer)
with lltype.scoped_alloc(rffi.VOIDPP.TO, 1) as ptr:
index = rffi.cast(Py_ssize_t, 0)
size = generic_cpy_call(space, func_target, w_self, index, ptr)
if size < 0:
space.fromcache(State).check_and_raise_exception(always=True)
buf = CPyBuffer(space, ptr[0], size, w_self, readonly=False,
- releasebuffer=releasebuffer)
+ releasebufferproc=rbp)
fq.register_finalizer(buf)
return space.newbuffer(buf)
@@ -443,9 +446,9 @@
func_target = rffi.cast(getbufferproc, func)
py_obj = make_ref(space, w_self)
py_type = py_obj.c_ob_type
- releasebuffer = rffi.cast(rffi.VOIDP, 0)
+ rbp = rffi.cast(rffi.VOIDP, 0)
if py_type.c_tp_as_buffer:
- releasebuffer = rffi.cast(rffi.VOIDP, py_type.c_tp_as_buffer.c_bf_releasebuffer)
+ rbp = rffi.cast(rffi.VOIDP, py_type.c_tp_as_buffer.c_bf_releasebuffer)
decref(space, py_obj)
with lltype.scoped_alloc(Py_buffer) as pybuf:
_flags = 0
@@ -471,7 +474,7 @@
ndim=ndim, shape=shape, strides=strides,
itemsize=pybuf.c_itemsize,
readonly=widen(pybuf.c_readonly),
- releasebuffer = releasebuffer)
+ releasebufferproc = rbp)
fq.register_finalizer(buf)
return space.newbuffer(buf)
More information about the pypy-commit
mailing list