MCPcopy Index your code
hub / github.com/python/mypy / generate_clear_for_class

Function generate_clear_for_class

mypyc/codegen/emitclass.py:896–919  ·  view source on GitHub ↗
(cl: ClassIR, func_name: str, emitter: Emitter)

Source from the content-addressed store, hash-verified

894
895
896def generate_clear_for_class(cl: ClassIR, func_name: str, emitter: Emitter) -> None:
897 emitter.emit_line("static int")
898 emitter.emit_line(f"{func_name}({cl.struct_name(emitter.names)} *self)")
899 emitter.emit_line("{")
900 for base in reversed(cl.base_mro):
901 for attr, rtype in base.attributes.items():
902 emitter.emit_gc_clear(f"self->{emitter.attr(attr)}", rtype)
903 base_args = "(PyObject *)self"
904 if cl.builtin_base:
905 emitter.emit_base_tp_function_call(cl, "tp_clear", base_args)
906 if has_managed_dict(cl, emitter):
907 emitter.emit_line(f"PyObject_ClearManagedDict({base_args});")
908 elif cl.has_dict:
909 struct_name = cl.struct_name(emitter.names)
910 # __dict__ lives right after the struct and __weakref__ lives right after that
911 emitter.emit_gc_clear(
912 f"*((PyObject **)((char *)self + sizeof({struct_name})))", object_rprimitive
913 )
914 emitter.emit_gc_clear(
915 f"*((PyObject **)((char *)self + sizeof(PyObject *) + sizeof({struct_name})))",
916 object_rprimitive,
917 )
918 emitter.emit_line("return 0;")
919 emitter.emit_line("}")
920
921
922def generate_dealloc_for_class(

Callers 1

generate_classFunction · 0.85

Calls 8

reversedFunction · 0.85
has_managed_dictFunction · 0.85
emit_gc_clearMethod · 0.80
attrMethod · 0.80
emit_lineMethod · 0.45
struct_nameMethod · 0.45
itemsMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…