Issue #10293: Remove obsolete field in the PyMemoryView structure,
unused undocumented value PyBUF_SHADOW, and strangely-looking code in PyMemoryView_GetContiguous.
This commit is contained in:
parent
8f2e07b7d0
commit
aeb6ceead7
|
@ -63,7 +63,6 @@ PyAPI_FUNC(PyObject *) PyMemoryView_FromBuffer(Py_buffer *info);
|
||||||
and functions instead! */
|
and functions instead! */
|
||||||
typedef struct {
|
typedef struct {
|
||||||
PyObject_HEAD
|
PyObject_HEAD
|
||||||
PyObject *base;
|
|
||||||
Py_buffer view;
|
Py_buffer view;
|
||||||
} PyMemoryViewObject;
|
} PyMemoryViewObject;
|
||||||
|
|
||||||
|
|
|
@ -189,7 +189,6 @@ typedef void (*releasebufferproc)(PyObject *, Py_buffer *);
|
||||||
|
|
||||||
#define PyBUF_READ 0x100
|
#define PyBUF_READ 0x100
|
||||||
#define PyBUF_WRITE 0x200
|
#define PyBUF_WRITE 0x200
|
||||||
#define PyBUF_SHADOW 0x400
|
|
||||||
|
|
||||||
/* End buffer interface */
|
/* End buffer interface */
|
||||||
|
|
||||||
|
|
|
@ -759,7 +759,7 @@ class SizeofTest(unittest.TestCase):
|
||||||
check(int(PyLong_BASE**2-1), size(vh) + 2*self.longdigit)
|
check(int(PyLong_BASE**2-1), size(vh) + 2*self.longdigit)
|
||||||
check(int(PyLong_BASE**2), size(vh) + 3*self.longdigit)
|
check(int(PyLong_BASE**2), size(vh) + 3*self.longdigit)
|
||||||
# memory
|
# memory
|
||||||
check(memoryview(b''), size(h + 'P PP2P2i7P'))
|
check(memoryview(b''), size(h + 'PP2P2i7P'))
|
||||||
# module
|
# module
|
||||||
check(unittest, size(h + '3P'))
|
check(unittest, size(h + '3P'))
|
||||||
# None
|
# None
|
||||||
|
|
|
@ -10,6 +10,10 @@ What's New in Python 3.2 Beta 1?
|
||||||
Core and Builtins
|
Core and Builtins
|
||||||
-----------------
|
-----------------
|
||||||
|
|
||||||
|
- Issue #10293: Remove obsolete field in the PyMemoryView structure,
|
||||||
|
unused undocumented value PyBUF_SHADOW, and strangely-looking code in
|
||||||
|
PyMemoryView_GetContiguous.
|
||||||
|
|
||||||
- Issue #6081: Add str.format_map, similar to str.format(**mapping).
|
- Issue #6081: Add str.format_map, similar to str.format(**mapping).
|
||||||
|
|
||||||
- If FileIO.__init__ fails, close the file descriptor.
|
- If FileIO.__init__ fails, close the file descriptor.
|
||||||
|
|
|
@ -82,7 +82,6 @@ PyMemoryView_FromBuffer(Py_buffer *info)
|
||||||
PyObject_GC_New(PyMemoryViewObject, &PyMemoryView_Type);
|
PyObject_GC_New(PyMemoryViewObject, &PyMemoryView_Type);
|
||||||
if (mview == NULL)
|
if (mview == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
mview->base = NULL;
|
|
||||||
dup_buffer(&mview->view, info);
|
dup_buffer(&mview->view, info);
|
||||||
/* NOTE: mview->view.obj should already have been incref'ed as
|
/* NOTE: mview->view.obj should already have been incref'ed as
|
||||||
part of PyBuffer_FillInfo(). */
|
part of PyBuffer_FillInfo(). */
|
||||||
|
@ -112,8 +111,6 @@ PyMemoryView_FromObject(PyObject *base)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
mview->base = base;
|
|
||||||
Py_INCREF(base);
|
|
||||||
return (PyObject *)mview;
|
return (PyObject *)mview;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -291,8 +288,6 @@ PyMemoryView_GetContiguous(PyObject *obj, int buffertype, char fort)
|
||||||
|
|
||||||
if (PyBuffer_IsContiguous(view, fort)) {
|
if (PyBuffer_IsContiguous(view, fort)) {
|
||||||
/* no copy needed */
|
/* no copy needed */
|
||||||
Py_INCREF(obj);
|
|
||||||
mem->base = obj;
|
|
||||||
_PyObject_GC_TRACK(mem);
|
_PyObject_GC_TRACK(mem);
|
||||||
return (PyObject *)mem;
|
return (PyObject *)mem;
|
||||||
}
|
}
|
||||||
|
@ -324,21 +319,7 @@ PyMemoryView_GetContiguous(PyObject *obj, int buffertype, char fort)
|
||||||
Py_DECREF(mem);
|
Py_DECREF(mem);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
if (buffertype == PyBUF_SHADOW) {
|
|
||||||
/* return a shadowed memory-view object */
|
|
||||||
view->buf = dest;
|
|
||||||
mem->base = PyTuple_Pack(2, obj, bytes);
|
|
||||||
Py_DECREF(bytes);
|
|
||||||
if (mem->base == NULL) {
|
|
||||||
Py_DECREF(mem);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
PyBuffer_Release(view); /* XXX ? */
|
PyBuffer_Release(view); /* XXX ? */
|
||||||
/* steal the reference */
|
|
||||||
mem->base = bytes;
|
|
||||||
}
|
}
|
||||||
_PyObject_GC_TRACK(mem);
|
_PyObject_GC_TRACK(mem);
|
||||||
return (PyObject *)mem;
|
return (PyObject *)mem;
|
||||||
|
@ -481,28 +462,7 @@ static void
|
||||||
do_release(PyMemoryViewObject *self)
|
do_release(PyMemoryViewObject *self)
|
||||||
{
|
{
|
||||||
if (self->view.obj != NULL) {
|
if (self->view.obj != NULL) {
|
||||||
if (self->base && PyTuple_Check(self->base)) {
|
PyBuffer_Release(&(self->view));
|
||||||
/* Special case when first element is generic object
|
|
||||||
with buffer interface and the second element is a
|
|
||||||
contiguous "shadow" that must be copied back into
|
|
||||||
the data areay of the first tuple element before
|
|
||||||
releasing the buffer on the first element.
|
|
||||||
*/
|
|
||||||
|
|
||||||
PyObject_CopyData(PyTuple_GET_ITEM(self->base,0),
|
|
||||||
PyTuple_GET_ITEM(self->base,1));
|
|
||||||
|
|
||||||
/* The view member should have readonly == -1 in
|
|
||||||
this instance indicating that the memory can
|
|
||||||
be "locked" and was locked and will be unlocked
|
|
||||||
again after this call.
|
|
||||||
*/
|
|
||||||
PyBuffer_Release(&(self->view));
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
PyBuffer_Release(&(self->view));
|
|
||||||
}
|
|
||||||
Py_CLEAR(self->base);
|
|
||||||
}
|
}
|
||||||
self->view.obj = NULL;
|
self->view.obj = NULL;
|
||||||
self->view.buf = NULL;
|
self->view.buf = NULL;
|
||||||
|
@ -819,8 +779,6 @@ _notimpl:
|
||||||
static int
|
static int
|
||||||
memory_traverse(PyMemoryViewObject *self, visitproc visit, void *arg)
|
memory_traverse(PyMemoryViewObject *self, visitproc visit, void *arg)
|
||||||
{
|
{
|
||||||
if (self->base != NULL)
|
|
||||||
Py_VISIT(self->base);
|
|
||||||
if (self->view.obj != NULL)
|
if (self->view.obj != NULL)
|
||||||
Py_VISIT(self->view.obj);
|
Py_VISIT(self->view.obj);
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -829,7 +787,6 @@ memory_traverse(PyMemoryViewObject *self, visitproc visit, void *arg)
|
||||||
static int
|
static int
|
||||||
memory_clear(PyMemoryViewObject *self)
|
memory_clear(PyMemoryViewObject *self)
|
||||||
{
|
{
|
||||||
Py_CLEAR(self->base);
|
|
||||||
PyBuffer_Release(&self->view);
|
PyBuffer_Release(&self->view);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue