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:
Antoine Pitrou 2010-11-04 20:30:33 +00:00
parent 8f2e07b7d0
commit aeb6ceead7
5 changed files with 6 additions and 47 deletions

View File

@ -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;

View File

@ -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 */

View File

@ -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

View File

@ -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.

View File

@ -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;
} }