Construct GeneratorExit

Performance Diagrams

Construct GeneratorExit 0040000000400000008000000080000000120000000120000000160000000160000000200000000200000000240000000240000000280000000280000000320000000320000000CPython 2.7Nuitka (master)Nuitka (develop)Nuitka (factory)34737831688.11538461538461257.0CPython 2.7163403689240.03846153846155387.8744922080195Nuitka (master)163553059391.96153846153845387.76823449618234Nuitka (develop)163553131543.8846153846154387.7681832773616Nuitka (factory)Construct GeneratorExitTicks Construct GeneratorExit 0010000000100000002000000020000000300000003000000040000000400000005000000050000000600000006000000070000000700000008000000080000000CPython 3.5Nuitka (master)Nuitka (develop)Nuitka (factory)8307019888.95192307692307257.0CPython 3.566052300242.31730769230768307.62446594403673Nuitka (master)66404711395.6826923076923306.5761215087954Nuitka (develop)66402673549.0480769230769306.5821841060441Nuitka (factory)Construct GeneratorExitTicks

Source Code with Construct

def calledRepeatedly():
    # We measure making a generator iterator step or not.
    def generator():
        yield 1
        yield 2
        yield 3

    gen = generator()

    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.
    def generator():
        yield 1
        yield 2
        yield 3

    gen = generator()

    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
32     throw = gen.throw 32     throw = gen.throw
33     exc = GeneratorExit 33     exc = GeneratorExit
34 34
35     try: 35     try:
36 # construct_begin 36 # construct_begin
n 37         throw(exc) n 37  
38 # construct_alternative 38 # construct_alternative
t 39   t 39         pass
40   40 # construct_end
41     except exc: 41     except exc:
42         pass 42         pass
43 43
44     return throw, exc 44     return throw, exc
45 45

Context Diff of Generated Code


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