@@ -1278,27 +1278,36 @@ impl<'t, 'l, 'py> Parser<'t, 'l, 'py> {
12781278 . try_iter ( ) ?
12791279 . map ( |v| v?. getattr ( "cell_contents" ) )
12801280 . collect :: < Result < Vec < _ > , _ > > ( ) ?;
1281+
1282+ fn get_defaults_count ( defaults : & Bound < ' _ , PyAny > ) -> Result < usize , PyErr > {
1283+ match defaults. is_none ( ) {
1284+ true => Ok ( 0 ) ,
1285+ false => defaults. len ( ) ,
1286+ }
1287+ }
1288+
1289+ fn get_kwonly_defaults (
1290+ kwonly_defaults : & Bound < ' _ , PyAny > ,
1291+ ) -> Result < HashSet < String > , PyErr > {
1292+ match kwonly_defaults. is_none ( ) {
1293+ true => Ok ( HashSet :: new ( ) ) ,
1294+ false => kwonly_defaults
1295+ . try_iter ( ) ?
1296+ . map ( |item| item?. extract ( ) )
1297+ . collect :: < Result < _ , PyErr > > ( ) ,
1298+ }
1299+ }
1300+
12811301 if closure_names. contains ( & "filename" . to_string ( ) ) {
12821302 todo ! ( "Inclusion tag" )
12831303 } else if closure_names. contains ( & "end_name" . to_string ( ) ) {
12841304 todo ! ( "Simple block tag" )
12851305 } else {
1286- let defaults = & closure_values[ 0 ] ;
1287- let defaults_count = match defaults. is_none ( ) {
1288- true => 0 ,
1289- false => defaults. len ( ) ?,
1290- } ;
1306+ let defaults_count = get_defaults_count ( & closure_values[ 0 ] ) ?;
12911307 let func = closure_values[ 1 ] . clone ( ) ;
12921308 let function_name = closure_values[ 2 ] . extract ( ) ?;
12931309 let kwonly = closure_values[ 3 ] . extract ( ) ?;
1294- let kwonly_defaults = & closure_values[ 4 ] ;
1295- let kwonly_defaults = match kwonly_defaults. is_none ( ) {
1296- true => HashSet :: new ( ) ,
1297- false => kwonly_defaults
1298- . try_iter ( ) ?
1299- . map ( |item| item?. extract ( ) )
1300- . collect :: < Result < _ , PyErr > > ( ) ?,
1301- } ;
1310+ let kwonly_defaults = get_kwonly_defaults ( & closure_values[ 4 ] ) ?;
13021311 let params: Vec < String > = closure_values[ 5 ] . extract ( ) ?;
13031312 let takes_context = closure_values[ 6 ] . is_truthy ( ) ?;
13041313 let varargs = !closure_values[ 7 ] . is_none ( ) ;
0 commit comments