@@ -1239,35 +1239,26 @@ mod array {
1239
1239
} ,
1240
1240
} ;
1241
1241
1242
+ impl PyArray {
1243
+ const MAPPING_METHODS : PyMappingMethods = PyMappingMethods {
1244
+ length : Some ( |mapping, _vm| Ok ( Self :: mapping_downcast ( mapping) . len ( ) ) ) ,
1245
+ subscript : Some ( |mapping, needle, vm| {
1246
+ Self :: mapping_downcast ( mapping) . getitem ( needle. to_owned ( ) , vm)
1247
+ } ) ,
1248
+ ass_subscript : Some ( |mapping, needle, value, vm| {
1249
+ let zelf = Self :: mapping_downcast ( mapping) ;
1250
+ if let Some ( value) = value {
1251
+ Self :: setitem ( zelf. to_owned ( ) , needle. to_owned ( ) , value, vm)
1252
+ } else {
1253
+ Self :: delitem ( zelf. to_owned ( ) , needle. to_owned ( ) , vm)
1254
+ }
1255
+ } ) ,
1256
+ } ;
1257
+ }
1258
+
1242
1259
impl AsMapping for PyArray {
1243
1260
fn as_mapping ( _zelf : & PyObjectView < Self > , _vm : & VirtualMachine ) -> PyMappingMethods {
1244
- PyMappingMethods {
1245
- length : Some ( Self :: length) ,
1246
- subscript : Some ( Self :: subscript) ,
1247
- ass_subscript : Some ( Self :: ass_subscript) ,
1248
- }
1249
- }
1250
-
1251
- fn length ( zelf : PyObjectRef , vm : & VirtualMachine ) -> PyResult < usize > {
1252
- Self :: downcast_ref ( & zelf, vm) . map ( |zelf| Ok ( zelf. len ( ) ) ) ?
1253
- }
1254
-
1255
- fn subscript ( zelf : PyObjectRef , needle : PyObjectRef , vm : & VirtualMachine ) -> PyResult {
1256
- Self :: downcast_ref ( & zelf, vm) . map ( |zelf| zelf. getitem ( needle, vm) ) ?
1257
- }
1258
-
1259
- fn ass_subscript (
1260
- zelf : PyObjectRef ,
1261
- needle : PyObjectRef ,
1262
- value : Option < PyObjectRef > ,
1263
- vm : & VirtualMachine ,
1264
- ) -> PyResult < ( ) > {
1265
- match value {
1266
- Some ( value) => {
1267
- Self :: downcast ( zelf, vm) . map ( |zelf| Self :: setitem ( zelf, needle, value, vm) ) ?
1268
- }
1269
- None => Self :: downcast ( zelf, vm) . map ( |zelf| Self :: delitem ( zelf, needle, vm) ) ?,
1270
- }
1261
+ Self :: MAPPING_METHODS
1271
1262
}
1272
1263
}
1273
1264
0 commit comments