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

Method assign

mypyc/irbuild/builder.py:824–867  ·  view source on GitHub ↗
(self, target: Register | AssignmentTarget, rvalue_reg: Value, line: int)

Source from the content-addressed store, hash-verified

822 return self.add(GetAttr(obj, attr, line, allow_error_value=True))
823
824 def assign(self, target: Register | AssignmentTarget, rvalue_reg: Value, line: int) -> None:
825 if isinstance(target, Register):
826 self.add(Assign(target, self.coerce_rvalue(rvalue_reg, target.type, line), line))
827 elif isinstance(target, AssignmentTargetRegister):
828 rvalue_reg = self.coerce_rvalue(rvalue_reg, target.type, line)
829 self.add(Assign(target.register, rvalue_reg, line))
830 elif isinstance(target, AssignmentTargetAttr):
831 if isinstance(target.obj_type, RInstance):
832 setattr = target.obj_type.class_ir.get_method("__setattr__")
833 if setattr:
834 key = self.load_str(target.attr, line)
835 boxed_reg = self.builder.box(rvalue_reg)
836 call = MethodCall(target.obj, setattr.name, [key, boxed_reg], line)
837 self.add(call)
838 else:
839 rvalue_reg = self.coerce_rvalue(rvalue_reg, target.type, line)
840 self.add(SetAttr(target.obj, target.attr, rvalue_reg, line))
841 else:
842 key = self.load_str(target.attr, line)
843 boxed_reg = self.builder.box(rvalue_reg)
844 self.primitive_op(py_setattr_op, [target.obj, key, boxed_reg], line)
845 elif isinstance(target, AssignmentTargetIndex):
846 if isinstance(target.base.type, RVec):
847 vec_set_item(self.builder, target.base, target.index, rvalue_reg, line)
848 else:
849 target_reg2 = self.gen_method_call(
850 target.base, "__setitem__", [target.index, rvalue_reg], None, line
851 )
852 assert target_reg2 is not None, target.base.type
853 elif isinstance(target, AssignmentTargetTuple):
854 if isinstance(rvalue_reg.type, RTuple) and target.star_idx is None:
855 rtypes = rvalue_reg.type.types
856 assert len(rtypes) == len(target.items)
857 for i in range(len(rtypes)):
858 item_value = self.add(TupleGet(rvalue_reg, i, line))
859 self.assign(target.items[i], item_value, line)
860 elif (
861 is_list_rprimitive(rvalue_reg.type) or is_tuple_rprimitive(rvalue_reg.type)
862 ) and target.star_idx is None:
863 self.process_sequence_assignment(target, rvalue_reg, line)
864 else:
865 self.process_iterator_tuple_assignment(target, rvalue_reg, line)
866 else:
867 assert False, "Unsupported assignment target"
868
869 def coerce_rvalue(self, rvalue: Value, rtype: RType, line: int) -> Value:
870 if is_float_rprimitive(rtype) and is_tagged(rvalue.type):

Callers 15

spillMethod · 0.95
gen_inner_stmtsFunction · 0.45
begin_bodyMethod · 0.45
gen_conditionMethod · 0.45
begin_bodyMethod · 0.45
try_bodyMethod · 0.45
except_bodyMethod · 0.45

Calls 15

addMethod · 0.95
coerce_rvalueMethod · 0.95
load_strMethod · 0.95
primitive_opMethod · 0.95
gen_method_callMethod · 0.95
AssignClass · 0.90
MethodCallClass · 0.90
SetAttrClass · 0.90
vec_set_itemFunction · 0.90
TupleGetClass · 0.90

Tested by

no test coverage detected