Generate attribute offset row of a trait vtable.
(
trait_offset_table_name: str, emitter: Emitter, trait: ClassIR, cl: ClassIR
)
| 555 | |
| 556 | |
| 557 | def generate_offset_table( |
| 558 | trait_offset_table_name: str, emitter: Emitter, trait: ClassIR, cl: ClassIR |
| 559 | ) -> None: |
| 560 | """Generate attribute offset row of a trait vtable.""" |
| 561 | emitter.emit_line(f"size_t {trait_offset_table_name}_scratch[] = {{") |
| 562 | for attr in trait.attributes: |
| 563 | emitter.emit_line(f"offsetof({cl.struct_name(emitter.names)}, {emitter.attr(attr)}),") |
| 564 | if not trait.attributes: |
| 565 | # This is for msvc. |
| 566 | emitter.emit_line("0") |
| 567 | emitter.emit_line("};") |
| 568 | emitter.emit_line( |
| 569 | "memcpy({name}, {name}_scratch, sizeof({name}));".format(name=trait_offset_table_name) |
| 570 | ) |
| 571 | |
| 572 | |
| 573 | def generate_vtable( |
no test coverage detected
searching dependent graphs…