@@ -133,7 +133,7 @@ pub(crate) type HashFunc = fn(PyObjectPtr, &VirtualMachine) -> PyResult<PyHash>;
133133// CallFunc = GenericMethod
134134pub ( crate ) type GetattroFunc = fn ( PyObjectRef , PyStrRef , & VirtualMachine ) -> PyResult ;
135135pub ( crate ) type SetattroFunc =
136- fn ( & PyObjectRef , PyStrRef , Option < PyObjectRef > , & VirtualMachine ) -> PyResult < ( ) > ;
136+ fn ( PyObjectPtr , PyStrRef , Option < PyObjectRef > , & VirtualMachine ) -> PyResult < ( ) > ;
137137pub ( crate ) type AsBufferFunc = fn ( PyObjectPtr , & VirtualMachine ) -> PyResult < PyBuffer > ;
138138pub ( crate ) type RichCompareFunc = fn (
139139 PyObjectPtr ,
@@ -209,17 +209,18 @@ fn getattro_wrapper(zelf: PyObjectRef, name: PyStrRef, vm: &VirtualMachine) -> P
209209}
210210
211211fn setattro_wrapper (
212- zelf : & PyObjectRef ,
212+ zelf : PyObjectPtr ,
213213 name : PyStrRef ,
214214 value : Option < PyObjectRef > ,
215215 vm : & VirtualMachine ,
216216) -> PyResult < ( ) > {
217+ let zelf = ( * zelf) . clone ( ) ;
217218 match value {
218219 Some ( value) => {
219- vm. call_special_method ( zelf. clone ( ) , "__setattr__" , ( name, value) ) ?;
220+ vm. call_special_method ( zelf, "__setattr__" , ( name, value) ) ?;
220221 }
221222 None => {
222- vm. call_special_method ( zelf. clone ( ) , "__delattr__" , ( name, ) ) ?;
223+ vm. call_special_method ( zelf, "__delattr__" , ( name, ) ) ?;
223224 }
224225 } ;
225226 Ok ( ( ) )
@@ -712,7 +713,7 @@ pub trait SetAttr: PyValue {
712713 #[ pyslot]
713714 #[ inline]
714715 fn slot_setattro (
715- obj : & PyObjectRef ,
716+ obj : PyObjectPtr ,
716717 name : PyStrRef ,
717718 value : Option < PyObjectRef > ,
718719 vm : & VirtualMachine ,
0 commit comments