summaryrefslogtreecommitdiffstats
path: root/Objects
diff options
context:
space:
mode:
Diffstat (limited to 'Objects')
-rw-r--r--Objects/object.c58
1 files changed, 58 insertions, 0 deletions
diff --git a/Objects/object.c b/Objects/object.c
index 1643ec6..4899ef1 100644
--- a/Objects/object.c
+++ b/Objects/object.c
@@ -56,6 +56,33 @@ dump_counts()
null_strings, one_strings);
}
+PyObject *
+get_counts()
+{
+ PyTypeObject *tp;
+ PyObject *result;
+ PyObject *v;
+
+ result = PyList_New(0);
+ if (result == NULL)
+ return NULL;
+ for (tp = type_list; tp; tp = tp->tp_next) {
+ v = Py_BuildValue("(siii)", tp->tp_name, tp->tp_alloc,
+ tp->tp_free, tp->tp_maxalloc);
+ if (v == NULL) {
+ Py_DECREF(result);
+ return NULL;
+ }
+ if (PyList_Append(result, v) < 0) {
+ Py_DECREF(v);
+ Py_DECREF(result);
+ return NULL;
+ }
+ Py_DECREF(v);
+ }
+ return result;
+}
+
void
inc_count(tp)
typeobject *tp;
@@ -513,4 +540,35 @@ printrefs(fp)
}
}
+PyObject *
+getobjects(self, args)
+ PyObject *self;
+ PyObject *args;
+{
+ int i, n;
+ PyObject *t = NULL;
+ PyObject *res, *op;
+
+ if (!PyArg_ParseTuple(args, "i|O", &n, &t))
+ return NULL;
+ op = refchain._ob_next;
+ res = PyList_New(0);
+ if (res == NULL)
+ return NULL;
+ for (i = 0; (n == 0 || i < n) && op != &refchain; i++) {
+ while (op == self || op == args || op == res || op == t ||
+ t != NULL && op->ob_type != (PyTypeObject *) t) {
+ op = op->_ob_next;
+ if (op == &refchain)
+ return res;
+ }
+ if (PyList_Append(res, op) < 0) {
+ Py_DECREF(res);
+ return NULL;
+ }
+ op = op->_ob_next;
+ }
+ return res;
+}
+
#endif