@@ -11,7 +11,7 @@ use super::objbool;
11
11
use super :: objbyteinner;
12
12
use super :: objint:: PyIntRef ;
13
13
use super :: objiter;
14
- use super :: objsequence:: { get_item, SequenceIndex } ;
14
+ use super :: objsequence:: { get_item, get_pos , get_slice_range , SequenceIndex } ;
15
15
use super :: objslice:: PySliceRef ;
16
16
use super :: objtype:: PyClassRef ;
17
17
use crate :: function:: OptionalArg ;
@@ -62,51 +62,6 @@ impl PyList {
62
62
self . elements . write ( ) . unwrap ( )
63
63
}
64
64
65
- fn get_pos ( p : i32 , len : usize ) -> Option < usize > {
66
- // convert a (potentially negative) positon into a real index
67
- if p < 0 {
68
- if -p as usize > len {
69
- None
70
- } else {
71
- Some ( len - ( ( -p) as usize ) )
72
- }
73
- } else if p as usize >= len {
74
- None
75
- } else {
76
- Some ( p as usize )
77
- }
78
- }
79
-
80
- fn get_slice_pos ( slice_pos : & BigInt , len : usize ) -> usize {
81
- if let Some ( pos) = slice_pos. to_i32 ( ) {
82
- if let Some ( index) = PyList :: get_pos ( pos, len) {
83
- // within bounds
84
- return index;
85
- }
86
- }
87
-
88
- if slice_pos. is_negative ( ) {
89
- // slice past start bound, round to start
90
- 0
91
- } else {
92
- // slice past end bound, round to end
93
- len
94
- }
95
- }
96
-
97
- fn get_slice_range ( start : & Option < BigInt > , stop : & Option < BigInt > , len : usize ) -> Range < usize > {
98
- let start = start
99
- . as_ref ( )
100
- . map ( |x| PyList :: get_slice_pos ( x, len) )
101
- . unwrap_or ( 0 ) ;
102
- let stop = stop
103
- . as_ref ( )
104
- . map ( |x| PyList :: get_slice_pos ( x, len) )
105
- . unwrap_or_else ( || len) ;
106
-
107
- start..stop
108
- }
109
-
110
65
pub ( crate ) fn get_byte_inner (
111
66
& self ,
112
67
vm : & VirtualMachine ,
@@ -273,9 +228,9 @@ impl PyList {
273
228
}
274
229
}
275
230
276
- fn setindex ( & self , index : i32 , value : PyObjectRef , vm : & VirtualMachine ) -> PyResult {
231
+ fn setindex ( & self , index : isize , value : PyObjectRef , vm : & VirtualMachine ) -> PyResult {
277
232
let mut elements = self . borrow_elements_mut ( ) ;
278
- if let Some ( pos_index) = PyList :: get_pos ( index, elements. len ( ) ) {
233
+ if let Some ( pos_index) = get_pos ( index, elements. len ( ) ) {
279
234
elements[ pos_index] = value;
280
235
Ok ( vm. get_none ( ) )
281
236
} else {
@@ -297,16 +252,16 @@ impl PyList {
297
252
if step. is_zero ( ) {
298
253
Err ( vm. new_value_error ( "slice step cannot be zero" . to_owned ( ) ) )
299
254
} else if step. is_positive ( ) {
300
- let range = PyList :: get_slice_range ( & start, & stop, elements. len ( ) ) ;
255
+ let range = get_slice_range ( & start, & stop, elements. len ( ) ) ;
301
256
if range. start < range. end {
302
- match step. to_i32 ( ) {
257
+ match step. to_isize ( ) {
303
258
Some ( 1 ) => PyList :: _set_slice ( elements, range, items, vm) ,
304
259
Some ( num) => {
305
260
// assign to extended slice
306
261
PyList :: _set_stepped_slice ( elements, range, num as usize , items, vm)
307
262
}
308
263
None => {
309
- // not sure how this is reached, step too big for i32 ?
264
+ // not sure how this is reached, step too big for isize ?
310
265
// then step is bigger than the than len of the list, no question
311
266
#[ allow( clippy:: range_plus_one) ]
312
267
PyList :: _set_stepped_slice (
@@ -339,13 +294,13 @@ impl PyList {
339
294
x + 1
340
295
}
341
296
} ) ;
342
- let range = PyList :: get_slice_range ( & stop, & start, elements. len ( ) ) ;
343
- match ( -step) . to_i32 ( ) {
297
+ let range = get_slice_range ( & stop, & start, elements. len ( ) ) ;
298
+ match ( -step) . to_isize ( ) {
344
299
Some ( num) => {
345
300
PyList :: _set_stepped_slice_reverse ( elements, range, num as usize , items, vm)
346
301
}
347
302
None => {
348
- // not sure how this is reached, step too big for i32 ?
303
+ // not sure how this is reached, step too big for isize ?
349
304
// then step is bigger than the than len of the list no question
350
305
PyList :: _set_stepped_slice_reverse (
351
306
elements,
@@ -638,9 +593,9 @@ impl PyList {
638
593
}
639
594
}
640
595
641
- fn delindex ( & self , index : i32 , vm : & VirtualMachine ) -> PyResult < ( ) > {
596
+ fn delindex ( & self , index : isize , vm : & VirtualMachine ) -> PyResult < ( ) > {
642
597
let mut elements = self . borrow_elements_mut ( ) ;
643
- if let Some ( pos_index) = PyList :: get_pos ( index, elements. len ( ) ) {
598
+ if let Some ( pos_index) = get_pos ( index, elements. len ( ) ) {
644
599
elements. remove ( pos_index) ;
645
600
Ok ( ( ) )
646
601
} else {
@@ -657,10 +612,10 @@ impl PyList {
657
612
if step. is_zero ( ) {
658
613
Err ( vm. new_value_error ( "slice step cannot be zero" . to_owned ( ) ) )
659
614
} else if step. is_positive ( ) {
660
- let range = PyList :: get_slice_range ( & start, & stop, elements. len ( ) ) ;
615
+ let range = get_slice_range ( & start, & stop, elements. len ( ) ) ;
661
616
if range. start < range. end {
662
617
#[ allow( clippy:: range_plus_one) ]
663
- match step. to_i32 ( ) {
618
+ match step. to_isize ( ) {
664
619
Some ( 1 ) => {
665
620
PyList :: _del_slice ( elements, range) ;
666
621
Ok ( ( ) )
@@ -695,9 +650,9 @@ impl PyList {
695
650
x + 1
696
651
}
697
652
} ) ;
698
- let range = PyList :: get_slice_range ( & stop, & start, elements. len ( ) ) ;
653
+ let range = get_slice_range ( & stop, & start, elements. len ( ) ) ;
699
654
if range. start < range. end {
700
- match ( -step) . to_i32 ( ) {
655
+ match ( -step) . to_isize ( ) {
701
656
Some ( 1 ) => {
702
657
PyList :: _del_slice ( elements, range) ;
703
658
Ok ( ( ) )
0 commit comments