#3560: cleanup C memoryview API
diff --git a/Include/memoryobject.h b/Include/memoryobject.h
index ad2e8e7..3888259 100644
--- a/Include/memoryobject.h
+++ b/Include/memoryobject.h
@@ -1,5 +1,4 @@
-
-/* Memory object interface */
+/* Memory view object. In Python this is available as "memoryview". */
 
 #ifndef Py_MEMORYOBJECT_H
 #define Py_MEMORYOBJECT_H
@@ -7,19 +6,15 @@
 extern "C" {
 #endif
 
-typedef struct {
-	PyObject_HEAD
-	PyObject *base;
-	Py_buffer view;
-} PyMemoryViewObject;
-
-
 PyAPI_DATA(PyTypeObject) PyMemoryView_Type;
 
-#define PyMemory_Check(op) (Py_TYPE(op) == &PyMemoryView_Type)
-#define PyMemoryView(op) (((PyMemoryViewObject *)(op))->view)
+#define PyMemoryView_Check(op) (Py_TYPE(op) == &PyMemoryView_Type)
 
-#define Py_END_OF_MEMORY	(-1)
+/* Get a pointer to the underlying Py_buffer of a memoryview object. */
+#define PyMemoryView_GET_BUFFER(op) (&((PyMemoryViewObject *)(op))->view)
+/* Get a pointer to the PyObject from which originates a memoryview object. */
+#define PyMemoryView_GET_BASE(op) (((PyMemoryViewObject *)(op))->view.obj)
+
 
 PyAPI_FUNC(PyObject *) PyMemoryView_GetContiguous(PyObject *base, 
 						  int buffertype, 
@@ -58,10 +53,21 @@
 
 PyAPI_FUNC(PyObject *) PyMemoryView_FromObject(PyObject *base);
 
-PyAPI_FUNC(PyObject *) PyMemoryView_FromMemory(Py_buffer *info);
+PyAPI_FUNC(PyObject *) PyMemoryView_FromBuffer(Py_buffer *info);
 	/* create new if bufptr is NULL 
 	    will be a new bytesobject in base */
 
+	
+/* The struct is declared here so that macros can work, but it shouldn't
+   be considered public. Don't access those fields directly, use the macros
+   and functions instead! */
+typedef struct {
+	PyObject_HEAD
+	PyObject *base;
+	Py_buffer view;
+} PyMemoryViewObject;
+	
+
 #ifdef __cplusplus
 }
 #endif