Skip to content

Commit 5b6dda6

Browse files
committed
WIP try better approach
1 parent 39d50d3 commit 5b6dda6

File tree

1 file changed

+3
-2
lines changed

1 file changed

+3
-2
lines changed

mypyc/codegen/emitclass.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -575,6 +575,8 @@ def generate_setup_for_class(
575575
emitter.emit_line(f"if ({prefix}_free_instance != NULL) {{")
576576
emitter.emit_line(f"self = {prefix}_free_instance;")
577577
emitter.emit_line(f"{prefix}_free_instance = NULL;")
578+
emitter.emit_line("Py_SET_REFCNT(self, 1);")
579+
emitter.emit_line("PyObject_GC_Track(self);")
578580
emitter.emit_line("return (PyObject *)self;")
579581
emitter.emit_line("}")
580582

@@ -806,9 +808,9 @@ def generate_dealloc_for_class(
806808
emitter.emit_line("if (!PyObject_GC_IsFinalized((PyObject *)self)) {")
807809
emitter.emit_line("Py_TYPE(self)->tp_finalize((PyObject *)self);")
808810
emitter.emit_line("}")
811+
emitter.emit_line("PyObject_GC_UnTrack(self);")
809812
if cl.reuse_freed_instance:
810813
emit_reuse_dealloc(cl, emitter)
811-
emitter.emit_line("PyObject_GC_UnTrack(self);")
812814
# The trashcan is needed to handle deep recursive deallocations
813815
emitter.emit_line(f"CPy_TRASHCAN_BEGIN(self, {dealloc_func_name})")
814816
emitter.emit_line(f"{clear_func_name}(self);")
@@ -821,7 +823,6 @@ def emit_reuse_dealloc(cl: ClassIR, emitter: Emitter) -> None:
821823
prefix = cl.name_prefix(emitter.names)
822824
emitter.emit_line(f"if ({prefix}_free_instance == NULL) {{")
823825
emitter.emit_line(f"{prefix}_free_instance = self;")
824-
emitter.emit_line("Py_INCREF(self);")
825826

826827
# TODO: emit_clear_bitmaps(cl, emitter)
827828

0 commit comments

Comments
 (0)