diff options
author | Martin v. Löwis <martin@v.loewis.de> | 2012-07-26 20:23:23 (GMT) |
---|---|---|
committer | Martin v. Löwis <martin@v.loewis.de> | 2012-07-26 20:23:23 (GMT) |
commit | 3bbd2fad4d4a282c7a5a3169a4f497b97aeff319 (patch) | |
tree | 4143a1da2f202770afa096a4ca3f5c4306a1ac2c /Objects/codeobject.c | |
parent | d0118e16a14b09dcc43e35bfd57bdb3a11c7f926 (diff) | |
download | cpython-3bbd2fad4d4a282c7a5a3169a4f497b97aeff319.zip cpython-3bbd2fad4d4a282c7a5a3169a4f497b97aeff319.tar.gz cpython-3bbd2fad4d4a282c7a5a3169a4f497b97aeff319.tar.bz2 |
Issue #15456: Fix code __sizeof__ after #12399 change.
Patch by Serhiy Storchaka.
Diffstat (limited to 'Objects/codeobject.c')
-rw-r--r-- | Objects/codeobject.c | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/Objects/codeobject.c b/Objects/codeobject.c index 550e284..9713f61 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 */ |