#3247 Get rid of Py_FindMethod; use tp_members instead.
Otherwise dir(_sre.SRE_Match) returns an empty list.
First step: handle most occurrences, remove tp_getattr and fill the tp_methods and tp_members slots.
Add some test about attribute access.
diff --git a/Modules/_threadmodule.c b/Modules/_threadmodule.c
index d2299aa..f0d03d7 100644
--- a/Modules/_threadmodule.c
+++ b/Modules/_threadmodule.c
@@ -119,12 +119,6 @@
{NULL, NULL} /* sentinel */
};
-static PyObject *
-lock_getattr(lockobject *self, char *name)
-{
- return Py_FindMethod(lock_methods, (PyObject *)self, name);
-}
-
static PyTypeObject Locktype = {
PyVarObject_HEAD_INIT(&PyType_Type, 0)
"_thread.lock", /*tp_name*/
@@ -133,10 +127,28 @@
/* methods */
(destructor)lock_dealloc, /*tp_dealloc*/
0, /*tp_print*/
- (getattrfunc)lock_getattr, /*tp_getattr*/
+ 0, /*tp_getattr*/
0, /*tp_setattr*/
0, /*tp_compare*/
0, /*tp_repr*/
+ 0, /*tp_as_number*/
+ 0, /*tp_as_sequence*/
+ 0, /*tp_as_mapping*/
+ 0, /*tp_hash*/
+ 0, /*tp_call*/
+ 0, /*tp_str*/
+ 0, /*tp_getattro*/
+ 0, /*tp_setattro*/
+ 0, /*tp_as_buffer*/
+ Py_TPFLAGS_DEFAULT, /*tp_flags*/
+ 0, /*tp_doc*/
+ 0, /*tp_traverse*/
+ 0, /*tp_clear*/
+ 0, /*tp_richcompare*/
+ 0, /*tp_weaklistoffset*/
+ 0, /*tp_iter*/
+ 0, /*tp_iternext*/
+ lock_methods, /*tp_methods*/
};
static lockobject *