(
&self,
needle: PyObjectRef,
value: PyObjectRef,
vm: &VirtualMachine,
)
| 912 | #[pyclass] |
| 913 | impl Py<PyMemoryView> { |
| 914 | fn __setitem__( |
| 915 | &self, |
| 916 | needle: PyObjectRef, |
| 917 | value: PyObjectRef, |
| 918 | vm: &VirtualMachine, |
| 919 | ) -> PyResult<()> { |
| 920 | self.try_not_released(vm)?; |
| 921 | if self.desc.readonly { |
| 922 | return Err(vm.new_type_error("cannot modify read-only memory")); |
| 923 | } |
| 924 | if value.is(&vm.ctx.none) { |
| 925 | return Err(vm.new_type_error("cannot delete memory")); |
| 926 | } |
| 927 | |
| 928 | if self.desc.ndim() == 0 { |
| 929 | // TODO: merge branches when we got conditional if let |
| 930 | if needle.is(&vm.ctx.ellipsis) { |
| 931 | return self.pack_single(0, value, vm); |
| 932 | } else if let Some(tuple) = needle.downcast_ref::<PyTuple>() |
| 933 | && tuple.is_empty() |
| 934 | { |
| 935 | return self.pack_single(0, value, vm); |
| 936 | } |
| 937 | return Err(vm.new_type_error("invalid indexing of 0-dim memory")); |
| 938 | } |
| 939 | match SubscriptNeedle::try_from_object(vm, needle)? { |
| 940 | SubscriptNeedle::Index(i) => self.setitem_by_idx(i, value, vm), |
| 941 | SubscriptNeedle::Slice(slice) => self.setitem_by_slice(&slice, value, vm), |
| 942 | SubscriptNeedle::MultiIndex(indices) => self.setitem_by_multi_idx(&indices, value, vm), |
| 943 | } |
| 944 | } |
| 945 | |
| 946 | #[pymethod] |
| 947 | fn __reduce_ex__(&self, _proto: usize, vm: &VirtualMachine) -> PyResult { |
nothing calls this directly
no test coverage detected