summaryrefslogtreecommitdiffstats
path: root/Modules/parsermodule.c
diff options
context:
space:
mode:
authorJesus Cea <jcea@jcea.es>2012-08-03 12:28:37 (GMT)
committerJesus Cea <jcea@jcea.es>2012-08-03 12:28:37 (GMT)
commite9c5318967e1e62e940b72cd47502a1a3b559b95 (patch)
tree34c525b3471a0d8f9ae478c4e4e78142f9081ca4 /Modules/parsermodule.c
parenta9a53c7dc055b54133f2dee33f1834d7566de842 (diff)
downloadcpython-e9c5318967e1e62e940b72cd47502a1a3b559b95.zip
cpython-e9c5318967e1e62e940b72cd47502a1a3b559b95.tar.gz
cpython-e9c5318967e1e62e940b72cd47502a1a3b559b95.tar.bz2
Closes #15512: Correct __sizeof__ support for parser
Diffstat (limited to 'Modules/parsermodule.c')
-rw-r--r--Modules/parsermodule.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/Modules/parsermodule.c b/Modules/parsermodule.c
index c0633e3..84516ec 100644
--- a/Modules/parsermodule.c
+++ b/Modules/parsermodule.c
@@ -167,6 +167,7 @@ typedef struct {
static void parser_free(PyST_Object *st);
+static PyObject* parser_sizeof(PyST_Object *, void *);
static PyObject* parser_richcompare(PyObject *left, PyObject *right, int op);
static PyObject* parser_compilest(PyST_Object *, PyObject *, PyObject *);
static PyObject* parser_isexpr(PyST_Object *, PyObject *, PyObject *);
@@ -187,7 +188,8 @@ static PyMethodDef parser_methods[] = {
PyDoc_STR("Creates a list-tree representation of this ST.")},
{"totuple", (PyCFunction)parser_st2tuple, PUBLIC_METHOD_TYPE,
PyDoc_STR("Creates a tuple-tree representation of this ST.")},
-
+ {"__sizeof__", (PyCFunction)parser_sizeof, METH_NOARGS,
+ PyDoc_STR("Returns size in memory, in bytes.")},
{NULL, NULL, 0, NULL}
};
@@ -361,6 +363,15 @@ parser_free(PyST_Object *st)
PyObject_Del(st);
}
+static PyObject *
+parser_sizeof(PyST_Object *st, void *unused)
+{
+ Py_ssize_t res;
+
+ res = sizeof(PyST_Object) + _PyNode_SizeOf(st->st_node);
+ return PyLong_FromSsize_t(res);
+}
+
/* parser_st2tuple(PyObject* self, PyObject* args, PyObject* kw)
*