Construct ListContraction

Performance Diagrams

Construct ListContraction 002000000020000000400000004000000060000000600000008000000080000000100000000100000000120000000120000000140000000140000000160000000160000000CPython 2.7Nuitka (master)Nuitka (develop)Nuitka (factory)16800496988.11538461538461257.0CPython 2.764814016240.03846153846155408.7816537880084Nuitka (master)64811315391.96153846153845408.7856266386795Nuitka (develop)64811315543.8846153846154408.7856266386795Nuitka (factory)Construct ListContractionTicks Construct ListContraction 002000000020000000400000004000000060000000600000008000000080000000100000000100000000120000000120000000140000000140000000160000000160000000180000000180000000200000000200000000CPython 3.8Nuitka (master)Nuitka (develop)Nuitka (factory)21368424988.11538461538461257.0CPython 3.863362090240.03846153846155430.840225993915Nuitka (master)63361565391.96153846153845430.840833130742Nuitka (develop)63361429543.8846153846154430.8409904080915Nuitka (factory)Construct ListContractionTicks

Source Code with Construct

module_value1 = 1000

def calledRepeatedly():
    # Force frame and eliminate forward propagation (currently).
    module_value1

# construct_begin
    l = [
        x
        for x in
        range(7)
    ]
# construct_alternative



    return l, x

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

print("OK.")

Source Code without Construct

module_value1 = 1000

def calledRepeatedly():
    # Force frame and eliminate forward propagation (currently).
    module_value1

# construct_begin





# construct_alternative
    l = 1
# construct_end

    return l, x

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

print("OK.")

Context Diff of Source Code


Construct
Baseline
22 def calledRepeatedly(): 22 def calledRepeatedly():
23     # Force frame and eliminate forward propagation (currently). 23     # Force frame and eliminate forward propagation (currently).
24     module_value1 24     module_value1
25 25
26 # construct_begin 26 # construct_begin
n 27     l = [ n
28         x
29         for x in
30         range(7)
31     ]
32 # construct_alternative
33 27
34 28
t t 29  
30  
31  
32 # construct_alternative
33     l = 1
34 # construct_end
35 35
36     return l, x 36     return l, x
37 37
38 import itertools 38 import itertools
39 for x in itertools.repeat(None, 50000): 39 for x in itertools.repeat(None, 50000):

Context Diff of Generated Code


Construct
Baseline
31 31
32 PyObject *module___main__; 32 PyObject *module___main__;
33 PyDictObject *moduledict___main__; 33 PyDictObject *moduledict___main__;
34 34
35 /* The declarations of module constants used, if any. */ 35 /* The declarations of module constants used, if any. */
n 36 static PyObject *mod_consts[20]; n 36 static PyObject *mod_consts[18];
37 #ifndef __NUITKA_NO_ASSERT__ 37 #ifndef __NUITKA_NO_ASSERT__
n 38 static Py_hash_t mod_consts_hash[20]; n 38 static Py_hash_t mod_consts_hash[18];
39 #endif 39 #endif
40 40
41 static PyObject *module_filename_obj = NULL; 41 static PyObject *module_filename_obj = NULL;
42 42
43 /* Indicator if this modules private constants were created yet. */ 43 /* Indicator if this modules private constants were created yet. */
48     if (constants_created == false) { 48     if (constants_created == false) {
49         loadConstantsBlob(&mod_consts[0], UNTRANSLATE("__main__")); 49         loadConstantsBlob(&mod_consts[0], UNTRANSLATE("__main__"));
50         constants_created = true; 50         constants_created = true;
51 51
52 #ifndef __NUITKA_NO_ASSERT__ 52 #ifndef __NUITKA_NO_ASSERT__
n 53         for(int i = 0; i < 20; i++) { n 53         for(int i = 0; i < 18; i++) {
54             mod_consts_hash[i] = DEEP_HASH(mod_consts[i]); 54             mod_consts_hash[i] = DEEP_HASH(mod_consts[i]);
55         } 55         }
56 #endif 56 #endif
57     } 57     }
58 } 58 }
68 #ifndef __NUITKA_NO_ASSERT__ 68 #ifndef __NUITKA_NO_ASSERT__
69 void checkModuleConstants___main__(void) { 69 void checkModuleConstants___main__(void) {
70     // The module may not have been used at all, then ignore this. 70     // The module may not have been used at all, then ignore this.
71     if (constants_created == false) return; 71     if (constants_created == false) return;
72 72
n 73     for(int i = 0; i < 20; i++) { n 73     for(int i = 0; i < 18; i++) {
74         assert(mod_consts_hash[i] == DEEP_HASH(mod_consts[i])); 74         assert(mod_consts_hash[i] == DEEP_HASH(mod_consts[i]));
75         CHECK_OBJECT_DEEP(mod_consts[i]); 75         CHECK_OBJECT_DEEP(mod_consts[i]);
76     } 76     }
77 } 77 }
78 #endif 78 #endif
79 79
80 // The module code objects. 80 // The module code objects.
n 81 static PyCodeObject *codeobj_195d2321b2aa68e4b2904ebcc9a72dfb; n
82 static PyCodeObject *codeobj_58f5270e8b8c923fb406bd54fefabbb5; 81 static PyCodeObject *codeobj_58f5270e8b8c923fb406bd54fefabbb5;
83 static PyCodeObject *codeobj_f41a96c813888e8a179d4cfa73dc3d73; 82 static PyCodeObject *codeobj_f41a96c813888e8a179d4cfa73dc3d73;
84 /* For use in "MainProgram.c". */ 83 /* For use in "MainProgram.c". */
85 PyCodeObject *codeobj_main = NULL; 84 PyCodeObject *codeobj_main = NULL;
86 85
87 static void createModuleCodeObjects(void) { 86 static void createModuleCodeObjects(void) {
88     module_filename_obj = mod_consts[4]; CHECK_OBJECT(module_filename_obj); 87     module_filename_obj = mod_consts[4]; CHECK_OBJECT(module_filename_obj);
n 89     codeobj_195d2321b2aa68e4b2904ebcc9a72dfb = MAKE_CODEOBJECT(module_filename_obj, 27, CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE, mod_consts[16], mod_consts[17], NULL, 1, 0, 0); n
90     codeobj_58f5270e8b8c923fb406bd54fefabbb5 = MAKE_CODEOBJECT(module_filename_obj, 1, CO_NOFREE, mod_consts[18], NULL, NULL, 0, 0, 0); 88     codeobj_58f5270e8b8c923fb406bd54fefabbb5 = MAKE_CODEOBJECT(module_filename_obj, 1, CO_NOFREE, mod_consts[16], NULL, NULL, 0, 0, 0);
91     codeobj_f41a96c813888e8a179d4cfa73dc3d73 = MAKE_CODEOBJECT(module_filename_obj, 22, CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE, mod_consts[9], mod_consts[19], NULL, 0, 0, 0); 89     codeobj_f41a96c813888e8a179d4cfa73dc3d73 = MAKE_CODEOBJECT(module_filename_obj, 22, CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE, mod_consts[9], mod_consts[17], NULL, 0, 0, 0);
92 } 90 }
93 91
94 // The module function declarations. 92 // The module function declarations.
95 static PyObject *MAKE_FUNCTION___main__$$$function__1_calledRepeatedly(); 93 static PyObject *MAKE_FUNCTION___main__$$$function__1_calledRepeatedly();
96 94
102     NUITKA_MAY_BE_UNUSED bool had_error = ERROR_OCCURRED(); 100     NUITKA_MAY_BE_UNUSED bool had_error = ERROR_OCCURRED();
103 #endif 101 #endif
104 102
105     // Local variable declarations. 103     // Local variable declarations.
106     PyObject *var_l = NULL; 104     PyObject *var_l = NULL;
n 107     PyObject *outline_0_var_x = NULL; n
108     PyObject *tmp_listcomp_1__$0 = NULL;
109     PyObject *tmp_listcomp_1__contraction = NULL;
110     PyObject *tmp_listcomp_1__iter_value_0 = NULL;
111     struct Nuitka_FrameObject *frame_f41a96c813888e8a179d4cfa73dc3d73; 105     struct Nuitka_FrameObject *frame_f41a96c813888e8a179d4cfa73dc3d73;
112     NUITKA_MAY_BE_UNUSED char const *type_description_1 = NULL; 106     NUITKA_MAY_BE_UNUSED char const *type_description_1 = NULL;
113     NUITKA_MAY_BE_UNUSED nuitka_void tmp_unused; 107     NUITKA_MAY_BE_UNUSED nuitka_void tmp_unused;
114     PyObject *exception_type = NULL; 108     PyObject *exception_type = NULL;
115     PyObject *exception_value = NULL; 109     PyObject *exception_value = NULL;
116     PyTracebackObject *exception_tb = NULL; 110     PyTracebackObject *exception_tb = NULL;
117     NUITKA_MAY_BE_UNUSED int exception_lineno = 0; 111     NUITKA_MAY_BE_UNUSED int exception_lineno = 0;
n 118     struct Nuitka_FrameObject *frame_195d2321b2aa68e4b2904ebcc9a72dfb_2; n 112     PyObject *tmp_return_value = NULL;
119     NUITKA_MAY_BE_UNUSED char const *type_description_2 = NULL; 113     static struct Nuitka_FrameObject *cache_frame_f41a96c813888e8a179d4cfa73dc3d73 = NULL;
120     bool tmp_result;
121     PyObject *exception_keeper_type_1; 114     PyObject *exception_keeper_type_1;
122     PyObject *exception_keeper_value_1; 115     PyObject *exception_keeper_value_1;
123     PyTracebackObject *exception_keeper_tb_1; 116     PyTracebackObject *exception_keeper_tb_1;
124     NUITKA_MAY_BE_UNUSED int exception_keeper_lineno_1; 117     NUITKA_MAY_BE_UNUSED int exception_keeper_lineno_1;
n 125     static struct Nuitka_FrameObject *cache_frame_195d2321b2aa68e4b2904ebcc9a72dfb_2 = NULL; n
126     PyObject *exception_keeper_type_2;
127     PyObject *exception_keeper_value_2;
128     PyTracebackObject *exception_keeper_tb_2;
129     NUITKA_MAY_BE_UNUSED int exception_keeper_lineno_2;
130     PyObject *tmp_return_value = NULL;
131     static struct Nuitka_FrameObject *cache_frame_f41a96c813888e8a179d4cfa73dc3d73 = NULL;
132     PyObject *exception_keeper_type_3;
133     PyObject *exception_keeper_value_3;
134     PyTracebackObject *exception_keeper_tb_3;
135     NUITKA_MAY_BE_UNUSED int exception_keeper_lineno_3;
136 118
137     // Actual function body. 119     // Actual function body.
138     // Tried code: 120     // Tried code:
139     if (isFrameUnusable(cache_frame_f41a96c813888e8a179d4cfa73dc3d73)) { 121     if (isFrameUnusable(cache_frame_f41a96c813888e8a179d4cfa73dc3d73)) {
140         Py_XDECREF(cache_frame_f41a96c813888e8a179d4cfa73dc3d73); 122         Py_XDECREF(cache_frame_f41a96c813888e8a179d4cfa73dc3d73);
182             goto frame_exception_exit_1; 164             goto frame_exception_exit_1;
183         } 165         }
184     } 166     }
185     { 167     {
186         PyObject *tmp_assign_source_1; 168         PyObject *tmp_assign_source_1;
n 187         { n
188             PyObject *tmp_assign_source_2;
189             PyObject *tmp_iter_arg_1;
190             tmp_iter_arg_1 = mod_consts[1]; 169         tmp_assign_source_1 = mod_consts[1];
191             tmp_assign_source_2 = MAKE_ITERATOR_INFALLIBLE(tmp_iter_arg_1); 170         assert(var_l == NULL);
192             assert(!(tmp_assign_source_2 == NULL));
193             assert(tmp_listcomp_1__$0 == NULL);
194             tmp_listcomp_1__$0 = tmp_assign_source_2;
195         }
196         {
197             PyObject *tmp_assign_source_3;
198             tmp_assign_source_3 = PyList_New(0);
199             assert(tmp_listcomp_1__contraction == NULL);
200             tmp_listcomp_1__contraction = tmp_assign_source_3;
201         }
202         // Tried code:
203         if (isFrameUnusable(cache_frame_195d2321b2aa68e4b2904ebcc9a72dfb_2)) {
204             Py_XDECREF(cache_frame_195d2321b2aa68e4b2904ebcc9a72dfb_2);
205  
206 #if _DEBUG_REFCOUNTS
207             if (cache_frame_195d2321b2aa68e4b2904ebcc9a72dfb_2 == NULL) {
208                 count_active_frame_cache_instances += 1;
209             } else {
210                 count_released_frame_cache_instances += 1;
211             }
212             count_allocated_frame_cache_instances += 1;
213 #endif
214             cache_frame_195d2321b2aa68e4b2904ebcc9a72dfb_2 = MAKE_FUNCTION_FRAME(codeobj_195d2321b2aa68e4b2904ebcc9a72dfb, module___main__, sizeof(void *));
215 #if _DEBUG_REFCOUNTS
216         } else {
217             count_hit_frame_cache_instances += 1;
218 #endif
219         }
220         assert(cache_frame_195d2321b2aa68e4b2904ebcc9a72dfb_2->m_type_description == NULL);
221         frame_195d2321b2aa68e4b2904ebcc9a72dfb_2 = cache_frame_195d2321b2aa68e4b2904ebcc9a72dfb_2;
222  
223         // Push the new frame as the currently active one.
224         pushFrameStack(frame_195d2321b2aa68e4b2904ebcc9a72dfb_2);
225  
226         // Mark the frame object as in use, ref count 1 will be up for reuse.
227         assert(Py_REFCNT(frame_195d2321b2aa68e4b2904ebcc9a72dfb_2) == 2); // Frame stack
228  
229         // Framed code:
230         // Tried code:
231         loop_start_1:;
232         {
233             PyObject *tmp_next_source_1;
234             PyObject *tmp_assign_source_4;
235             CHECK_OBJECT(tmp_listcomp_1__$0);
236             tmp_next_source_1 = tmp_listcomp_1__$0;
237             tmp_assign_source_4 = ITERATOR_NEXT(tmp_next_source_1);
238             if (tmp_assign_source_4 == NULL) {
239                 if (CHECK_AND_CLEAR_STOP_ITERATION_OCCURRED()) {
240  
241                     goto loop_end_1;
242                 } else {
243  
244                     FETCH_ERROR_OCCURRED(&exception_type, &exception_value, &exception_tb);
245                     type_description_2 = "o";
246                     exception_lineno = 27;
247                     goto try_except_handler_3;
248                 }
249             }
250  
251             {
252                 PyObject *old = tmp_listcomp_1__iter_value_0;
253                 tmp_listcomp_1__iter_value_0 = tmp_assign_source_4;
254                 Py_XDECREF(old);
255             }
256  
257         }
258         {
259             PyObject *tmp_assign_source_5;
260             CHECK_OBJECT(tmp_listcomp_1__iter_value_0);
261             tmp_assign_source_5 = tmp_listcomp_1__iter_value_0;
262             {
263                 PyObject *old = outline_0_var_x;
264                 outline_0_var_x = tmp_assign_source_5;
265                 Py_INCREF(outline_0_var_x);
266                 Py_XDECREF(old);
267             }
268  
269         }
270         {
271             PyObject *tmp_append_list_1;
272             PyObject *tmp_append_value_1;
273             CHECK_OBJECT(tmp_listcomp_1__contraction);
274             tmp_append_list_1 = tmp_listcomp_1__contraction;
275             CHECK_OBJECT(outline_0_var_x);
276             tmp_append_value_1 = outline_0_var_x;
277             assert(PyList_Check(tmp_append_list_1));
278             tmp_result = LIST_APPEND0(tmp_append_list_1, tmp_append_value_1);
279             if (tmp_result == false) {
280                 assert(ERROR_OCCURRED());
281  
282                 FETCH_ERROR_OCCURRED(&exception_type, &exception_value, &exception_tb);
283  
284  
285                 exception_lineno = 27;
286                 type_description_2 = "o";
287                 goto try_except_handler_3;
288             }
289         }
290         if (CONSIDER_THREADING() == false) {
291             assert(ERROR_OCCURRED());
292  
293             FETCH_ERROR_OCCURRED(&exception_type, &exception_value, &exception_tb);
294  
295  
296             exception_lineno = 27;
297             type_description_2 = "o";
298             goto try_except_handler_3;
299         }
300         goto loop_start_1;
301         loop_end_1:;
302         CHECK_OBJECT(tmp_listcomp_1__contraction);
303         tmp_assign_source_1 = tmp_listcomp_1__contraction;
304         Py_INCREF(tmp_assign_source_1); 171         Py_INCREF(tmp_assign_source_1);
n 305         goto try_return_handler_3; n
306         NUITKA_CANNOT_GET_HERE("tried codes exits in all cases");
307         return NULL;
308         // Return handler code:
309         try_return_handler_3:;
310         CHECK_OBJECT(tmp_listcomp_1__$0);
311         Py_DECREF(tmp_listcomp_1__$0);
312         tmp_listcomp_1__$0 = NULL;
313         CHECK_OBJECT(tmp_listcomp_1__contraction);
314         Py_DECREF(tmp_listcomp_1__contraction);
315         tmp_listcomp_1__contraction = NULL;
316         Py_XDECREF(tmp_listcomp_1__iter_value_0);
317         tmp_listcomp_1__iter_value_0 = NULL;
318         goto frame_return_exit_2;
319         // Exception handler code:
320         try_except_handler_3:;
321         exception_keeper_type_1 = exception_type;
322         exception_keeper_value_1 = exception_value;
323         exception_keeper_tb_1 = exception_tb;
324         exception_keeper_lineno_1 = exception_lineno;
325         exception_type = NULL;
326         exception_value = NULL;
327         exception_tb = NULL;
328         exception_lineno = 0;
329  
330         CHECK_OBJECT(tmp_listcomp_1__$0);
331         Py_DECREF(tmp_listcomp_1__$0);
332         tmp_listcomp_1__$0 = NULL;
333         CHECK_OBJECT(tmp_listcomp_1__contraction);
334         Py_DECREF(tmp_listcomp_1__contraction);
335         tmp_listcomp_1__contraction = NULL;
336         Py_XDECREF(tmp_listcomp_1__iter_value_0);
337         tmp_listcomp_1__iter_value_0 = NULL;
338         // Re-raise.
339         exception_type = exception_keeper_type_1;
340         exception_value = exception_keeper_value_1;
341         exception_tb = exception_keeper_tb_1;
342         exception_lineno = exception_keeper_lineno_1;
343  
344         goto frame_exception_exit_2;
345         // End of try:
346  
347 #if 0
348         RESTORE_FRAME_EXCEPTION(frame_195d2321b2aa68e4b2904ebcc9a72dfb_2);
349 #endif
350  
351         // Put the previous frame back on top.
352         popFrameStack();
353  
354         goto frame_no_exception_1;
355  
356         frame_return_exit_2:;
357 #if 0
358         RESTORE_FRAME_EXCEPTION(frame_195d2321b2aa68e4b2904ebcc9a72dfb_2);
359 #endif
360  
361         // Put the previous frame back on top.
362         popFrameStack();
363  
364         goto try_return_handler_2;
365  
366         frame_exception_exit_2:;
367  
368 #if 0
369         RESTORE_FRAME_EXCEPTION(frame_195d2321b2aa68e4b2904ebcc9a72dfb_2);
370 #endif
371  
372         if (exception_tb == NULL) {
373             exception_tb = MAKE_TRACEBACK(frame_195d2321b2aa68e4b2904ebcc9a72dfb_2, exception_lineno);
374         } else if (exception_tb->tb_frame != &frame_195d2321b2aa68e4b2904ebcc9a72dfb_2->m_frame) {
375             exception_tb = ADD_TRACEBACK(exception_tb, frame_195d2321b2aa68e4b2904ebcc9a72dfb_2, exception_lineno);
376         }
377  
378         // Attaches locals to frame if any.
379         Nuitka_Frame_AttachLocals(
380             frame_195d2321b2aa68e4b2904ebcc9a72dfb_2,
381             type_description_2,
382             outline_0_var_x
383         );
384  
385  
386         // Release cached frame if used for exception.
387         if (frame_195d2321b2aa68e4b2904ebcc9a72dfb_2 == cache_frame_195d2321b2aa68e4b2904ebcc9a72dfb_2) {
388 #if _DEBUG_REFCOUNTS
389             count_active_frame_cache_instances -= 1;
390             count_released_frame_cache_instances += 1;
391 #endif
392  
393             Py_DECREF(cache_frame_195d2321b2aa68e4b2904ebcc9a72dfb_2);
394             cache_frame_195d2321b2aa68e4b2904ebcc9a72dfb_2 = NULL;
395         }
396  
397         assertFrameObject(frame_195d2321b2aa68e4b2904ebcc9a72dfb_2);
398  
399         // Put the previous frame back on top.
400         popFrameStack();
401  
402         // Return the error.
403         goto nested_frame_exit_1;
404  
405         frame_no_exception_1:;
406         goto skip_nested_handling_1;
407         nested_frame_exit_1:;
408         type_description_1 = "o";
409         goto try_except_handler_2;
410         skip_nested_handling_1:;
411         NUITKA_CANNOT_GET_HERE("tried codes exits in all cases");
412         return NULL;
413         // Return handler code:
414         try_return_handler_2:;
415         Py_XDECREF(outline_0_var_x);
416         outline_0_var_x = NULL;
417         goto outline_result_1;
418         // Exception handler code:
419         try_except_handler_2:;
420         exception_keeper_type_2 = exception_type;
421         exception_keeper_value_2 = exception_value;
422         exception_keeper_tb_2 = exception_tb;
423         exception_keeper_lineno_2 = exception_lineno;
424         exception_type = NULL;
425         exception_value = NULL;
426         exception_tb = NULL;
427         exception_lineno = 0;
428  
429         Py_XDECREF(outline_0_var_x);
430         outline_0_var_x = NULL;
431         // Re-raise.
432         exception_type = exception_keeper_type_2;
433         exception_value = exception_keeper_value_2;
434         exception_tb = exception_keeper_tb_2;
435         exception_lineno = exception_keeper_lineno_2;
436  
437         goto outline_exception_1;
438         // End of try:
439         NUITKA_CANNOT_GET_HERE("Return statement must have exited already.");
440         return NULL;
441         outline_exception_1:;
442         exception_lineno = 27;
443         goto frame_exception_exit_1;
444         outline_result_1:;
445         assert(var_l == NULL);
446         var_l = tmp_assign_source_1; 172         var_l = tmp_assign_source_1;
447     } 173     }
448     { 174     {
449         PyObject *tmp_tuple_element_1; 175         PyObject *tmp_tuple_element_1;
450         CHECK_OBJECT(var_l); 176         CHECK_OBJECT(var_l);
483 #endif 209 #endif
484 210
485     // Put the previous frame back on top. 211     // Put the previous frame back on top.
486     popFrameStack(); 212     popFrameStack();
487 213
n 488     goto frame_no_exception_2; n 214     goto frame_no_exception_1;
489 215
490     frame_return_exit_1:; 216     frame_return_exit_1:;
491 #if 0 217 #if 0
492     RESTORE_FRAME_EXCEPTION(frame_f41a96c813888e8a179d4cfa73dc3d73); 218     RESTORE_FRAME_EXCEPTION(frame_f41a96c813888e8a179d4cfa73dc3d73);
493 #endif 219 #endif
534     popFrameStack(); 260     popFrameStack();
535 261
536     // Return the error. 262     // Return the error.
537     goto try_except_handler_1; 263     goto try_except_handler_1;
538 264
n 539     frame_no_exception_2:; n 265     frame_no_exception_1:;
540     NUITKA_CANNOT_GET_HERE("tried codes exits in all cases"); 266     NUITKA_CANNOT_GET_HERE("tried codes exits in all cases");
541     return NULL; 267     return NULL;
542     // Return handler code: 268     // Return handler code:
543     try_return_handler_1:; 269     try_return_handler_1:;
544     CHECK_OBJECT(var_l); 270     CHECK_OBJECT(var_l);
545     Py_DECREF(var_l); 271     Py_DECREF(var_l);
546     var_l = NULL; 272     var_l = NULL;
547     goto function_return_exit; 273     goto function_return_exit;
548     // Exception handler code: 274     // Exception handler code:
549     try_except_handler_1:; 275     try_except_handler_1:;
n 550     exception_keeper_type_3 = exception_type; n 276     exception_keeper_type_1 = exception_type;
551     exception_keeper_value_3 = exception_value; 277     exception_keeper_value_1 = exception_value;
552     exception_keeper_tb_3 = exception_tb; 278     exception_keeper_tb_1 = exception_tb;
553     exception_keeper_lineno_3 = exception_lineno; 279     exception_keeper_lineno_1 = exception_lineno;
554     exception_type = NULL; 280     exception_type = NULL;
555     exception_value = NULL; 281     exception_value = NULL;
556     exception_tb = NULL; 282     exception_tb = NULL;
557     exception_lineno = 0; 283     exception_lineno = 0;
558 284
559     Py_XDECREF(var_l); 285     Py_XDECREF(var_l);
560     var_l = NULL; 286     var_l = NULL;
561     // Re-raise. 287     // Re-raise.
t 562     exception_type = exception_keeper_type_3; t 288     exception_type = exception_keeper_type_1;
563     exception_value = exception_keeper_value_3; 289     exception_value = exception_keeper_value_1;
564     exception_tb = exception_keeper_tb_3; 290     exception_tb = exception_keeper_tb_1;
565     exception_lineno = exception_keeper_lineno_3; 291     exception_lineno = exception_keeper_lineno_1;
566 292
567     goto function_exception_exit; 293     goto function_exception_exit;
568     // End of try: 294     // End of try:
569 295
570     NUITKA_CANNOT_GET_HERE("Return statement must have exited already."); 296     NUITKA_CANNOT_GET_HERE("Return statement must have exited already.");