@@ -15,8 +15,8 @@ use crate::slots::{AsBuffer, AsMapping, Comparable, Hashable, PyComparisonOp, Sl
15
15
use crate :: stdlib:: pystruct:: _struct:: FormatSpec ;
16
16
use crate :: utils:: Either ;
17
17
use crate :: {
18
- IdProtocol , IntoPyObject , PyClassImpl , PyComparisonValue , PyContext , PyObjectRef , PyRef ,
19
- PyResult , PyValue , TryFromBorrowedObject , TryFromObject , TypeProtocol , VirtualMachine ,
18
+ IdProtocol , IntoPyObject , PyClassDef , PyClassImpl , PyComparisonValue , PyContext , PyObjectRef ,
19
+ PyRef , PyResult , PyValue , TryFromBorrowedObject , TryFromObject , TypeProtocol , VirtualMachine ,
20
20
} ;
21
21
use crossbeam_utils:: atomic:: AtomicCell ;
22
22
use itertools:: Itertools ;
@@ -345,10 +345,10 @@ impl PyMemoryView {
345
345
}
346
346
347
347
#[ pymethod( magic) ]
348
- fn getitem ( zelf : PyRef < Self > , needle : SequenceIndex , vm : & VirtualMachine ) -> PyResult {
348
+ fn getitem ( zelf : PyRef < Self > , needle : PyObjectRef , vm : & VirtualMachine ) -> PyResult {
349
349
zelf. try_not_released ( vm) ?;
350
- match needle {
351
- SequenceIndex :: Int ( i ) => Self :: getitem_by_idx ( zelf, i , vm) ,
350
+ match SequenceIndex :: try_from_object_for ( vm , needle, Self :: NAME ) ? {
351
+ SequenceIndex :: Int ( index ) => Self :: getitem_by_idx ( zelf, index , vm) ,
352
352
SequenceIndex :: Slice ( slice) => Self :: getitem_by_slice ( zelf, slice, vm) ,
353
353
}
354
354
}
@@ -462,16 +462,16 @@ impl PyMemoryView {
462
462
#[ pymethod( magic) ]
463
463
fn setitem (
464
464
zelf : PyRef < Self > ,
465
- needle : SequenceIndex ,
465
+ needle : PyObjectRef ,
466
466
value : PyObjectRef ,
467
467
vm : & VirtualMachine ,
468
468
) -> PyResult < ( ) > {
469
469
zelf. try_not_released ( vm) ?;
470
470
if zelf. buffer . options . readonly {
471
471
return Err ( vm. new_type_error ( "cannot modify read-only memory" . to_owned ( ) ) ) ;
472
472
}
473
- match needle {
474
- SequenceIndex :: Int ( i ) => Self :: setitem_by_idx ( zelf, i , value, vm) ,
473
+ match SequenceIndex :: try_from_object_for ( vm , needle, Self :: NAME ) ? {
474
+ SequenceIndex :: Int ( index ) => Self :: setitem_by_idx ( zelf, index , value, vm) ,
475
475
SequenceIndex :: Slice ( slice) => Self :: setitem_by_slice ( zelf, slice, value, vm) ,
476
476
}
477
477
}
@@ -753,8 +753,7 @@ impl AsMapping for PyMemoryView {
753
753
754
754
#[ inline]
755
755
fn subscript ( zelf : PyObjectRef , needle : PyObjectRef , vm : & VirtualMachine ) -> PyResult {
756
- Self :: downcast ( zelf, vm)
757
- . map ( |zelf| Self :: getitem ( zelf, SequenceIndex :: try_from_object ( vm, needle) ?, vm) ) ?
756
+ Self :: downcast ( zelf, vm) . map ( |zelf| Self :: getitem ( zelf, needle, vm) ) ?
758
757
}
759
758
760
759
#[ inline]
@@ -764,9 +763,7 @@ impl AsMapping for PyMemoryView {
764
763
value : PyObjectRef ,
765
764
vm : & VirtualMachine ,
766
765
) -> PyResult < ( ) > {
767
- Self :: downcast ( zelf, vm) . map ( |zelf| {
768
- Self :: setitem ( zelf, SequenceIndex :: try_from_object ( vm, needle) ?, value, vm)
769
- } ) ?
766
+ Self :: downcast ( zelf, vm) . map ( |zelf| Self :: setitem ( zelf, needle, value, vm) ) ?
770
767
}
771
768
}
772
769
0 commit comments