summaryrefslogtreecommitdiffstats
path: root/Objects/codeobject.c
diff options
context:
space:
mode:
Diffstat (limited to 'Objects/codeobject.c')
-rw-r--r--Objects/codeobject.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/Objects/codeobject.c b/Objects/codeobject.c
index da5c09a..470bf56 100644
--- a/Objects/codeobject.c
+++ b/Objects/codeobject.c
@@ -5,6 +5,8 @@
#define NAME_CHARS \
"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz"
+PyObject *_Py_code_object_list = NULL;
+
/* all_name_chars(s): true iff all chars in s are valid NAME_CHARS */
static int
@@ -109,8 +111,23 @@ PyCode_New(int argcount, int kwonlyargcount,
co->co_lnotab = lnotab;
co->co_zombieframe = NULL;
co->co_weakreflist = NULL;
+
+ if (_Py_code_object_list != NULL) {
+ int err;
+ PyObject *ref = PyWeakref_NewRef((PyObject*)co, NULL);
+ if (ref == NULL)
+ goto error;
+ err = PyList_Append(_Py_code_object_list, ref);
+ Py_DECREF(ref);
+ if (err)
+ goto error;
+ }
}
return co;
+
+error:
+ Py_DECREF(co);
+ return NULL;
}
PyCodeObject *