Skip to content

Commit 14ad56a

Browse files
fix: handle weakrefs in tp_dealloc
1 parent bc96da2 commit 14ad56a

File tree

1 file changed

+7
-0
lines changed

1 file changed

+7
-0
lines changed

mypyc/codegen/emitclass.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -798,6 +798,13 @@ def generate_dealloc_for_class(
798798
emitter.emit_line("static void")
799799
emitter.emit_line(f"{dealloc_func_name}({cl.struct_name(emitter.names)} *self)")
800800
emitter.emit_line("{")
801+
if cl.supports_weakref:
802+
if emitter.capi_version < (3, 12):
803+
emitter.emit_line("if (self->weakreflist != NULL) {")
804+
emitter.emit_line("PyObject_ClearWeakRefs((PyObject *) self);")
805+
emitter.emit_line("}")
806+
else:
807+
emitter.emit_line("PyObject_ClearWeakRefs((PyObject *) self);")
801808
if has_tp_finalize:
802809
emitter.emit_line("if (!PyObject_GC_IsFinalized((PyObject *)self)) {")
803810
emitter.emit_line("Py_TYPE(self)->tp_finalize((PyObject *)self);")

0 commit comments

Comments
 (0)