Mercurial > cpython-lru_cache-weakref
diff Objects/classobject.c @ 87438:992ef855b3ed
Issue #17810: Implement PEP 3154, pickle protocol 4.
Most of the work is by Alexandre.
| author | Antoine Pitrou <solipsis@pitrou.net> |
|---|---|
| date | Sat, 23 Nov 2013 18:59:12 +0100 |
| parents | e7f6cef7a4cc |
| children |
line wrap: on
line diff
--- a/Objects/classobject.c Sat Nov 23 19:52:05 2013 +0200 +++ b/Objects/classobject.c Sat Nov 23 18:59:12 2013 +0100 @@ -69,6 +69,30 @@ return (PyObject *)im; } +static PyObject * +method_reduce(PyMethodObject *im) +{ + PyObject *self = PyMethod_GET_SELF(im); + PyObject *func = PyMethod_GET_FUNCTION(im); + PyObject *builtins; + PyObject *getattr; + PyObject *funcname; + _Py_IDENTIFIER(getattr); + + funcname = _PyObject_GetAttrId(func, &PyId___name__); + if (funcname == NULL) { + return NULL; + } + builtins = PyEval_GetBuiltins(); + getattr = _PyDict_GetItemId(builtins, &PyId_getattr); + return Py_BuildValue("O(ON)", getattr, self, funcname); +} + +static PyMethodDef method_methods[] = { + {"__reduce__", (PyCFunction)method_reduce, METH_NOARGS, NULL}, + {NULL, NULL} +}; + /* Descriptors for PyMethod attributes */ /* im_func and im_self are stored in the PyMethod object */ @@ -367,7 +391,7 @@ offsetof(PyMethodObject, im_weakreflist), /* tp_weaklistoffset */ 0, /* tp_iter */ 0, /* tp_iternext */ - 0, /* tp_methods */ + method_methods, /* tp_methods */ method_memberlist, /* tp_members */ method_getset, /* tp_getset */ 0, /* tp_base */
