Mercurial > cpython-lru_cache-weakref
diff Objects/codeobject.c @ 78290:5093cfdff2a9
Issue #15456: Fix code __sizeof__ after #12399 change.
Patch by Serhiy Storchaka.
| author | Martin v. Löwis <martin@v.loewis.de> |
|---|---|
| date | Thu, 26 Jul 2012 22:23:23 +0200 |
| parents | 9c76bb654809 |
| children | bea4447c22bf |
line wrap: on
line diff
--- a/Objects/codeobject.c Thu Jul 26 15:21:17 2012 -0400 +++ b/Objects/codeobject.c Thu Jul 26 22:23:23 2012 +0200 @@ -375,6 +375,17 @@ } static PyObject * +code_sizeof(PyCodeObject *co, void *unused) +{ + Py_ssize_t res; + + res = sizeof(PyCodeObject); + if (co->co_cell2arg != NULL && co->co_cellvars != NULL) + res += PyTuple_GET_SIZE(co->co_cellvars) * sizeof(unsigned char); + return PyLong_FromSsize_t(res); +} + +static PyObject * code_repr(PyCodeObject *co) { int lineno; @@ -480,6 +491,11 @@ /* XXX code objects need to participate in GC? */ +static struct PyMethodDef code_methods[] = { + {"__sizeof__", (PyCFunction)code_sizeof, METH_NOARGS}, + {NULL, NULL} /* sentinel */ +}; + PyTypeObject PyCode_Type = { PyVarObject_HEAD_INIT(&PyType_Type, 0) "code", @@ -508,7 +524,7 @@ offsetof(PyCodeObject, co_weakreflist), /* tp_weaklistoffset */ 0, /* tp_iter */ 0, /* tp_iternext */ - 0, /* tp_methods */ + code_methods, /* tp_methods */ code_memberlist, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */
