33
44use crate :: {
55 builtins:: {
6- pystr:: { AsPyStr , IntoPyStrRef } ,
7- PyBytes , PyDict , PyDictRef , PyGenericAlias , PyInt , PyStr , PyStrRef , PyTupleRef , PyTypeRef ,
6+ pystr:: AsPyStr , PyBytes , PyDict , PyDictRef , PyGenericAlias , PyInt , PyStr , PyStrRef ,
7+ PyTupleRef , PyTypeRef ,
88 } ,
99 bytesinner:: ByteInnerNewOptions ,
1010 common:: { hash:: PyHash , str:: to_ascii} ,
@@ -102,7 +102,7 @@ impl PyObject {
102102 pub fn call_set_attr (
103103 & self ,
104104 vm : & VirtualMachine ,
105- attr_name : PyStrRef ,
105+ attr_name : & Py < PyStr > ,
106106 attr_value : PySetterValue ,
107107 ) -> PyResult < ( ) > {
108108 let setattro = {
@@ -126,28 +126,28 @@ impl PyObject {
126126 setattro ( self , attr_name, attr_value, vm)
127127 }
128128
129- pub fn set_attr (
129+ pub fn set_attr < ' a > (
130130 & self ,
131- attr_name : impl IntoPyStrRef ,
131+ attr_name : impl AsPyStr < ' a > ,
132132 attr_value : impl Into < PyObjectRef > ,
133133 vm : & VirtualMachine ,
134134 ) -> PyResult < ( ) > {
135- let attr_name = attr_name. into_pystr_ref ( vm ) ;
135+ let attr_name = attr_name. as_pystr ( & vm . ctx ) ;
136136 self . call_set_attr ( vm, attr_name, PySetterValue :: Assign ( attr_value. into ( ) ) )
137137 }
138138
139139 // int PyObject_GenericSetAttr(PyObject *o, PyObject *name, PyObject *value)
140140 #[ cfg_attr( feature = "flame-it" , flame) ]
141141 pub fn generic_setattr (
142142 & self ,
143- attr_name : PyStrRef , // TODO: Py<PyStr>
143+ attr_name : & Py < PyStr > ,
144144 value : PySetterValue ,
145145 vm : & VirtualMachine ,
146146 ) -> PyResult < ( ) > {
147147 vm_trace ! ( "object.__setattr__({:?}, {}, {:?})" , self , attr_name, value) ;
148148 if let Some ( attr) = vm
149149 . ctx
150- . interned_str ( & * attr_name)
150+ . interned_str ( attr_name)
151151 . and_then ( |attr_name| self . get_class_attr ( attr_name) )
152152 {
153153 let descr_set = attr. class ( ) . mro_find_map ( |cls| cls. slots . descr_set . load ( ) ) ;
@@ -158,9 +158,9 @@ impl PyObject {
158158
159159 if let Some ( dict) = self . dict ( ) {
160160 if let PySetterValue :: Assign ( value) = value {
161- dict. set_item ( & * attr_name, value, vm) ?;
161+ dict. set_item ( attr_name, value, vm) ?;
162162 } else {
163- dict. del_item ( & * attr_name, vm) . map_err ( |e| {
163+ dict. del_item ( attr_name, vm) . map_err ( |e| {
164164 if e. fast_isinstance ( vm. ctx . exceptions . key_error ) {
165165 vm. new_attribute_error ( format ! (
166166 "'{}' object has no attribute '{}'" ,
@@ -243,8 +243,8 @@ impl PyObject {
243243 }
244244 }
245245
246- pub fn del_attr ( & self , attr_name : impl IntoPyStrRef , vm : & VirtualMachine ) -> PyResult < ( ) > {
247- let attr_name = attr_name. into_pystr_ref ( vm ) ;
246+ pub fn del_attr < ' a > ( & self , attr_name : impl AsPyStr < ' a > , vm : & VirtualMachine ) -> PyResult < ( ) > {
247+ let attr_name = attr_name. as_pystr ( & vm . ctx ) ;
248248 self . call_set_attr ( vm, attr_name, PySetterValue :: Delete )
249249 }
250250
0 commit comments