Process assignment like 'x, y = s', where s is a variable-length list or tuple.
(
self, target: AssignmentTargetTuple, rvalue: Value, line: int
)
| 879 | return self.coerce(rvalue, rtype, line) |
| 880 | |
| 881 | def process_sequence_assignment( |
| 882 | self, target: AssignmentTargetTuple, rvalue: Value, line: int |
| 883 | ) -> None: |
| 884 | """Process assignment like 'x, y = s', where s is a variable-length list or tuple.""" |
| 885 | # Check the length of sequence. |
| 886 | expected_len = Integer(len(target.items), c_pyssize_t_rprimitive) |
| 887 | self.builder.call_c(check_unpack_count_op, [rvalue, expected_len], line) |
| 888 | |
| 889 | # Read sequence items. |
| 890 | values = [] |
| 891 | for i in range(len(target.items)): |
| 892 | item = target.items[i] |
| 893 | index: Value |
| 894 | if is_list_rprimitive(rvalue.type): |
| 895 | index = Integer(i, c_pyssize_t_rprimitive) |
| 896 | item_value = self.primitive_op(list_get_item_unsafe_op, [rvalue, index], line) |
| 897 | elif is_tuple_rprimitive(rvalue.type): |
| 898 | index = Integer(i, c_pyssize_t_rprimitive) |
| 899 | item_value = self.call_c(tuple_get_item_unsafe_op, [rvalue, index], line) |
| 900 | else: |
| 901 | index = self.builder.load_int(i) |
| 902 | item_value = self.builder.gen_method_call( |
| 903 | rvalue, "__getitem__", [index], item.type, line |
| 904 | ) |
| 905 | values.append(item_value) |
| 906 | |
| 907 | # Assign sequence items to the target lvalues. |
| 908 | for lvalue, value in zip(target.items, values): |
| 909 | self.assign(lvalue, value, line) |
| 910 | |
| 911 | def process_iterator_tuple_assignment_helper( |
| 912 | self, litem: AssignmentTarget, ritem: Value, line: int |
no test coverage detected