@@ -105,9 +105,7 @@ fn impl_wrap_common(
105
105
{
106
106
const _LOCATION: & ' static str = concat!(
107
107
stringify!( #cls) , "." , stringify!( #python_name) , "()" ) ;
108
- let _pool = pyo3:: GILPool :: new( ) ;
109
- let _py = _pool. python( ) ;
110
- pyo3:: run_callback( _py, || {
108
+ pyo3:: callback_body_without_convert!( _py, {
111
109
#slf
112
110
pyo3:: callback:: convert( _py, #body)
113
111
} )
@@ -124,16 +122,12 @@ fn impl_wrap_common(
124
122
{
125
123
const _LOCATION: & ' static str = concat!(
126
124
stringify!( #cls) , "." , stringify!( #python_name) , "()" ) ;
127
- let _pool = pyo3:: GILPool :: new( ) ;
128
- let _py = _pool. python( ) ;
129
- pyo3:: run_callback( _py, || {
125
+ pyo3:: callback_body_without_convert!( _py, {
130
126
#slf
131
127
let _args = _py. from_borrowed_ptr:: <pyo3:: types:: PyTuple >( _args) ;
132
128
let _kwargs: Option <& pyo3:: types:: PyDict > = _py. from_borrowed_ptr_or_opt( _kwargs) ;
133
129
134
- #body
135
-
136
- pyo3:: callback:: convert( _py, _result)
130
+ pyo3:: callback:: convert( _py, #body)
137
131
} )
138
132
}
139
133
}
@@ -155,17 +149,13 @@ pub fn impl_proto_wrap(cls: &syn::Type, spec: &FnSpec<'_>) -> TokenStream {
155
149
_kwargs: * mut pyo3:: ffi:: PyObject ) -> * mut pyo3:: ffi:: PyObject
156
150
{
157
151
const _LOCATION: & ' static str = concat!( stringify!( #cls) , "." , stringify!( #python_name) , "()" ) ;
158
- let _pool = pyo3:: GILPool :: new( ) ;
159
- let _py = _pool. python( ) ;
160
- pyo3:: run_callback( _py, || {
152
+ pyo3:: callback_body_without_convert!( _py, {
161
153
let _slf = _py. from_borrowed_ptr:: <pyo3:: PyCell <#cls>>( _slf) ;
162
154
#borrow_self
163
155
let _args = _py. from_borrowed_ptr:: <pyo3:: types:: PyTuple >( _args) ;
164
156
let _kwargs: Option <& pyo3:: types:: PyDict > = _py. from_borrowed_ptr_or_opt( _kwargs) ;
165
157
166
- #body
167
-
168
- pyo3:: callback:: convert( _py, _result)
158
+ pyo3:: callback:: convert( _py, #body)
169
159
} )
170
160
}
171
161
}
@@ -177,11 +167,7 @@ pub fn impl_wrap_new(cls: &syn::Type, spec: &FnSpec<'_>) -> TokenStream {
177
167
let python_name = & spec. python_name ;
178
168
let names: Vec < syn:: Ident > = get_arg_names ( & spec) ;
179
169
let cb = quote ! { #cls:: #name( #( #names) , * ) } ;
180
- let body = impl_arg_params_ (
181
- spec,
182
- cb,
183
- quote ! { pyo3:: derive_utils:: IntoPyNewResult :: into_pynew_result } ,
184
- ) ;
170
+ let body = impl_arg_params ( spec, cb) ;
185
171
186
172
quote ! {
187
173
#[ allow( unused_mut) ]
@@ -193,14 +179,11 @@ pub fn impl_wrap_new(cls: &syn::Type, spec: &FnSpec<'_>) -> TokenStream {
193
179
use pyo3:: type_object:: PyTypeInfo ;
194
180
195
181
const _LOCATION: & ' static str = concat!( stringify!( #cls) , "." , stringify!( #python_name) , "()" ) ;
196
- let _pool = pyo3:: GILPool :: new( ) ;
197
- let _py = _pool. python( ) ;
198
- pyo3:: run_callback( _py, || {
182
+ pyo3:: callback_body_without_convert!( _py, {
199
183
let _args = _py. from_borrowed_ptr:: <pyo3:: types:: PyTuple >( _args) ;
200
184
let _kwargs: Option <& pyo3:: types:: PyDict > = _py. from_borrowed_ptr_or_opt( _kwargs) ;
201
185
202
- #body
203
-
186
+ let _result = pyo3:: derive_utils:: IntoPyNewResult :: into_pynew_result( #body) ;
204
187
let cell = pyo3:: PyClassInitializer :: from( _result?) . create_cell( _py) ?;
205
188
Ok ( cell as * mut pyo3:: ffi:: PyObject )
206
189
} )
@@ -225,16 +208,12 @@ pub fn impl_wrap_class(cls: &syn::Type, spec: &FnSpec<'_>) -> TokenStream {
225
208
_kwargs: * mut pyo3:: ffi:: PyObject ) -> * mut pyo3:: ffi:: PyObject
226
209
{
227
210
const _LOCATION: & ' static str = concat!( stringify!( #cls) , "." , stringify!( #python_name) , "()" ) ;
228
- let _pool = pyo3:: GILPool :: new( ) ;
229
- let _py = _pool. python( ) ;
230
- pyo3:: run_callback( _py, || {
211
+ pyo3:: callback_body_without_convert!( _py, {
231
212
let _cls = pyo3:: types:: PyType :: from_type_ptr( _py, _cls as * mut pyo3:: ffi:: PyTypeObject ) ;
232
213
let _args = _py. from_borrowed_ptr:: <pyo3:: types:: PyTuple >( _args) ;
233
214
let _kwargs: Option <& pyo3:: types:: PyDict > = _py. from_borrowed_ptr_or_opt( _kwargs) ;
234
215
235
- #body
236
-
237
- pyo3:: callback:: convert( _py, _result)
216
+ pyo3:: callback:: convert( _py, #body)
238
217
} )
239
218
}
240
219
}
@@ -257,15 +236,11 @@ pub fn impl_wrap_static(cls: &syn::Type, spec: &FnSpec<'_>) -> TokenStream {
257
236
_kwargs: * mut pyo3:: ffi:: PyObject ) -> * mut pyo3:: ffi:: PyObject
258
237
{
259
238
const _LOCATION: & ' static str = concat!( stringify!( #cls) , "." , stringify!( #python_name) , "()" ) ;
260
- let _pool = pyo3:: GILPool :: new( ) ;
261
- let _py = _pool. python( ) ;
262
- pyo3:: run_callback( _py, || {
239
+ pyo3:: callback_body_without_convert!( _py, {
263
240
let _args = _py. from_borrowed_ptr:: <pyo3:: types:: PyTuple >( _args) ;
264
241
let _kwargs: Option <& pyo3:: types:: PyDict > = _py. from_borrowed_ptr_or_opt( _kwargs) ;
265
242
266
- #body
267
-
268
- pyo3:: callback:: convert( _py, _result)
243
+ pyo3:: callback:: convert( _py, #body)
269
244
} )
270
245
}
271
246
}
@@ -314,10 +289,7 @@ pub(crate) fn impl_wrap_getter(
314
289
_slf: * mut pyo3:: ffi:: PyObject , _: * mut :: std:: os:: raw:: c_void) -> * mut pyo3:: ffi:: PyObject
315
290
{
316
291
const _LOCATION: & ' static str = concat!( stringify!( #cls) , "." , stringify!( #python_name) , "()" ) ;
317
-
318
- let _pool = pyo3:: GILPool :: new( ) ;
319
- let _py = _pool. python( ) ;
320
- pyo3:: run_callback( _py, || {
292
+ pyo3:: callback_body_without_convert!( _py, {
321
293
let _slf = _py. from_borrowed_ptr:: <pyo3:: PyCell <#cls>>( _slf) ;
322
294
#borrow_self
323
295
pyo3:: callback:: convert( _py, #getter_impl)
@@ -343,9 +315,9 @@ fn impl_call_setter(spec: &FnSpec) -> syn::Result<TokenStream> {
343
315
344
316
let name = & spec. name ;
345
317
let fncall = if py_arg. is_some ( ) {
346
- quote ! ( pyo3:: derive_utils:: IntoPyResult :: into_py_result( _slf. #name( _py, _val) ) ?; )
318
+ quote ! ( pyo3:: derive_utils:: IntoPyResult :: into_py_result( _slf. #name( _py, _val) ) ?)
347
319
} else {
348
- quote ! ( pyo3:: derive_utils:: IntoPyResult :: into_py_result( _slf. #name( _val) ) ?; )
320
+ quote ! ( pyo3:: derive_utils:: IntoPyResult :: into_py_result( _slf. #name( _val) ) ?)
349
321
} ;
350
322
351
323
Ok ( fncall)
@@ -359,7 +331,7 @@ pub(crate) fn impl_wrap_setter(
359
331
let ( python_name, setter_impl) = match property_type {
360
332
PropertyType :: Descriptor ( field) => {
361
333
let name = field. ident . as_ref ( ) . unwrap ( ) ;
362
- ( name. unraw ( ) , quote ! ( _slf. #name = _val; ) )
334
+ ( name. unraw ( ) , quote ! ( { _slf. #name = _val; } ) )
363
335
}
364
336
PropertyType :: Function ( spec) => ( spec. python_name . clone ( ) , impl_call_setter ( & spec) ?) ,
365
337
} ;
@@ -372,14 +344,13 @@ pub(crate) fn impl_wrap_setter(
372
344
_value: * mut pyo3:: ffi:: PyObject , _: * mut :: std:: os:: raw:: c_void) -> pyo3:: libc:: c_int
373
345
{
374
346
const _LOCATION: & ' static str = concat!( stringify!( #cls) , "." , stringify!( #python_name) , "()" ) ;
375
- let _pool = pyo3:: GILPool :: new( ) ;
376
- let _py = _pool. python( ) ;
377
- pyo3:: run_callback( _py, || {
347
+ pyo3:: callback_body_without_convert!( _py, {
378
348
let _slf = _py. from_borrowed_ptr:: <pyo3:: PyCell <#cls>>( _slf) ;
379
349
#borrow_self
380
350
let _value = _py. from_borrowed_ptr:: <pyo3:: types:: PyAny >( _value) ;
381
351
let _val = pyo3:: FromPyObject :: extract( _value) ?;
382
- pyo3:: callback:: convert( _py, { #setter_impl} )
352
+
353
+ pyo3:: callback:: convert( _py, #setter_impl)
383
354
} )
384
355
}
385
356
} )
@@ -398,12 +369,10 @@ fn impl_call(_cls: &syn::Type, spec: &FnSpec<'_>) -> TokenStream {
398
369
quote ! { _slf. #fname( #( #names) , * ) }
399
370
}
400
371
401
- fn impl_arg_params_ ( spec : & FnSpec < ' _ > , body : TokenStream , into_result : TokenStream ) -> TokenStream {
372
+ pub fn impl_arg_params ( spec : & FnSpec < ' _ > , body : TokenStream ) -> TokenStream {
402
373
if spec. args . is_empty ( ) {
403
374
return quote ! {
404
- let _result = {
405
- #into_result ( #body)
406
- } ;
375
+ #body
407
376
} ;
408
377
}
409
378
@@ -444,7 +413,7 @@ fn impl_arg_params_(spec: &FnSpec<'_>, body: TokenStream, into_result: TokenStre
444
413
}
445
414
let num_normal_params = params. len ( ) ;
446
415
// create array of arguments, and then parse
447
- quote ! {
416
+ quote ! { {
448
417
use pyo3:: ObjectProtocol ;
449
418
const PARAMS : & ' static [ pyo3:: derive_utils:: ParamDescription ] = & [
450
419
#( #params) , *
@@ -466,16 +435,8 @@ fn impl_arg_params_(spec: &FnSpec<'_>, body: TokenStream, into_result: TokenStre
466
435
467
436
#( #param_conversion) *
468
437
469
- let _result = #into_result( #body) ;
470
- }
471
- }
472
-
473
- pub fn impl_arg_params ( spec : & FnSpec < ' _ > , body : TokenStream ) -> TokenStream {
474
- impl_arg_params_ (
475
- spec,
476
- body,
477
- quote ! { pyo3:: derive_utils:: IntoPyResult :: into_py_result } ,
478
- )
438
+ #body
439
+ } }
479
440
}
480
441
481
442
/// Re option_pos: The option slice doesn't contain the py: Python argument, so the argument
0 commit comments