11use crate :: util:: CStrExt ;
2+ use crate :: util:: FfiPtrExt ;
23use crate :: { PyObject , pystate:: with_vm} ;
34use alloc:: slice;
45use core:: ffi:: { c_char, c_int} ;
@@ -43,9 +44,9 @@ pub unsafe extern "C" fn PyObject_Call(
4344) -> * mut PyObject {
4445 with_vm ( |vm| {
4546 let callable = unsafe { & * callable } ;
46- let args = tuple_to_args ( unsafe { & * args } . try_downcast_ref :: < PyTuple > ( vm) ?) ;
47+ let args = tuple_to_args ( unsafe { args. assume_borrowed_and_cast :: < PyTuple > ( vm) } ?) ;
4748
48- let kwargs: Option < KwArgs > = unsafe { kwargs. as_ref ( ) }
49+ let kwargs: Option < KwArgs > = unsafe { kwargs. assume_borrowed_or_opt ( ) }
4950 . map ( |kwargs| dict_to_kwargs ( vm, kwargs. try_downcast_ref :: < PyDict > ( vm) ?) )
5051 . transpose ( ) ?;
5152
@@ -65,7 +66,7 @@ pub unsafe extern "C" fn PyObject_CallObject(
6566) -> * mut PyObject {
6667 with_vm ( |vm| {
6768 let callable = unsafe { & * callable } ;
68- if let Some ( args) = unsafe { args. as_ref ( ) } {
69+ if let Some ( args) = unsafe { args. assume_borrowed_or_opt ( ) } {
6970 callable. call ( tuple_to_args ( args. try_downcast_ref :: < PyTuple > ( vm) ?) , vm)
7071 } else {
7172 callable. call ( ( ) , vm)
@@ -85,7 +86,7 @@ pub unsafe extern "C" fn PyObject_Vectorcall(
8586
8687 let kwnames: Option < & [ PyObjectRef ] > = unsafe {
8788 kwnames
88- . as_ref ( )
89+ . assume_borrowed_or_opt ( )
8990 . map ( |tuple| Ok ( & * * * tuple. try_downcast_ref :: < PyTuple > ( vm) ?) )
9091 . transpose ( ) ?
9192 } ;
@@ -123,7 +124,7 @@ pub unsafe extern "C" fn PyObject_VectorcallMethod(
123124 . split_first ( )
124125 . expect ( "args_len > 0 should guarantee a receiver" ) ;
125126
126- let method_name = unsafe { ( & * name) . try_downcast_ref :: < PyStr > ( vm) ? } ;
127+ let method_name = unsafe { name. assume_borrowed_and_cast :: < PyStr > ( vm) ? } ;
127128 let callable = unsafe { ( & * * receiver) . get_attr ( method_name, vm) ? } ;
128129
129130 Ok ( unsafe {
@@ -145,13 +146,13 @@ pub unsafe extern "C" fn PyVectorcall_Call(
145146) -> * mut PyObject {
146147 with_vm ( |vm| {
147148 let callable = unsafe { & * callable } ;
148- let tuple = unsafe { & * tuple } . try_downcast_ref :: < PyTuple > ( vm) ?;
149+ let tuple = unsafe { tuple. assume_borrowed_and_cast :: < PyTuple > ( vm) } ?;
149150
150151 let mut args = tuple. iter ( ) . cloned ( ) . collect :: < Vec < _ > > ( ) ;
151152 let num_positional_args = args. len ( ) ;
152153
153154 let mut kwnames = Vec :: new ( ) ;
154- if let Some ( kwargs) = unsafe { kwargs. as_ref ( ) } {
155+ if let Some ( kwargs) = unsafe { kwargs. assume_borrowed_or_opt ( ) } {
155156 let kwargs = kwargs. try_downcast_ref :: < PyDict > ( vm) ?;
156157 for ( key, value) in kwargs. items_vec ( ) {
157158 let key = key
@@ -221,7 +222,7 @@ pub unsafe extern "C" fn PyObject_Format(
221222) -> * mut PyObject {
222223 with_vm ( |vm| {
223224 let obj = unsafe { & * obj } ;
224- let spec = unsafe { format_spec. as_ref ( ) }
225+ let spec = unsafe { format_spec. assume_borrowed_or_opt ( ) }
225226 . map ( |spec| spec. try_downcast_ref :: < PyStr > ( vm) )
226227 . transpose ( ) ?
227228 . unwrap_or_else ( || vm. ctx . empty_str ) ;
0 commit comments