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

Function generate_vtable

mypyc/codegen/emitclass.py:573–605  ·  view source on GitHub ↗
(
    entries: VTableEntries,
    vtable_name: str,
    emitter: Emitter,
    subtables: list[tuple[ClassIR, str, str]],
    shadow: bool,
)

Source from the content-addressed store, hash-verified

571
572
573def generate_vtable(
574 entries: VTableEntries,
575 vtable_name: str,
576 emitter: Emitter,
577 subtables: list[tuple[ClassIR, str, str]],
578 shadow: bool,
579) -> None:
580 emitter.emit_line(f"CPyVTableItem {vtable_name}_scratch[] = {{")
581 if subtables:
582 emitter.emit_line("/* Array of trait vtables */")
583 for trait, table, offset_table in subtables:
584 emitter.emit_line(
585 "(CPyVTableItem){}, (CPyVTableItem){}, (CPyVTableItem){},".format(
586 emitter.type_struct_name(trait), table, offset_table
587 )
588 )
589 emitter.emit_line("/* Start of real vtable */")
590
591 for entry in entries:
592 method = entry.shadow_method if shadow and entry.shadow_method else entry.method
593 emitter.emit_line(
594 "(CPyVTableItem){}{}{},".format(
595 emitter.get_group_prefix(entry.method.decl),
596 NATIVE_PREFIX,
597 method.cname(emitter.names),
598 )
599 )
600
601 # msvc doesn't allow empty arrays; maybe allowing them at all is an extension?
602 if not entries:
603 emitter.emit_line("NULL")
604 emitter.emit_line("};")
605 emitter.emit_line("memcpy({name}, {name}_scratch, sizeof({name}));".format(name=vtable_name))
606
607
608def generate_setup_for_class(

Callers 1

generate_vtablesFunction · 0.85

Calls 5

type_struct_nameMethod · 0.80
get_group_prefixMethod · 0.80
emit_lineMethod · 0.45
formatMethod · 0.45
cnameMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…