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

Method emit_module_methods

mypyc/codegen/emitmodule.py:1147–1174  ·  view source on GitHub ↗

Emit module methods (the static PyMethodDef table).

(
        self, emitter: Emitter, module_name: str, module_prefix: str, module: ModuleIR
    )

Source from the content-addressed store, hash-verified

1145 emitter.emit_line("};")
1146
1147 def emit_module_methods(
1148 self, emitter: Emitter, module_name: str, module_prefix: str, module: ModuleIR
1149 ) -> None:
1150 """Emit module methods (the static PyMethodDef table)."""
1151 emitter.emit_line(f"static PyMethodDef {module_prefix}module_methods[] = {{")
1152 for fn in module.functions:
1153 if fn.class_name is not None or fn.name == TOP_LEVEL_NAME:
1154 continue
1155 # Coroutines are added to the module dict when the module is initialized.
1156 if fn.decl.is_coroutine:
1157 continue
1158 name = short_id_from_name(fn.name, fn.decl.shortname, fn.line)
1159 if is_fastcall_supported(fn, emitter.capi_version):
1160 flag = "METH_FASTCALL"
1161 else:
1162 flag = "METH_VARARGS"
1163 doc = native_function_doc_initializer(fn)
1164 emitter.emit_line(
1165 (
1166 '{{"{name}", (PyCFunction){prefix}{cname}, {flag} | METH_KEYWORDS, '
1167 "PyDoc_STR({doc}) /* docstring */}},"
1168 ).format(
1169 name=name, cname=fn.cname(emitter.names), prefix=PREFIX, flag=flag, doc=doc
1170 )
1171 )
1172 emitter.emit_line("{NULL, NULL, 0, NULL}")
1173 emitter.emit_line("};")
1174 emitter.emit_line()
1175
1176 def emit_module_def_struct(
1177 self, emitter: Emitter, module_name: str, module_prefix: str

Callers 1

generate_module_defMethod · 0.95

Calls 6

short_id_from_nameFunction · 0.90
is_fastcall_supportedFunction · 0.85
emit_lineMethod · 0.45
formatMethod · 0.45
cnameMethod · 0.45

Tested by

no test coverage detected