@@ -17,7 +17,7 @@ use crate::{
17
17
borrow:: BorrowedValue ,
18
18
lock:: { PyRwLock , PyRwLockReadGuard } ,
19
19
} ,
20
- convert:: { ToPyObject , ToPyResult } ,
20
+ convert:: ToPyResult ,
21
21
function:: { FuncArgs , KwArgs , OptionalArg , PySetterValue } ,
22
22
identifier,
23
23
protocol:: { PyIterReturn , PyMappingMethods , PyNumberMethods , PySequenceMethods } ,
@@ -816,7 +816,7 @@ impl PyType {
816
816
cell. class( ) . name( )
817
817
) )
818
818
} ) ?;
819
- cell. set ( Some ( typ. clone ( ) . to_pyobject ( vm ) ) ) ;
819
+ cell. set ( Some ( typ. clone ( ) . into ( ) ) ) ;
820
820
} ;
821
821
822
822
// avoid deadlock
@@ -844,7 +844,7 @@ impl PyType {
844
844
845
845
if let Some ( init_subclass) = typ. get_super_attr ( identifier ! ( vm, __init_subclass__) ) {
846
846
let init_subclass = vm
847
- . call_get_descriptor_specific ( init_subclass. clone ( ) , None , Some ( typ. clone ( ) . into ( ) ) )
847
+ . call_get_descriptor_specific ( & init_subclass, None , Some ( typ. clone ( ) . into ( ) ) )
848
848
. unwrap_or ( Ok ( init_subclass) ) ?;
849
849
init_subclass. call ( kwargs, vm) ?;
850
850
} ;
@@ -1008,19 +1008,17 @@ impl GetAttr for PyType {
1008
1008
1009
1009
let zelf_attr = zelf. get_attr ( name) ;
1010
1010
1011
- if let Some ( ref attr) = zelf_attr {
1011
+ if let Some ( attr) = zelf_attr {
1012
1012
let descr_get = attr. class ( ) . mro_find_map ( |cls| cls. slots . descr_get . load ( ) ) ;
1013
1013
if let Some ( descr_get) = descr_get {
1014
- return descr_get ( attr. clone ( ) , None , Some ( zelf. to_owned ( ) . into ( ) ) , vm) ;
1014
+ descr_get ( attr, None , Some ( zelf. to_owned ( ) . into ( ) ) , vm)
1015
+ } else {
1016
+ Ok ( attr)
1015
1017
}
1016
- }
1017
-
1018
- if let Some ( cls_attr) = zelf_attr {
1019
- Ok ( cls_attr)
1020
1018
} else if let Some ( attr) = mcl_attr {
1021
- vm. call_if_get_descriptor ( attr, zelf. to_owned ( ) . into ( ) )
1019
+ vm. call_if_get_descriptor ( & attr, zelf. to_owned ( ) . into ( ) )
1022
1020
} else {
1023
- return Err ( attribute_error ( zelf, name_str. as_str ( ) , vm) ) ;
1021
+ Err ( attribute_error ( zelf, name_str. as_str ( ) , vm) )
1024
1022
}
1025
1023
}
1026
1024
}
@@ -1037,7 +1035,7 @@ impl SetAttr for PyType {
1037
1035
if let Some ( attr) = zelf. get_class_attr ( attr_name) {
1038
1036
let descr_set = attr. class ( ) . mro_find_map ( |cls| cls. slots . descr_set . load ( ) ) ;
1039
1037
if let Some ( descriptor) = descr_set {
1040
- return descriptor ( attr, zelf. to_owned ( ) . into ( ) , value, vm) ;
1038
+ return descriptor ( & attr, zelf. to_owned ( ) . into ( ) , value, vm) ;
1041
1039
}
1042
1040
}
1043
1041
let assign = value. is_assign ( ) ;
@@ -1132,10 +1130,10 @@ fn find_base_dict_descr(cls: &Py<PyType>, vm: &VirtualMachine) -> Option<PyObjec
1132
1130
fn subtype_get_dict ( obj : PyObjectRef , vm : & VirtualMachine ) -> PyResult {
1133
1131
// TODO: obj.class().as_pyref() need to be supported
1134
1132
let ret = match find_base_dict_descr ( obj. class ( ) , vm) {
1135
- Some ( descr) => vm. call_get_descriptor ( descr, obj) . unwrap_or_else ( |obj | {
1133
+ Some ( descr) => vm. call_get_descriptor ( & descr, obj) . unwrap_or_else ( || {
1136
1134
Err ( vm. new_type_error ( format ! (
1137
1135
"this __dict__ descriptor does not support '{}' objects" ,
1138
- obj . class( )
1136
+ descr . class( )
1139
1137
) ) )
1140
1138
} ) ?,
1141
1139
None => object:: object_get_dict ( obj, vm) ?. into ( ) ,
@@ -1156,7 +1154,7 @@ fn subtype_set_dict(obj: PyObjectRef, value: PyObjectRef, vm: &VirtualMachine) -
1156
1154
cls. name( )
1157
1155
) )
1158
1156
} ) ?;
1159
- descr_set ( descr, obj, PySetterValue :: Assign ( value) , vm)
1157
+ descr_set ( & descr, obj, PySetterValue :: Assign ( value) , vm)
1160
1158
}
1161
1159
None => {
1162
1160
object:: object_set_dict ( obj, value. try_into_value ( vm) ?, vm) ?;
0 commit comments