Skip to content

Commit 2fc90e1

Browse files
committed
Fix error messages for index overflows
1 parent 806d4bd commit 2fc90e1

File tree

3 files changed

+8
-12
lines changed

3 files changed

+8
-12
lines changed

Lib/test/test_bytes.py

-2
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,6 @@ def test_copy(self):
5454
self.assertEqual(a, b)
5555
self.assertEqual(type(a), type(b))
5656

57-
# TODO: RUSTPYTHON
58-
@unittest.expectedFailure
5957
def test_empty_sequence(self):
6058
b = self.type2test()
6159
self.assertEqual(len(b), 0)

tests/snippets/index_overflow.py

+2-6
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,8 @@
44
def expect_cannot_fit_index_error(s, index):
55
try:
66
s[index]
7-
except IndexError:
8-
pass
9-
# TODO: Replace current except block with commented
10-
# after solving https://github.com/RustPython/RustPython/issues/322
11-
# except IndexError as error:
12-
# assert str(error) == "cannot fit 'int' into an index-sized integer"
7+
except IndexError as error:
8+
assert str(error) == "cannot fit 'int' into an index-sized integer"
139
else:
1410
assert False
1511

vm/src/obj/objsequence.rs

+6-4
Original file line numberDiff line numberDiff line change
@@ -136,10 +136,12 @@ pub enum SequenceIndex {
136136
impl TryFromObject for SequenceIndex {
137137
fn try_from_object(vm: &VirtualMachine, obj: PyObjectRef) -> PyResult<Self> {
138138
match_class!(match obj {
139-
i @ PyInt => Ok(SequenceIndex::Int(isize::try_from_object(
140-
vm,
141-
i.into_object()
142-
)?)),
139+
i @ PyInt => i
140+
.as_bigint()
141+
.to_isize()
142+
.map(SequenceIndex::Int)
143+
.ok_or_else(|| vm
144+
.new_index_error("cannot fit 'int' into an index-sized integer".to_owned())),
143145
s @ PySlice => Ok(SequenceIndex::Slice(s)),
144146
obj => Err(vm.new_type_error(format!(
145147
"sequence indices be integers or slices, not {}",

0 commit comments

Comments
 (0)