@@ -1239,35 +1239,26 @@ mod array {
12391239 } ,
12401240 } ;
12411241
1242+ impl PyArray {
1243+ const MAPPING_METHODS : PyMappingMethods = PyMappingMethods {
1244+ length : Some ( |mapping, _vm| Ok ( mapping. obj_as :: < Self > ( ) . len ( ) ) ) ,
1245+ subscript : Some ( |mapping, needle, vm| {
1246+ mapping. obj_as :: < Self > ( ) . getitem ( needle. to_owned ( ) , vm)
1247+ } ) ,
1248+ ass_subscript : Some ( |mapping, needle, value, vm| {
1249+ let zelf = mapping. obj_as :: < Self > ( ) ;
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+
12421259 impl AsMapping for PyArray {
12431260 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
12711262 }
12721263 }
12731264
0 commit comments