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

Function generate_bin_op_wrapper

mypyc/codegen/emitwrapper.py:330–359  ·  view source on GitHub ↗

Generates a wrapper for a native binary dunder method. The same wrapper that handles the forward method (e.g. __add__) also handles the corresponding reverse method (e.g. __radd__), if defined. Both arguments and the return value are PyObject *.

(cl: ClassIR, fn: FuncIR, emitter: Emitter)

Source from the content-addressed store, hash-verified

328
329
330def generate_bin_op_wrapper(cl: ClassIR, fn: FuncIR, emitter: Emitter) -> str:
331 """Generates a wrapper for a native binary dunder method.
332
333 The same wrapper that handles the forward method (e.g. __add__) also handles
334 the corresponding reverse method (e.g. __radd__), if defined.
335
336 Both arguments and the return value are PyObject *.
337 """
338 gen = WrapperGenerator(cl, emitter)
339 gen.set_target(fn)
340 if fn.name in ("__pow__", "__rpow__"):
341 gen.arg_names = ["left", "right", "mod"]
342 else:
343 gen.arg_names = ["left", "right"]
344 wrapper_name = gen.wrapper_name()
345
346 gen.emit_header()
347 if fn.name not in reverse_op_methods and fn.name in reverse_op_method_names:
348 # There's only a reverse operator method.
349 generate_bin_op_reverse_only_wrapper(fn, emitter, gen)
350 else:
351 rmethod = reverse_op_methods[fn.name]
352 fn_rev = cl.get_method(rmethod)
353 if fn_rev is None:
354 # There's only a forward operator method.
355 generate_bin_op_forward_only_wrapper(fn, emitter, gen)
356 else:
357 # There's both a forward and a reverse operator method.
358 generate_bin_op_both_wrappers(cl, fn, fn_rev, emitter, gen)
359 return wrapper_name
360
361
362def generate_bin_op_forward_only_wrapper(

Callers

nothing calls this directly

Calls 8

set_targetMethod · 0.95
wrapper_nameMethod · 0.95
emit_headerMethod · 0.95
WrapperGeneratorClass · 0.85
get_methodMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…