Skip to content

Commit cf3dd49

Browse files
committed
Move PyErr_WriteUnraisable call
1 parent ef00dde commit cf3dd49

File tree

1 file changed

+6
-8
lines changed

1 file changed

+6
-8
lines changed

mypyc/codegen/emitclass.py

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -842,15 +842,16 @@ def generate_dealloc_for_class(
842842
emitter.emit_line("static void")
843843
emitter.emit_line(f"{dealloc_func_name}({cl.struct_name(emitter.names)} *self)")
844844
emitter.emit_line("{")
845-
emitter.emit_line("int finalize_error = 0;")
846-
emitter.emit_line("PyObject *type, *value, *traceback;")
847-
emitter.emit_line("PyErr_Fetch(&type, &value, &traceback);")
848845
if has_tp_finalize:
849846
emitter.emit_line("if (!PyObject_GC_IsFinalized((PyObject *)self)) {")
847+
emitter.emit_line("PyObject *type, *value, *traceback;")
848+
emitter.emit_line("PyErr_Fetch(&type, &value, &traceback);")
850849
emitter.emit_line("PyObject_CallFinalizerFromDealloc((PyObject *)self);")
850+
emitter.emit_line("if (PyErr_Occurred() != NULL) {")
851+
emitter.emit_line("PyErr_WriteUnraisable((PyObject *)self);")
852+
emitter.emit_line("}")
853+
emitter.emit_line("PyErr_Restore(type, value, traceback);")
851854
emitter.emit_line("}")
852-
emitter.emit_line("if (PyErr_Occurred() != NULL) finalize_error = 1;")
853-
emitter.emit_line("PyErr_Restore(type, value, traceback);")
854855
emitter.emit_line("PyObject_GC_UnTrack(self);")
855856
if cl.reuse_freed_instance:
856857
emit_reuse_dealloc(cl, emitter)
@@ -863,9 +864,6 @@ def generate_dealloc_for_class(
863864
# # However, the message is slightly different due to the way mypyc compiles classes.
864865
# # CPython interpreter prints: Exception ignored in: <function F.__del__ at 0x100aed940>
865866
# # mypyc prints: Exception ignored in: <slot wrapper '__del__' of 'F' objects>
866-
emitter.emit_line("if (finalize_error == 1) {")
867-
emitter.emit_line("PyErr_WriteUnraisable((PyObject *)self);")
868-
emitter.emit_line("}")
869867
emitter.emit_line("}")
870868

871869

0 commit comments

Comments
 (0)