Kaydet (Commit) 666bb419 authored tarafından Neal Norwitz's avatar Neal Norwitz

SF #1777057, fix memoryview('test') so it works in debug mode too.

Also return a boolean for the readonly flag.

Other cleanup: make sure to set an exception when returning NULL and
reformat the getsets to be shorter by putting them all on one line.
üst 9604286e
...@@ -27,6 +27,7 @@ PyObject * ...@@ -27,6 +27,7 @@ PyObject *
PyMemoryView_FromMemory(PyBuffer *info) PyMemoryView_FromMemory(PyBuffer *info)
{ {
/* XXX(nnorwitz): need to implement something here? */ /* XXX(nnorwitz): need to implement something here? */
PyErr_SetString(PyExc_NotImplementedError, "need to implement");
return NULL; return NULL;
} }
...@@ -46,8 +47,9 @@ PyMemoryView_FromObject(PyObject *base) ...@@ -46,8 +47,9 @@ PyMemoryView_FromObject(PyObject *base)
&PyMemoryView_Type); &PyMemoryView_Type);
if (mview == NULL) return NULL; if (mview == NULL) return NULL;
mview->base = NULL;
if (PyObject_GetBuffer(base, &(mview->view), PyBUF_FULL) < 0) { if (PyObject_GetBuffer(base, &(mview->view), PyBUF_FULL) < 0) {
PyObject_DEL(mview); Py_DECREF(mview);
return NULL; return NULL;
} }
...@@ -337,7 +339,7 @@ memory_size_get(PyMemoryViewObject *self) ...@@ -337,7 +339,7 @@ memory_size_get(PyMemoryViewObject *self)
static PyObject * static PyObject *
memory_readonly_get(PyMemoryViewObject *self) memory_readonly_get(PyMemoryViewObject *self)
{ {
return PyInt_FromLong(self->view.readonly); return PyBool_FromLong(self->view.readonly);
} }
static PyObject * static PyObject *
...@@ -347,30 +349,14 @@ memory_ndim_get(PyMemoryViewObject *self) ...@@ -347,30 +349,14 @@ memory_ndim_get(PyMemoryViewObject *self)
} }
static PyGetSetDef memory_getsetlist[] ={ static PyGetSetDef memory_getsetlist[] ={
{"format", {"format", (getter)memory_format_get, NULL, NULL},
(getter)memory_format_get, {"itemsize", (getter)memory_itemsize_get, NULL, NULL},
NULL, NULL}, {"shape", (getter)memory_shape_get, NULL, NULL},
{"itemsize", {"strides", (getter)memory_strides_get, NULL, NULL},
(getter)memory_itemsize_get, {"suboffsets", (getter)memory_suboffsets_get, NULL, NULL},
NULL, NULL}, {"size", (getter)memory_size_get, NULL, NULL},
{"shape", {"readonly", (getter)memory_readonly_get, NULL, NULL},
(getter)memory_shape_get, {"ndim", (getter)memory_ndim_get, NULL, NULL},
NULL, NULL},
{"strides",
(getter)memory_strides_get,
NULL, NULL},
{"suboffsets",
(getter)memory_suboffsets_get,
NULL, NULL},
{"size",
(getter)memory_size_get,
NULL, NULL},
{"readonly",
(getter)memory_readonly_get,
NULL, NULL},
{"ndim",
(getter)memory_ndim_get,
NULL, NULL},
{NULL, NULL, NULL, NULL}, {NULL, NULL, NULL, NULL},
}; };
...@@ -401,7 +387,8 @@ static PyMethodDef memory_methods[] = { ...@@ -401,7 +387,8 @@ static PyMethodDef memory_methods[] = {
static void static void
memory_dealloc(PyMemoryViewObject *self) memory_dealloc(PyMemoryViewObject *self)
{ {
if (PyTuple_Check(self->base)) { if (self->base != NULL) {
if (PyTuple_Check(self->base)) {
/* Special case when first element is generic object /* Special case when first element is generic object
with buffer interface and the second element is a with buffer interface and the second element is a
contiguous "shadow" that must be copied back into contiguous "shadow" that must be copied back into
...@@ -419,11 +406,12 @@ memory_dealloc(PyMemoryViewObject *self) ...@@ -419,11 +406,12 @@ memory_dealloc(PyMemoryViewObject *self)
*/ */
PyObject_ReleaseBuffer(PyTuple_GET_ITEM(self->base,0), PyObject_ReleaseBuffer(PyTuple_GET_ITEM(self->base,0),
&(self->view)); &(self->view));
} }
else { else {
PyObject_ReleaseBuffer(self->base, &(self->view)); PyObject_ReleaseBuffer(self->base, &(self->view));
}
Py_CLEAR(self->base);
} }
Py_CLEAR(self->base);
PyObject_DEL(self); PyObject_DEL(self);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment