Skip to content

Commit 9757c82

Browse files
authored
Setitem error have type name (RustPython#3770)
1 parent 43d811c commit 9757c82

File tree

10 files changed

+25
-33
lines changed

10 files changed

+25
-33
lines changed

Lib/test/list_tests.py

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,16 +32,12 @@ def test_init(self):
3232
self.assertNotEqual(id(a), id(b))
3333
self.assertEqual(a, b)
3434

35-
# TODO: RUSTPYTHON
36-
@unittest.expectedFailure
3735
def test_getitem_error(self):
3836
a = []
3937
msg = "list indices must be integers or slices"
4038
with self.assertRaisesRegex(TypeError, msg):
4139
a['a']
4240

43-
# TODO: RUSTPYTHON
44-
@unittest.expectedFailure
4541
def test_setitem_error(self):
4642
a = []
4743
msg = "list indices must be integers or slices"
@@ -106,8 +102,6 @@ def test_reversed(self):
106102
# Bug 3689: make sure list-reversed-iterator doesn't have __len__
107103
self.assertRaises(TypeError, len, reversed([1,2,3]))
108104

109-
# TODO: RUSTPYTHON
110-
@unittest.expectedFailure
111105
def test_setitem(self):
112106
a = self.type2test([0, 1])
113107
a[0] = 0

Lib/test/test_bytes.py

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1183,16 +1183,12 @@ class BufferBlocked(bytearray):
11831183
class ByteArrayTest(BaseBytesTest, unittest.TestCase):
11841184
type2test = bytearray
11851185

1186-
# TODO: RUSTPYTHON
1187-
@unittest.expectedFailure
11881186
def test_getitem_error(self):
11891187
b = bytearray(b'python')
11901188
msg = "bytearray indices must be integers or slices"
11911189
with self.assertRaisesRegex(TypeError, msg):
11921190
b['a']
11931191

1194-
# TODO: RUSTPYTHON
1195-
@unittest.expectedFailure
11961192
def test_setitem_error(self):
11971193
b = bytearray(b'python')
11981194
msg = "bytearray indices must be integers or slices"

Lib/test/test_tuple.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,6 @@
1818
class TupleTest(seq_tests.CommonTest):
1919
type2test = tuple
2020

21-
# TODO: RUSTPYTHON
22-
@unittest.expectedFailure
2321
def test_getitem_error(self):
2422
t = ()
2523
msg = "tuple indices must be integers or slices"

stdlib/src/array.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ mod array {
1717
PyListRef, PyStr, PyStrRef, PyTupleRef, PyTypeRef,
1818
},
1919
class_or_notimplemented,
20-
convert::{ToPyObject, ToPyResult, TryFromBorrowedObject, TryFromObject},
20+
convert::{ToPyObject, ToPyResult, TryFromObject},
2121
function::{ArgBytesLike, ArgIntoFloat, ArgIterable, OptionalArg, PyComparisonValue},
2222
protocol::{
2323
BufferDescriptor, BufferMethods, BufferResizeGuard, PyBuffer, PyIterReturn,
@@ -942,7 +942,7 @@ mod array {
942942
}
943943

944944
fn _getitem(&self, needle: &PyObject, vm: &VirtualMachine) -> PyResult {
945-
match SequenceIndex::try_from_borrowed_object(vm, needle)? {
945+
match SequenceIndex::try_from_borrowed_object(vm, needle, "array")? {
946946
SequenceIndex::Int(i) => self.read().getitem_by_index(i, vm),
947947
SequenceIndex::Slice(slice) => self.read().getitem_by_slice(slice, vm),
948948
}
@@ -959,7 +959,7 @@ mod array {
959959
value: PyObjectRef,
960960
vm: &VirtualMachine,
961961
) -> PyResult<()> {
962-
match SequenceIndex::try_from_borrowed_object(vm, needle)? {
962+
match SequenceIndex::try_from_borrowed_object(vm, needle, "array")? {
963963
SequenceIndex::Int(i) => zelf.write().setitem_by_index(i, value, vm),
964964
SequenceIndex::Slice(slice) => {
965965
let cloned;
@@ -1001,7 +1001,7 @@ mod array {
10011001
}
10021002

10031003
fn _delitem(&self, needle: &PyObject, vm: &VirtualMachine) -> PyResult<()> {
1004-
match SequenceIndex::try_from_borrowed_object(vm, needle)? {
1004+
match SequenceIndex::try_from_borrowed_object(vm, needle, "array")? {
10051005
SequenceIndex::Int(i) => self.try_resizable(vm)?.delitem_by_index(i, vm),
10061006
SequenceIndex::Slice(slice) => self.try_resizable(vm)?.delitem_by_slice(slice, vm),
10071007
}

vm/src/builtins/bytearray.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,8 @@ use crate::{
3232
AsBuffer, AsMapping, AsSequence, Callable, Comparable, Constructor, Hashable, Initializer,
3333
IterNext, IterNextIterable, Iterable, PyComparisonOp, Unconstructible, Unhashable,
3434
},
35-
AsObject, Context, Py, PyObject, PyObjectRef, PyPayload, PyRef, PyResult,
36-
TryFromBorrowedObject, TryFromObject, VirtualMachine,
35+
AsObject, Context, Py, PyObject, PyObjectRef, PyPayload, PyRef, PyResult, TryFromObject,
36+
VirtualMachine,
3737
};
3838
use bstr::ByteSlice;
3939
use std::mem::size_of;
@@ -169,7 +169,7 @@ impl PyByteArray {
169169
value: PyObjectRef,
170170
vm: &VirtualMachine,
171171
) -> PyResult<()> {
172-
match SequenceIndex::try_from_borrowed_object(vm, needle)? {
172+
match SequenceIndex::try_from_borrowed_object(vm, needle, "bytearray")? {
173173
SequenceIndex::Int(i) => zelf._setitem_by_index(i, value, vm),
174174
SequenceIndex::Slice(slice) => {
175175
let items = if zelf.is(&value) {
@@ -206,7 +206,7 @@ impl PyByteArray {
206206
}
207207

208208
fn _getitem(&self, needle: &PyObject, vm: &VirtualMachine) -> PyResult {
209-
match SequenceIndex::try_from_borrowed_object(vm, needle)? {
209+
match SequenceIndex::try_from_borrowed_object(vm, needle, "bytearray")? {
210210
SequenceIndex::Int(i) => self
211211
.borrow_buf()
212212
.get_item_by_index(vm, i)
@@ -224,7 +224,7 @@ impl PyByteArray {
224224
}
225225

226226
pub fn _delitem(&self, needle: &PyObject, vm: &VirtualMachine) -> PyResult<()> {
227-
match SequenceIndex::try_from_borrowed_object(vm, needle)? {
227+
match SequenceIndex::try_from_borrowed_object(vm, needle, "bytearray")? {
228228
SequenceIndex::Int(i) => self.try_resizable(vm)?.elements.del_item_by_index(vm, i),
229229
SequenceIndex::Slice(slice) => {
230230
// TODO: delete 0 elements don't need resizable

vm/src/builtins/bytes.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,7 @@ impl PyBytes {
167167
}
168168

169169
fn _getitem(&self, needle: &PyObject, vm: &VirtualMachine) -> PyResult {
170-
match SequenceIndex::try_from_borrowed_object(vm, needle)? {
170+
match SequenceIndex::try_from_borrowed_object(vm, needle, "bytes")? {
171171
SequenceIndex::Int(i) => self
172172
.inner
173173
.elements

vm/src/builtins/list.rs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ use super::{PositionIterInternal, PyGenericAlias, PyTupleRef, PyType, PyTypeRef}
22
use crate::common::lock::{
33
PyMappedRwLockReadGuard, PyMutex, PyRwLock, PyRwLockReadGuard, PyRwLockWriteGuard,
44
};
5-
use crate::TryFromBorrowedObject;
65
use crate::{
76
class::PyClassImpl,
87
convert::ToPyObject,
@@ -197,7 +196,7 @@ impl PyList {
197196
}
198197

199198
fn _getitem(&self, needle: &PyObject, vm: &VirtualMachine) -> PyResult {
200-
match SequenceIndex::try_from_borrowed_object(vm, needle)? {
199+
match SequenceIndex::try_from_borrowed_object(vm, needle, "list")? {
201200
SequenceIndex::Int(i) => self.borrow_vec().get_item_by_index(vm, i),
202201
SequenceIndex::Slice(slice) => self
203202
.borrow_vec()
@@ -212,7 +211,7 @@ impl PyList {
212211
}
213212

214213
fn _setitem(&self, needle: &PyObject, value: PyObjectRef, vm: &VirtualMachine) -> PyResult<()> {
215-
match SequenceIndex::try_from_borrowed_object(vm, needle)? {
214+
match SequenceIndex::try_from_borrowed_object(vm, needle, "list")? {
216215
SequenceIndex::Int(index) => self.borrow_vec_mut().set_item_by_index(vm, index, value),
217216
SequenceIndex::Slice(slice) => {
218217
let sec = extract_cloned(&*value, Ok, vm)?;
@@ -318,7 +317,7 @@ impl PyList {
318317
}
319318

320319
fn _delitem(&self, needle: &PyObject, vm: &VirtualMachine) -> PyResult<()> {
321-
match SequenceIndex::try_from_borrowed_object(vm, needle)? {
320+
match SequenceIndex::try_from_borrowed_object(vm, needle, "list")? {
322321
SequenceIndex::Int(i) => self.borrow_vec_mut().del_item_by_index(vm, i),
323322
SequenceIndex::Slice(slice) => self.borrow_vec_mut().del_item_by_slice(vm, slice),
324323
}

vm/src/builtins/str.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -442,7 +442,7 @@ impl PyStr {
442442
}
443443

444444
fn _getitem(&self, needle: &PyObject, vm: &VirtualMachine) -> PyResult {
445-
match SequenceIndex::try_from_borrowed_object(vm, needle)? {
445+
match SequenceIndex::try_from_borrowed_object(vm, needle, "str")? {
446446
SequenceIndex::Int(i) => self.get_item_by_index(vm, i).map(|x| x.to_string()),
447447
SequenceIndex::Slice(slice) => self.get_item_by_slice(vm, slice),
448448
}

vm/src/builtins/tuple.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ use super::{PositionIterInternal, PyGenericAlias, PyType, PyTypeRef};
22
use crate::common::{hash::PyHash, lock::PyMutex};
33
use crate::{
44
class::PyClassImpl,
5-
convert::{ToPyObject, TransmuteFromObject, TryFromBorrowedObject},
5+
convert::{ToPyObject, TransmuteFromObject},
66
function::{OptionalArg, PyArithmeticValue, PyComparisonValue},
77
protocol::{PyIterReturn, PyMappingMethods, PySequenceMethods},
88
recursion::ReprGuard,
@@ -262,7 +262,7 @@ impl PyTuple {
262262
}
263263

264264
fn _getitem(&self, needle: &PyObject, vm: &VirtualMachine) -> PyResult {
265-
match SequenceIndex::try_from_borrowed_object(vm, needle)? {
265+
match SequenceIndex::try_from_borrowed_object(vm, needle, "tuple")? {
266266
SequenceIndex::Int(i) => self.elements.get_item_by_index(vm, i),
267267
SequenceIndex::Slice(slice) => self
268268
.elements

vm/src/sliceable.rs

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// export through slicable module, not slice.
22
use crate::{
33
builtins::{int::PyInt, slice::PySlice},
4-
AsObject, PyObject, PyResult, TryFromBorrowedObject, VirtualMachine,
4+
AsObject, PyObject, PyResult, VirtualMachine,
55
};
66
use num_traits::{Signed, ToPrimitive};
77
use std::ops::Range;
@@ -259,8 +259,12 @@ pub enum SequenceIndex {
259259
Slice(SaturatedSlice),
260260
}
261261

262-
impl TryFromBorrowedObject for SequenceIndex {
263-
fn try_from_borrowed_object(vm: &VirtualMachine, obj: &PyObject) -> PyResult<Self> {
262+
impl SequenceIndex {
263+
pub fn try_from_borrowed_object(
264+
vm: &VirtualMachine,
265+
obj: &PyObject,
266+
type_name: &str,
267+
) -> PyResult<Self> {
264268
if let Some(i) = obj.payload::<PyInt>() {
265269
// TODO: number protocol
266270
i.try_to_primitive(vm)
@@ -279,7 +283,8 @@ impl TryFromBorrowedObject for SequenceIndex {
279283
.map(Self::Int)
280284
} else {
281285
Err(vm.new_type_error(format!(
282-
"indices must be integers or slices or classes that override __index__ operator, not '{}'",
286+
"{} indices must be integers or slices or classes that override __index__ operator, not '{}'",
287+
type_name,
283288
obj.class()
284289
)))
285290
}

0 commit comments

Comments
 (0)