updated for version 7.3.422
Problem:    Python 3 does not have __members__.
Solution:   Add "name" and "number" in another way. (lilydjwg)
diff --git a/src/if_py_both.h b/src/if_py_both.h
index 53c2167..aa25912 100644
--- a/src/if_py_both.h
+++ b/src/if_py_both.h
@@ -1479,6 +1479,9 @@
     {"append",	    BufferAppend,	1,	    "Append data to Vim buffer" },
     {"mark",	    BufferMark,		1,	    "Return (row,col) representing position of named mark" },
     {"range",	    BufferRange,	1,	    "Return a range object which represents the part of the given buffer between line numbers s and e" },
+#if PY_VERSION_HEX >= 0x03000000
+    {"__dir__",	    BufferDir,		4,	    "List its attributes" },
+#endif
     { NULL,	    NULL,		0,	    NULL }
 };
 
diff --git a/src/if_python3.c b/src/if_python3.c
index 18d5b77..ac6f166 100644
--- a/src/if_python3.c
+++ b/src/if_python3.c
@@ -468,6 +468,7 @@
 static PyObject *BufferNew (buf_T *);
 static PyObject *WindowNew(win_T *);
 static PyObject *LineToString(const char *);
+static PyObject *BufferDir(PyObject *, PyObject *);
 
 static PyTypeObject RangeType;
 
@@ -961,13 +962,18 @@
 	return Py_BuildValue("s", this->buf->b_ffname);
     else if (strcmp(name, "number") == 0)
 	return Py_BuildValue("n", this->buf->b_fnum);
-    else if (strcmp(name,"__members__") == 0)
-	return Py_BuildValue("[ss]", "name", "number");
     else
 	return PyObject_GenericGetAttr(self, nameobj);
 }
 
     static PyObject *
+BufferDir(PyObject *self UNUSED, PyObject *args UNUSED)
+{
+    return Py_BuildValue("[sssss]", "name", "number",
+						   "append", "mark", "range");
+}
+
+    static PyObject *
 BufferRepr(PyObject *self)
 {
     static char repr[100];
diff --git a/src/version.c b/src/version.c
index b7b6ae8..545e42f 100644
--- a/src/version.c
+++ b/src/version.c
@@ -715,6 +715,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    422,
+/**/
     421,
 /**/
     420,