@@ -113,7 +113,7 @@ impl<T: Any + 'static> std::ops::DerefMut for TypeDataRefMut<'_, T> {
113113#[ macro_export]
114114macro_rules! atomic_func {
115115 ( $x: expr) => {
116- crossbeam_utils :: atomic :: AtomicCell :: new ( Some ( $x) )
116+ Some ( $x)
117117 } ;
118118}
119119
@@ -385,6 +385,59 @@ fn setitem_wrapper<K: ToPyObject>(
385385 . map ( drop)
386386}
387387
388+ #[ inline( never) ]
389+ fn mapping_setitem_wrapper (
390+ mapping : PyMapping < ' _ > ,
391+ key : & PyObject ,
392+ value : Option < PyObjectRef > ,
393+ vm : & VirtualMachine ,
394+ ) -> PyResult < ( ) > {
395+ setitem_wrapper ( mapping. obj , key, value, vm)
396+ }
397+
398+ #[ inline( never) ]
399+ fn mapping_getitem_wrapper (
400+ mapping : PyMapping < ' _ > ,
401+ key : & PyObject ,
402+ vm : & VirtualMachine ,
403+ ) -> PyResult {
404+ getitem_wrapper ( mapping. obj , key, vm)
405+ }
406+
407+ #[ inline( never) ]
408+ fn mapping_len_wrapper ( mapping : PyMapping < ' _ > , vm : & VirtualMachine ) -> PyResult < usize > {
409+ len_wrapper ( mapping. obj , vm)
410+ }
411+
412+ #[ inline( never) ]
413+ fn sequence_len_wrapper ( seq : PySequence < ' _ > , vm : & VirtualMachine ) -> PyResult < usize > {
414+ len_wrapper ( seq. obj , vm)
415+ }
416+
417+ #[ inline( never) ]
418+ fn sequence_getitem_wrapper ( seq : PySequence < ' _ > , i : isize , vm : & VirtualMachine ) -> PyResult {
419+ getitem_wrapper ( seq. obj , i, vm)
420+ }
421+
422+ #[ inline( never) ]
423+ fn sequence_setitem_wrapper (
424+ seq : PySequence < ' _ > ,
425+ i : isize ,
426+ value : Option < PyObjectRef > ,
427+ vm : & VirtualMachine ,
428+ ) -> PyResult < ( ) > {
429+ setitem_wrapper ( seq. obj , i, value, vm)
430+ }
431+
432+ #[ inline( never) ]
433+ fn sequence_contains_wrapper (
434+ seq : PySequence < ' _ > ,
435+ needle : & PyObject ,
436+ vm : & VirtualMachine ,
437+ ) -> PyResult < bool > {
438+ contains_wrapper ( seq. obj , needle, vm)
439+ }
440+
388441fn repr_wrapper ( zelf : & PyObject , vm : & VirtualMachine ) -> PyResult < PyRef < PyStr > > {
389442 let ret = vm. call_special_method ( zelf, identifier ! ( vm, __repr__) , ( ) ) ?;
390443 ret. downcast :: < PyStr > ( ) . map_err ( |obj| {
@@ -1139,12 +1192,7 @@ impl PyType {
11391192
11401193 // === Sequence slots ===
11411194 SlotAccessor :: SqLength => {
1142- update_sub_slot ! (
1143- as_sequence,
1144- length,
1145- |seq, vm| len_wrapper( seq. obj, vm) ,
1146- SeqLength
1147- )
1195+ update_sub_slot ! ( as_sequence, length, sequence_len_wrapper, SeqLength )
11481196 }
11491197 SlotAccessor :: SqConcat | SlotAccessor :: SqInplaceConcat => {
11501198 // Sequence concat uses sq_concat slot - no generic wrapper needed
@@ -1161,52 +1209,32 @@ impl PyType {
11611209 }
11621210 }
11631211 SlotAccessor :: SqItem => {
1164- update_sub_slot ! (
1165- as_sequence,
1166- item,
1167- |seq, i, vm| getitem_wrapper( seq. obj, i, vm) ,
1168- SeqItem
1169- )
1212+ update_sub_slot ! ( as_sequence, item, sequence_getitem_wrapper, SeqItem )
11701213 }
11711214 SlotAccessor :: SqAssItem => {
1172- update_sub_slot ! (
1173- as_sequence,
1174- ass_item,
1175- |seq, i, value, vm| setitem_wrapper( seq. obj, i, value, vm) ,
1176- SeqAssItem
1177- )
1215+ update_sub_slot ! ( as_sequence, ass_item, sequence_setitem_wrapper, SeqAssItem )
11781216 }
11791217 SlotAccessor :: SqContains => {
11801218 update_sub_slot ! (
11811219 as_sequence,
11821220 contains,
1183- |seq , needle , vm| contains_wrapper ( seq . obj , needle , vm ) ,
1221+ sequence_contains_wrapper ,
11841222 SeqContains
11851223 )
11861224 }
11871225
11881226 // === Mapping slots ===
11891227 SlotAccessor :: MpLength => {
1190- update_sub_slot ! (
1191- as_mapping,
1192- length,
1193- |mapping, vm| len_wrapper( mapping. obj, vm) ,
1194- MapLength
1195- )
1228+ update_sub_slot ! ( as_mapping, length, mapping_len_wrapper, MapLength )
11961229 }
11971230 SlotAccessor :: MpSubscript => {
1198- update_sub_slot ! (
1199- as_mapping,
1200- subscript,
1201- |mapping, key, vm| getitem_wrapper( mapping. obj, key, vm) ,
1202- MapSubscript
1203- )
1231+ update_sub_slot ! ( as_mapping, subscript, mapping_getitem_wrapper, MapSubscript )
12041232 }
12051233 SlotAccessor :: MpAssSubscript => {
12061234 update_sub_slot ! (
12071235 as_mapping,
12081236 ass_subscript,
1209- |mapping , key , value , vm| setitem_wrapper ( mapping . obj , key , value , vm ) ,
1237+ mapping_setitem_wrapper ,
12101238 MapAssSubscript
12111239 )
12121240 }
0 commit comments