Construct GeneratorExpressionExit

Performance Diagrams

Construct GeneratorExpressionExit 0040000000400000008000000080000000120000000120000000160000000160000000200000000200000000240000000240000000280000000280000000320000000320000000CPython 2.7Nuitka (master)Nuitka (develop)Nuitka (factory)34792867488.11538461538461257.0CPython 2.7164401994240.03846153846155387.34932014653276Nuitka (master)164401904391.96153846153845387.3493840687854Nuitka (develop)164401934543.8846153846154387.34936276136784Nuitka (factory)Construct GeneratorExpressionExitTicks Construct GeneratorExpressionExit 0010000000100000002000000020000000300000003000000040000000400000005000000050000000600000006000000070000000700000008000000080000000CPython 3.5Nuitka (master)Nuitka (develop)Nuitka (factory)8266870388.95192307692307257.0CPython 3.566005666242.31730769230768306.80957300268017Nuitka (master)66306393395.6826923076923305.9106322237347Nuitka (develop)66302529549.0480769230769305.92218259057853Nuitka (factory)Construct GeneratorExpressionExitTicks

Source Code with Construct

def calledRepeatedly():
    # We measure making a generator iterator step or not.
    gen = (x for x in range(3))

    next(gen)

    # Take attribute lookup out of it, and built-in lookup too.
    throw = gen.throw
    exc = GeneratorExit

    try:
# construct_begin
        throw(exc)
# construct_alternative


    except exc:
        pass

    return throw, exc


import itertools
for x in itertools.repeat(None, 50000):
    calledRepeatedly()

print("OK.")

Source Code without Construct

def calledRepeatedly():
    # We measure making a generator iterator step or not.
    gen = (x for x in range(3))

    next(gen)

    # Take attribute lookup out of it, and built-in lookup too.
    throw = gen.throw
    exc = GeneratorExit

    try:
# construct_begin

# construct_alternative
        pass
# construct_end
    except exc:
        pass

    return throw, exc


import itertools
for x in itertools.repeat(None, 50000):
    calledRepeatedly()

print("OK.")

Context Diff of Source Code


Construct
Baseline
27     throw = gen.throw 27     throw = gen.throw
28     exc = GeneratorExit 28     exc = GeneratorExit
29 29
30     try: 30     try:
31 # construct_begin 31 # construct_begin
n 32         throw(exc) n 32  
33 # construct_alternative 33 # construct_alternative
t 34   t 34         pass
35   35 # construct_end
36     except exc: 36     except exc:
37         pass 37         pass
38 38
39     return throw, exc 39     return throw, exc
40 40

Context Diff of Generated Code


Construct
Baseline
58 static PyObject *const_str_digest_5ed1392909ad16e6227b8230f4582352; 58 static PyObject *const_str_digest_5ed1392909ad16e6227b8230f4582352;
59 static PyObject *const_str_plain_repeat; 59 static PyObject *const_str_plain_repeat;
60 static PyObject *const_tuple_str_digest_b9c4baf879ebd882d40843df3a4dead7_str_plain_x_tuple; 60 static PyObject *const_tuple_str_digest_b9c4baf879ebd882d40843df3a4dead7_str_plain_x_tuple;
61 static PyObject *const_tuple_none_int_pos_50000_tuple; 61 static PyObject *const_tuple_none_int_pos_50000_tuple;
62 extern PyObject *const_str_plain___main__; 62 extern PyObject *const_str_plain___main__;
n 63 static PyObject *const_tuple_type_GeneratorExit_tuple; n
64 extern PyObject *const_str_plain___doc__; 63 extern PyObject *const_str_plain___doc__;
65 extern PyObject *const_str_plain___cached__; 64 extern PyObject *const_str_plain___cached__;
66 static PyObject *module_filename_obj; 65 static PyObject *module_filename_obj;
67 66
68 static bool constants_created = false; 67 static bool constants_created = false;
97     PyTuple_SET_ITEM( const_tuple_str_digest_b9c4baf879ebd882d40843df3a4dead7_str_plain_x_tuple, 0, const_str_digest_b9c4baf879ebd882d40843df3a4dead7 ); Py_INCREF( const_str_digest_b9c4baf879ebd882d40843df3a4dead7 ); 96     PyTuple_SET_ITEM( const_tuple_str_digest_b9c4baf879ebd882d40843df3a4dead7_str_plain_x_tuple, 0, const_str_digest_b9c4baf879ebd882d40843df3a4dead7 ); Py_INCREF( const_str_digest_b9c4baf879ebd882d40843df3a4dead7 );
98     PyTuple_SET_ITEM( const_tuple_str_digest_b9c4baf879ebd882d40843df3a4dead7_str_plain_x_tuple, 1, const_str_plain_x ); Py_INCREF( const_str_plain_x ); 97     PyTuple_SET_ITEM( const_tuple_str_digest_b9c4baf879ebd882d40843df3a4dead7_str_plain_x_tuple, 1, const_str_plain_x ); Py_INCREF( const_str_plain_x );
99     const_tuple_none_int_pos_50000_tuple = PyTuple_New( 2 ); 98     const_tuple_none_int_pos_50000_tuple = PyTuple_New( 2 );
100     PyTuple_SET_ITEM( const_tuple_none_int_pos_50000_tuple, 0, Py_None ); Py_INCREF( Py_None ); 99     PyTuple_SET_ITEM( const_tuple_none_int_pos_50000_tuple, 0, Py_None ); Py_INCREF( Py_None );
101     PyTuple_SET_ITEM( const_tuple_none_int_pos_50000_tuple, 1, const_int_pos_50000 ); Py_INCREF( const_int_pos_50000 ); 100     PyTuple_SET_ITEM( const_tuple_none_int_pos_50000_tuple, 1, const_int_pos_50000 ); Py_INCREF( const_int_pos_50000 );
n 102     const_tuple_type_GeneratorExit_tuple = PyTuple_New( 1 ); n
103     PyTuple_SET_ITEM( const_tuple_type_GeneratorExit_tuple, 0, (PyObject *)PyExc_GeneratorExit ); Py_INCREF( (PyObject *)PyExc_GeneratorExit );
104 101
105     constants_created = true; 102     constants_created = true;
106 } 103 }
107 104
108 #ifndef __NUITKA_NO_ASSERT__ 105 #ifndef __NUITKA_NO_ASSERT__
146     NUITKA_MAY_BE_UNUSED bool had_error = ERROR_OCCURRED(); 143     NUITKA_MAY_BE_UNUSED bool had_error = ERROR_OCCURRED();
147 #endif 144 #endif
148 145
149     // Local variable declarations. 146     // Local variable declarations.
150     PyObject *var_gen = NULL; 147     PyObject *var_gen = NULL;
n 151     PyObject *var_exc = NULL; n
152     PyObject *var_throw = NULL; 148     PyObject *var_throw = NULL;
153     PyObject *tmp_genexpr_1__$0 = NULL; 149     PyObject *tmp_genexpr_1__$0 = NULL;
154     struct Nuitka_FrameObject *frame_e0c1bfb466df576760cb446d112481fa; 150     struct Nuitka_FrameObject *frame_e0c1bfb466df576760cb446d112481fa;
155     NUITKA_MAY_BE_UNUSED char const *type_description_1 = NULL; 151     NUITKA_MAY_BE_UNUSED char const *type_description_1 = NULL;
156     NUITKA_MAY_BE_UNUSED PyObject *tmp_unused; 152     NUITKA_MAY_BE_UNUSED PyObject *tmp_unused;
157     PyObject *exception_type = NULL; 153     PyObject *exception_type = NULL;
158     PyObject *exception_value = NULL; 154     PyObject *exception_value = NULL;
159     PyTracebackObject *exception_tb = NULL; 155     PyTracebackObject *exception_tb = NULL;
160     NUITKA_MAY_BE_UNUSED int exception_lineno = 0; 156     NUITKA_MAY_BE_UNUSED int exception_lineno = 0;
n n 157     static struct Nuitka_FrameObject *cache_frame_e0c1bfb466df576760cb446d112481fa = NULL;
158     PyObject *tmp_return_value = NULL;
161     PyObject *exception_keeper_type_1; 159     PyObject *exception_keeper_type_1;
162     PyObject *exception_keeper_value_1; 160     PyObject *exception_keeper_value_1;
163     PyTracebackObject *exception_keeper_tb_1; 161     PyTracebackObject *exception_keeper_tb_1;
164     NUITKA_MAY_BE_UNUSED int exception_keeper_lineno_1; 162     NUITKA_MAY_BE_UNUSED int exception_keeper_lineno_1;
n 165     PyObject *exception_preserved_type_1; n
166     PyObject *exception_preserved_value_1;
167     PyTracebackObject *exception_preserved_tb_1;
168     bool tmp_result;
169     PyObject *exception_keeper_type_2;
170     PyObject *exception_keeper_value_2;
171     PyTracebackObject *exception_keeper_tb_2;
172     NUITKA_MAY_BE_UNUSED int exception_keeper_lineno_2;
173     PyObject *tmp_return_value = NULL;
174     static struct Nuitka_FrameObject *cache_frame_e0c1bfb466df576760cb446d112481fa = NULL;
175     PyObject *exception_keeper_type_3;
176     PyObject *exception_keeper_value_3;
177     PyTracebackObject *exception_keeper_tb_3;
178     NUITKA_MAY_BE_UNUSED int exception_keeper_lineno_3;
179 163
180     // Actual function code. 164     // Actual function code.
181     { 165     {
182     PyObject *tmp_assign_source_1; 166     PyObject *tmp_assign_source_1;
183     PyObject *tmp_outline_return_value_1; 167     PyObject *tmp_outline_return_value_1;
263         { 247         {
264             FETCH_ERROR_OCCURRED( &exception_type, &exception_value, &exception_tb ); 248             FETCH_ERROR_OCCURRED( &exception_type, &exception_value, &exception_tb );
265         } 249         }
266 250
267 251
n 268         type_description_1 = "ooo"; n 252         type_description_1 = "oNo";
269         exception_lineno = 24; 253         exception_lineno = 24;
270         goto frame_exception_exit_1; 254         goto frame_exception_exit_1;
271     } 255     }
272     Py_DECREF( tmp_unused ); 256     Py_DECREF( tmp_unused );
273     } 257     }
285         exception_tb = NULL; 269         exception_tb = NULL;
286         NORMALIZE_EXCEPTION( &exception_type, &exception_value, &exception_tb ); 270         NORMALIZE_EXCEPTION( &exception_type, &exception_value, &exception_tb );
287         CHAIN_EXCEPTION( exception_value ); 271         CHAIN_EXCEPTION( exception_value );
288 272
289         exception_lineno = 27; 273         exception_lineno = 27;
n 290         type_description_1 = "ooo"; n 274         type_description_1 = "oNo";
291         goto frame_exception_exit_1; 275         goto frame_exception_exit_1;
292     } 276     }
293 277
294     tmp_assign_source_3 = LOOKUP_ATTRIBUTE( tmp_source_name_1, const_str_plain_throw ); 278     tmp_assign_source_3 = LOOKUP_ATTRIBUTE( tmp_source_name_1, const_str_plain_throw );
295     if ( tmp_assign_source_3 == NULL ) 279     if ( tmp_assign_source_3 == NULL )
298 282
299         FETCH_ERROR_OCCURRED( &exception_type, &exception_value, &exception_tb ); 283         FETCH_ERROR_OCCURRED( &exception_type, &exception_value, &exception_tb );
300 284
301 285
302         exception_lineno = 27; 286         exception_lineno = 27;
n 303         type_description_1 = "ooo"; n 287         type_description_1 = "oNo";
304         goto frame_exception_exit_1; 288         goto frame_exception_exit_1;
305     } 289     }
306     assert( var_throw == NULL ); 290     assert( var_throw == NULL );
307     var_throw = tmp_assign_source_3; 291     var_throw = tmp_assign_source_3;
308 292
309     } 293     }
n 310     { n
311     PyObject *tmp_assign_source_4;
312     tmp_assign_source_4 = PyExc_GeneratorExit;
313     assert( var_exc == NULL );
314     Py_INCREF( tmp_assign_source_4 );
315     var_exc = tmp_assign_source_4;
316 294
n n 295 #if 0
296     RESTORE_FRAME_EXCEPTION( frame_e0c1bfb466df576760cb446d112481fa );
297 #endif
298  
299     // Put the previous frame back on top.
300     popFrameStack();
301  
302     goto frame_no_exception_1;
303  
304     frame_exception_exit_1:;
305  
306 #if 0
307     RESTORE_FRAME_EXCEPTION( frame_e0c1bfb466df576760cb446d112481fa );
308 #endif
309  
310     if ( exception_tb == NULL )
317     } 311     {
312         exception_tb = MAKE_TRACEBACK( frame_e0c1bfb466df576760cb446d112481fa, exception_lineno );
318     { 313     }
319     // Tried code: 314     else if ( exception_tb->tb_frame != &frame_e0c1bfb466df576760cb446d112481fa->m_frame )
315     {
316         exception_tb = ADD_TRACEBACK( exception_tb, frame_e0c1bfb466df576760cb446d112481fa, exception_lineno );
320     { 317     }
321     PyObject *tmp_called_name_1;
322     tmp_called_name_1 = var_throw;
323 318
n 324     CHECK_OBJECT( tmp_called_name_1 ); n 319     // Attachs locals to frame if any.
325     frame_e0c1bfb466df576760cb446d112481fa->m_frame.f_lineno = 32; 320     Nuitka_Frame_AttachLocals(
326     tmp_unused = CALL_FUNCTION_WITH_ARGS1( tmp_called_name_1, &PyTuple_GET_ITEM( const_tuple_type_GeneratorExit_tuple, 0 ) ); 321         (struct Nuitka_FrameObject *)frame_e0c1bfb466df576760cb446d112481fa,
327  
328     if ( tmp_unused == NULL )
329     {
330         assert( ERROR_OCCURRED() );
331  
332         FETCH_ERROR_OCCURRED( &exception_type, &exception_value, &exception_tb );
333  
334  
335         exception_lineno = 32;
336         type_description_1 = "ooo"; 322         type_description_1,
323         var_gen,
324         NULL,
325         var_throw
326     );
327  
328  
329     // Release cached frame.
330     if ( frame_e0c1bfb466df576760cb446d112481fa == cache_frame_e0c1bfb466df576760cb446d112481fa )
331     {
332         Py_DECREF( frame_e0c1bfb466df576760cb446d112481fa );
333     }
334     cache_frame_e0c1bfb466df576760cb446d112481fa = NULL;
335  
336     assertFrameObject( frame_e0c1bfb466df576760cb446d112481fa );
337  
338     // Put the previous frame back on top.
339     popFrameStack();
340  
341     // Return the error.
337         goto try_except_handler_3; 342     goto try_except_handler_2;
343  
344     frame_no_exception_1:;
345  
338     } 346     {
339     Py_DECREF( tmp_unused ); 347     PyObject *tmp_tuple_element_1;
348     tmp_tuple_element_1 = var_throw;
349  
350     CHECK_OBJECT( tmp_tuple_element_1 );
351     tmp_return_value = PyTuple_New( 2 );
352     Py_INCREF( tmp_tuple_element_1 );
353     PyTuple_SET_ITEM( tmp_return_value, 0, tmp_tuple_element_1 );
354     tmp_tuple_element_1 = PyExc_GeneratorExit;
355     Py_INCREF( tmp_tuple_element_1 );
356     PyTuple_SET_ITEM( tmp_return_value, 1, tmp_tuple_element_1 );
357     goto try_return_handler_2;
358     }
359     // tried codes exits in all cases
360     NUITKA_CANNOT_GET_HERE( __main__$$$function_1_calledRepeatedly );
361     return NULL;
362     // Return handler code:
363     try_return_handler_2:;
340     } 364     {
341     goto try_end_1; 365     Py_XDECREF( var_gen );
366     var_gen = NULL;
367  
368     }
369     {
370     Py_XDECREF( var_throw );
371     var_throw = NULL;
372  
373     }
374     {
375     goto function_return_exit;
376     }
342     // Exception handler code: 377     // Exception handler code:
n 343     try_except_handler_3:; n 378     try_except_handler_2:;
344     exception_keeper_type_1 = exception_type; 379     exception_keeper_type_1 = exception_type;
345     exception_keeper_value_1 = exception_value; 380     exception_keeper_value_1 = exception_value;
346     exception_keeper_tb_1 = exception_tb; 381     exception_keeper_tb_1 = exception_tb;
347     exception_keeper_lineno_1 = exception_lineno; 382     exception_keeper_lineno_1 = exception_lineno;
348     exception_type = NULL; 383     exception_type = NULL;
349     exception_value = NULL; 384     exception_value = NULL;
350     exception_tb = NULL; 385     exception_tb = NULL;
351     exception_lineno = 0; 386     exception_lineno = 0;
352 387
353     { 388     {
n 354     // Preserve existing published exception. n
355     exception_preserved_type_1 = EXC_TYPE(PyThreadState_GET());
356     Py_XINCREF( exception_preserved_type_1 );
357     exception_preserved_value_1 = EXC_VALUE(PyThreadState_GET());
358     Py_XINCREF( exception_preserved_value_1 );
359     exception_preserved_tb_1 = (PyTracebackObject *)EXC_TRACEBACK(PyThreadState_GET());
360     Py_XINCREF( exception_preserved_tb_1 );
361  
362     }
363     {
364     if ( exception_keeper_tb_1 == NULL )
365     {
366         exception_keeper_tb_1 = MAKE_TRACEBACK( frame_e0c1bfb466df576760cb446d112481fa, exception_keeper_lineno_1 );
367     }
368     else if ( exception_keeper_lineno_1 != 0 )
369     {
370         exception_keeper_tb_1 = ADD_TRACEBACK( exception_keeper_tb_1, frame_e0c1bfb466df576760cb446d112481fa, exception_keeper_lineno_1 );
371     }
372  
373     NORMALIZE_EXCEPTION( &exception_keeper_type_1, &exception_keeper_value_1, &exception_keeper_tb_1 );
374     PyException_SetTraceback( exception_keeper_value_1, (PyObject *)exception_keeper_tb_1 );
375     PUBLISH_EXCEPTION( &exception_keeper_type_1, &exception_keeper_value_1, &exception_keeper_tb_1 );
376     }
377     {
378     // Tried code:
379     {
380     PyObject *tmp_compare_left_1;
381     PyObject *tmp_compare_right_1;
382     int tmp_exc_match_exception_match_1;
383     tmp_compare_left_1 = EXC_TYPE(PyThreadState_GET());
384     tmp_compare_right_1 = var_exc;
385  
386     if ( tmp_compare_right_1 == NULL )
387     {
388  
389         exception_type = PyExc_UnboundLocalError;
390         Py_INCREF( exception_type );
391         exception_value = PyUnicode_FromFormat( "local variable '%s' referenced before assignment", "exc" );
392         exception_tb = NULL;
393         NORMALIZE_EXCEPTION( &exception_type, &exception_value, &exception_tb );
394         CHAIN_EXCEPTION( exception_value );
395  
396         exception_lineno = 36;
397         type_description_1 = "ooo";
398         goto try_except_handler_4;
399     }
400  
401     tmp_exc_match_exception_match_1 = EXCEPTION_MATCH_BOOL( tmp_compare_left_1, tmp_compare_right_1 );
402     if ( tmp_exc_match_exception_match_1 == -1 )
403     {
404         assert( ERROR_OCCURRED() );
405  
406         FETCH_ERROR_OCCURRED( &exception_type, &exception_value, &exception_tb );
407  
408  
409         exception_lineno = 36;
410         type_description_1 = "ooo";
411         goto try_except_handler_4;
412     }
413     if ( tmp_exc_match_exception_match_1 == 1 )
414     {
415         goto branch_no_1;
416     }
417     else
418     {
419         goto branch_yes_1;
420     }
421     branch_yes_1:;
422     {
423     tmp_result = RERAISE_EXCEPTION( &exception_type, &exception_value, &exception_tb );
424     if (unlikely( tmp_result == false ))
425     {
426         exception_lineno = 30;
427     }
428  
429     if (exception_tb && exception_tb->tb_frame == &frame_e0c1bfb466df576760cb446d112481fa->m_frame) frame_e0c1bfb466df576760cb446d112481fa->m_frame.f_lineno = exception_tb->tb_lineno;
430     type_description_1 = "ooo";
431     goto try_except_handler_4;
432     }
433     branch_no_1:;
434     }
435     goto try_end_2;
436     // Exception handler code:
437     try_except_handler_4:;
438     exception_keeper_type_2 = exception_type;
439     exception_keeper_value_2 = exception_value;
440     exception_keeper_tb_2 = exception_tb;
441     exception_keeper_lineno_2 = exception_lineno;
442     exception_type = NULL;
443     exception_value = NULL;
444     exception_tb = NULL;
445     exception_lineno = 0;
446  
447     {
448     // Restore previous exception.
449     SET_CURRENT_EXCEPTION( exception_preserved_type_1, exception_preserved_value_1, exception_preserved_tb_1 );
450     }
451     {
452     // Re-raise.
453     exception_type = exception_keeper_type_2;
454     exception_value = exception_keeper_value_2;
455     exception_tb = exception_keeper_tb_2;
456     exception_lineno = exception_keeper_lineno_2;
457  
458     goto frame_exception_exit_1;
459     }
460     // End of try:
461     try_end_2:;
462     }
463     {
464     // Restore previous exception.
465     SET_CURRENT_EXCEPTION( exception_preserved_type_1, exception_preserved_value_1, exception_preserved_tb_1 );
466     }
467     goto try_end_1;
468     // exception handler codes exits in all cases
469     NUITKA_CANNOT_GET_HERE( __main__$$$function_1_calledRepeatedly );
470     return NULL;
471     // End of try:
472     try_end_1:;
473     }
474     {
475     PyObject *tmp_tuple_element_1;
476     tmp_tuple_element_1 = var_throw;
477  
478     if ( tmp_tuple_element_1 == NULL )
479     {
480  
481         exception_type = PyExc_UnboundLocalError;
482         Py_INCREF( exception_type );
483         exception_value = PyUnicode_FromFormat( "local variable '%s' referenced before assignment", "throw" );
484         exception_tb = NULL;
485         NORMALIZE_EXCEPTION( &exception_type, &exception_value, &exception_tb );
486         CHAIN_EXCEPTION( exception_value );
487  
488         exception_lineno = 39;
489         type_description_1 = "ooo";
490         goto frame_exception_exit_1;
491     }
492  
493     tmp_return_value = PyTuple_New( 2 );
494     Py_INCREF( tmp_tuple_element_1 );
495     PyTuple_SET_ITEM( tmp_return_value, 0, tmp_tuple_element_1 );
496     tmp_tuple_element_1 = var_exc;
497  
498     if ( tmp_tuple_element_1 == NULL )
499     {
500         Py_DECREF( tmp_return_value );
501         exception_type = PyExc_UnboundLocalError;
502         Py_INCREF( exception_type );
503         exception_value = PyUnicode_FromFormat( "local variable '%s' referenced before assignment", "exc" );
504         exception_tb = NULL;
505         NORMALIZE_EXCEPTION( &exception_type, &exception_value, &exception_tb );
506         CHAIN_EXCEPTION( exception_value );
507  
508         exception_lineno = 39;
509         type_description_1 = "ooo";
510         goto frame_exception_exit_1;
511     }
512  
513     Py_INCREF( tmp_tuple_element_1 );
514     PyTuple_SET_ITEM( tmp_return_value, 1, tmp_tuple_element_1 );
515     goto frame_return_exit_1;
516     }
517  
518 #if 0
519     RESTORE_FRAME_EXCEPTION( frame_e0c1bfb466df576760cb446d112481fa );
520 #endif
521  
522     // Put the previous frame back on top.
523     popFrameStack();
524  
525     goto frame_no_exception_1;
526  
527     frame_return_exit_1:;
528 #if 0
529     RESTORE_FRAME_EXCEPTION( frame_e0c1bfb466df576760cb446d112481fa );
530 #endif
531  
532     // Put the previous frame back on top.
533     popFrameStack();
534  
535     goto try_return_handler_2;
536  
537     frame_exception_exit_1:;
538  
539 #if 0
540     RESTORE_FRAME_EXCEPTION( frame_e0c1bfb466df576760cb446d112481fa );
541 #endif
542  
543     if ( exception_tb == NULL )
544     {
545         exception_tb = MAKE_TRACEBACK( frame_e0c1bfb466df576760cb446d112481fa, exception_lineno );
546     }
547     else if ( exception_tb->tb_frame != &frame_e0c1bfb466df576760cb446d112481fa->m_frame )
548     {
549         exception_tb = ADD_TRACEBACK( exception_tb, frame_e0c1bfb466df576760cb446d112481fa, exception_lineno );
550     }
551  
552     // Attachs locals to frame if any.
553     Nuitka_Frame_AttachLocals(
554         (struct Nuitka_FrameObject *)frame_e0c1bfb466df576760cb446d112481fa,
555         type_description_1,
556         var_gen,
557         var_exc,
558         var_throw
559     );
560  
561  
562     // Release cached frame.
563     if ( frame_e0c1bfb466df576760cb446d112481fa == cache_frame_e0c1bfb466df576760cb446d112481fa )
564     {
565         Py_DECREF( frame_e0c1bfb466df576760cb446d112481fa );
566     }
567     cache_frame_e0c1bfb466df576760cb446d112481fa = NULL;
568  
569     assertFrameObject( frame_e0c1bfb466df576760cb446d112481fa );
570  
571     // Put the previous frame back on top.
572     popFrameStack();
573  
574     // Return the error.
575     goto try_except_handler_2;
576  
577     frame_no_exception_1:;
578  
579     // tried codes exits in all cases
580     NUITKA_CANNOT_GET_HERE( __main__$$$function_1_calledRepeatedly );
581     return NULL;
582     // Return handler code:
583     try_return_handler_2:;
584     {
585     Py_XDECREF( var_gen ); 389     Py_XDECREF( var_gen );
586     var_gen = NULL; 390     var_gen = NULL;
587 391
588     } 392     }
589     { 393     {
n 590     Py_XDECREF( var_exc ); n
591     var_exc = NULL;
592  
593     }
594     {
595     Py_XDECREF( var_throw );
596     var_throw = NULL;
597  
598     }
599     {
600     goto function_return_exit;
601     }
602     // Exception handler code:
603     try_except_handler_2:;
604     exception_keeper_type_3 = exception_type;
605     exception_keeper_value_3 = exception_value;
606     exception_keeper_tb_3 = exception_tb;
607     exception_keeper_lineno_3 = exception_lineno;
608     exception_type = NULL;
609     exception_value = NULL;
610     exception_tb = NULL;
611     exception_lineno = 0;
612  
613     {
614     Py_XDECREF( var_gen );
615     var_gen = NULL;
616  
617     }
618     {
619     Py_XDECREF( var_exc );
620     var_exc = NULL;
621  
622     }
623     {
624     Py_XDECREF( var_throw );
625     var_throw = NULL;
626  
627     }
628     {
629     // Re-raise. 394     // Re-raise.
t 630     exception_type = exception_keeper_type_3; t 395     exception_type = exception_keeper_type_1;
631     exception_value = exception_keeper_value_3; 396     exception_value = exception_keeper_value_1;
632     exception_tb = exception_keeper_tb_3; 397     exception_tb = exception_keeper_tb_1;
633     exception_lineno = exception_keeper_lineno_3; 398     exception_lineno = exception_keeper_lineno_1;
634 399
635     goto function_exception_exit; 400     goto function_exception_exit;
636     } 401     }
637     // End of try: 402     // End of try:
638     } 403     }