summaryrefslogtreecommitdiff
path: root/Objects/codeobject.c
diff options
context:
space:
mode:
authorMartin v. Löwis <martin@v.loewis.de>2012-07-26 22:23:23 +0200
committerMartin v. Löwis <martin@v.loewis.de>2012-07-26 22:23:23 +0200
commit3bbd2fad4d4a282c7a5a3169a4f497b97aeff319 (patch)
tree4143a1da2f202770afa096a4ca3f5c4306a1ac2c /Objects/codeobject.c
parentd0118e16a14b09dcc43e35bfd57bdb3a11c7f926 (diff)
downloadcpython-git-3bbd2fad4d4a282c7a5a3169a4f497b97aeff319.tar.gz
Issue #15456: Fix code __sizeof__ after #12399 change.
Patch by Serhiy Storchaka.
Diffstat (limited to 'Objects/codeobject.c')
-rw-r--r--Objects/codeobject.c18
1 files changed, 17 insertions, 1 deletions
diff --git a/Objects/codeobject.c b/Objects/codeobject.c
index 550e28498d..9713f61b24 100644
--- a/Objects/codeobject.c
+++ b/Objects/codeobject.c
@@ -375,6 +375,17 @@ code_dealloc(PyCodeObject *co)
}
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 @@ code_hash(PyCodeObject *co)
/* 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 @@ PyTypeObject PyCode_Type = {
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 */