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

Method visit_set_element

mypyc/codegen/emitfunc.py:847–870  ·  view source on GitHub ↗
(self, op: SetElement)

Source from the content-addressed store, hash-verified

845 )
846
847 def visit_set_element(self, op: SetElement) -> None:
848 dest = self.reg(op)
849 field = op.field
850 item = self.set_element_item(op.src.type, field, self.reg(op.item))
851 if isinstance(op.src, Undef):
852 # First assignment to an undefined struct is trivial.
853 self.emit_line(f"{dest}.{field} = {item};")
854 else:
855 # In the general case create a copy of the struct with a single
856 # item modified.
857 #
858 # TODO: Can we do better if only a subset of fields are initialized?
859 # TODO: Make this less verbose in the common case
860 # TODO: Support tuples (or use RStruct for tuples)?
861 src = self.reg(op.src)
862 src_type = op.src.type
863 assert isinstance(src_type, (RStruct, RVec)), src_type
864 init_items = []
865 for n in src_type.names:
866 if n != field:
867 init_items.append(f"{src}.{n}")
868 else:
869 init_items.append(item)
870 self.emit_line(f"{dest} = ({self.ctype(src_type)}) {{ {', '.join(init_items)} }};")
871
872 def set_element_item(self, src_type: RType, field: str, item: str) -> str:
873 if field == "items" and src_type._ctype in VEC_ITEMS_C_TYPE:

Callers

nothing calls this directly

Calls 7

regMethod · 0.95
set_element_itemMethod · 0.95
emit_lineMethod · 0.95
ctypeMethod · 0.95
isinstanceFunction · 0.85
appendMethod · 0.80
joinMethod · 0.45

Tested by

no test coverage detected