Construct ListContraction

Performance Diagrams

Construct ListContraction 002000000020000000400000004000000060000000600000008000000080000000100000000100000000120000000120000000140000000140000000160000000160000000CPython 2.7Nuitka (main)Nuitka (develop)Nuitka (factory)16800496988.11538461538461257.0CPython 2.764964022240.03846153846155408.5610127521792Nuitka (main)64961187391.96153846153845408.56518270095836Nuitka (develop)64961187543.8846153846154408.56518270095836Nuitka (factory)Construct ListContractionTicks Construct ListContraction 002000000020000000400000004000000060000000600000008000000080000000100000000100000000120000000120000000140000000140000000160000000160000000180000000180000000200000000200000000CPython 3.8Nuitka (main)Nuitka (develop)Nuitka (factory)21368424988.11538461538461257.0CPython 3.864408756240.03846153846155429.62980794782936Nuitka (main)64408825391.96153846153845429.62972815270354Nuitka (develop)64408825543.8846153846154429.62972815270354Nuitka (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_1af4aae97f372c0bf57864d7cfe796c4; n
82 static PyCodeObject *codeobj_e2a56102aef1a2df2d4bc8360d868d39; 81 static PyCodeObject *codeobj_e2a56102aef1a2df2d4bc8360d868d39;
83 static PyCodeObject *codeobj_d52023901f89b18e041b047cc67f4a9e; 82 static PyCodeObject *codeobj_d52023901f89b18e041b047cc67f4a9e;
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_1af4aae97f372c0bf57864d7cfe796c4 = 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_e2a56102aef1a2df2d4bc8360d868d39 = MAKE_CODEOBJECT(module_filename_obj, 1, CO_NOFREE, mod_consts[18], NULL, NULL, 0, 0, 0); 88     codeobj_e2a56102aef1a2df2d4bc8360d868d39 = MAKE_CODEOBJECT(module_filename_obj, 1, CO_NOFREE, mod_consts[16], NULL, NULL, 0, 0, 0);
91     codeobj_d52023901f89b18e041b047cc67f4a9e = MAKE_CODEOBJECT(module_filename_obj, 22, CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE, mod_consts[9], mod_consts[19], NULL, 0, 0, 0); 89     codeobj_d52023901f89b18e041b047cc67f4a9e = 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
101 #ifndef __NUITKA_NO_ASSERT__ 99 #ifndef __NUITKA_NO_ASSERT__
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.
n 106     PyObject *var_l = NULL; n
107     PyObject *outline_0_var_x = NULL;
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_d52023901f89b18e041b047cc67f4a9e; 104     struct Nuitka_FrameObject *frame_d52023901f89b18e041b047cc67f4a9e;
112     NUITKA_MAY_BE_UNUSED char const *type_description_1 = NULL; 105     NUITKA_MAY_BE_UNUSED char const *type_description_1 = NULL;
113     NUITKA_MAY_BE_UNUSED nuitka_void tmp_unused; 106     NUITKA_MAY_BE_UNUSED nuitka_void tmp_unused;
114     PyObject *exception_type = NULL; 107     PyObject *exception_type = NULL;
115     PyObject *exception_value = NULL; 108     PyObject *exception_value = NULL;
116     PyTracebackObject *exception_tb = NULL; 109     PyTracebackObject *exception_tb = NULL;
117     NUITKA_MAY_BE_UNUSED int exception_lineno = 0; 110     NUITKA_MAY_BE_UNUSED int exception_lineno = 0;
n 118     struct Nuitka_FrameObject *frame_1af4aae97f372c0bf57864d7cfe796c4_2; n
119     NUITKA_MAY_BE_UNUSED char const *type_description_2 = NULL;
120     bool tmp_result;
121     PyObject *exception_keeper_type_1;
122     PyObject *exception_keeper_value_1;
123     PyTracebackObject *exception_keeper_tb_1;
124     NUITKA_MAY_BE_UNUSED int exception_keeper_lineno_1;
125     static struct Nuitka_FrameObject *cache_frame_1af4aae97f372c0bf57864d7cfe796c4_2 = NULL;
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; 111     PyObject *tmp_return_value = NULL;
131     static struct Nuitka_FrameObject *cache_frame_d52023901f89b18e041b047cc67f4a9e = NULL; 112     static struct Nuitka_FrameObject *cache_frame_d52023901f89b18e041b047cc67f4a9e = NULL;
n 132     PyObject *exception_keeper_type_3; n
133     PyObject *exception_keeper_value_3;
134     PyTracebackObject *exception_keeper_tb_3;
135     NUITKA_MAY_BE_UNUSED int exception_keeper_lineno_3;
136 113
137     // Actual function body. 114     // Actual function body.
n 138     // Tried code: n
139     if (isFrameUnusable(cache_frame_d52023901f89b18e041b047cc67f4a9e)) { 115     if (isFrameUnusable(cache_frame_d52023901f89b18e041b047cc67f4a9e)) {
140         Py_XDECREF(cache_frame_d52023901f89b18e041b047cc67f4a9e); 116         Py_XDECREF(cache_frame_d52023901f89b18e041b047cc67f4a9e);
141 117
142 #if _DEBUG_REFCOUNTS 118 #if _DEBUG_REFCOUNTS
143         if (cache_frame_d52023901f89b18e041b047cc67f4a9e == NULL) { 119         if (cache_frame_d52023901f89b18e041b047cc67f4a9e == NULL) {
176 152
177             FETCH_ERROR_OCCURRED(&exception_type, &exception_value, &exception_tb); 153             FETCH_ERROR_OCCURRED(&exception_type, &exception_value, &exception_tb);
178 154
179 155
180             exception_lineno = 24; 156             exception_lineno = 24;
n 181             type_description_1 = "o"; n 157             type_description_1 = "N";
182             goto frame_exception_exit_1; 158             goto frame_exception_exit_1;
183         } 159         }
184     } 160     }
185     { 161     {
n 186         PyObject *tmp_assign_source_1; n
187         {
188             PyObject *tmp_assign_source_2;
189             PyObject *tmp_iter_arg_1;
190             tmp_iter_arg_1 = mod_consts[1];
191             tmp_assign_source_2 = MAKE_ITERATOR_INFALLIBLE(tmp_iter_arg_1);
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_1af4aae97f372c0bf57864d7cfe796c4_2)) {
204             Py_XDECREF(cache_frame_1af4aae97f372c0bf57864d7cfe796c4_2);
205  
206 #if _DEBUG_REFCOUNTS
207             if (cache_frame_1af4aae97f372c0bf57864d7cfe796c4_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_1af4aae97f372c0bf57864d7cfe796c4_2 = MAKE_FUNCTION_FRAME(codeobj_1af4aae97f372c0bf57864d7cfe796c4, module___main__, sizeof(void *));
215 #if _DEBUG_REFCOUNTS
216         } else {
217             count_hit_frame_cache_instances += 1;
218 #endif
219         }
220         assert(cache_frame_1af4aae97f372c0bf57864d7cfe796c4_2->m_type_description == NULL);
221         frame_1af4aae97f372c0bf57864d7cfe796c4_2 = cache_frame_1af4aae97f372c0bf57864d7cfe796c4_2;
222  
223         // Push the new frame as the currently active one.
224         pushFrameStack(frame_1af4aae97f372c0bf57864d7cfe796c4_2);
225  
226         // Mark the frame object as in use, ref count 1 will be up for reuse.
227         assert(Py_REFCNT(frame_1af4aae97f372c0bf57864d7cfe796c4_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);
305         goto try_return_handler_3;
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_1af4aae97f372c0bf57864d7cfe796c4_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_1af4aae97f372c0bf57864d7cfe796c4_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_1af4aae97f372c0bf57864d7cfe796c4_2);
370 #endif
371  
372         if (exception_tb == NULL) {
373             exception_tb = MAKE_TRACEBACK(frame_1af4aae97f372c0bf57864d7cfe796c4_2, exception_lineno);
374         } else if (exception_tb->tb_frame != &frame_1af4aae97f372c0bf57864d7cfe796c4_2->m_frame) {
375             exception_tb = ADD_TRACEBACK(exception_tb, frame_1af4aae97f372c0bf57864d7cfe796c4_2, exception_lineno);
376         }
377  
378         // Attaches locals to frame if any.
379         Nuitka_Frame_AttachLocals(
380             frame_1af4aae97f372c0bf57864d7cfe796c4_2,
381             type_description_2,
382             outline_0_var_x
383         );
384  
385  
386         // Release cached frame if used for exception.
387         if (frame_1af4aae97f372c0bf57864d7cfe796c4_2 == cache_frame_1af4aae97f372c0bf57864d7cfe796c4_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_1af4aae97f372c0bf57864d7cfe796c4_2);
394             cache_frame_1af4aae97f372c0bf57864d7cfe796c4_2 = NULL;
395         }
396  
397         assertFrameObject(frame_1af4aae97f372c0bf57864d7cfe796c4_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;
447     }
448     {
449         PyObject *tmp_tuple_element_1; 162         PyObject *tmp_tuple_element_1;
n 450         CHECK_OBJECT(var_l); n
451         tmp_tuple_element_1 = var_l; 163         tmp_tuple_element_1 = mod_consts[1];
452         tmp_return_value = PyTuple_New(2); 164         tmp_return_value = PyTuple_New(2);
453         PyTuple_SET_ITEM0(tmp_return_value, 0, tmp_tuple_element_1); 165         PyTuple_SET_ITEM0(tmp_return_value, 0, tmp_tuple_element_1);
454         tmp_tuple_element_1 = GET_STRING_DICT_VALUE(moduledict___main__, (Nuitka_StringObject *)mod_consts[2]); 166         tmp_tuple_element_1 = GET_STRING_DICT_VALUE(moduledict___main__, (Nuitka_StringObject *)mod_consts[2]);
455 167
456         if (unlikely(tmp_tuple_element_1 == NULL)) { 168         if (unlikely(tmp_tuple_element_1 == NULL)) {
462 174
463             FETCH_ERROR_OCCURRED(&exception_type, &exception_value, &exception_tb); 175             FETCH_ERROR_OCCURRED(&exception_type, &exception_value, &exception_tb);
464 176
465 177
466             exception_lineno = 36; 178             exception_lineno = 36;
n 467             type_description_1 = "o"; n 179             type_description_1 = "N";
468             goto tuple_build_exception_1; 180             goto tuple_build_exception_1;
469         } 181         }
470         PyTuple_SET_ITEM0(tmp_return_value, 1, tmp_tuple_element_1); 182         PyTuple_SET_ITEM0(tmp_return_value, 1, tmp_tuple_element_1);
471         goto tuple_build_noexception_1; 183         goto tuple_build_noexception_1;
472         // Exception handling pass through code for tuple_build: 184         // Exception handling pass through code for tuple_build:
483 #endif 195 #endif
484 196
485     // Put the previous frame back on top. 197     // Put the previous frame back on top.
486     popFrameStack(); 198     popFrameStack();
487 199
n 488     goto frame_no_exception_2; n 200     goto frame_no_exception_1;
489 201
490     frame_return_exit_1:; 202     frame_return_exit_1:;
491 #if 0 203 #if 0
492     RESTORE_FRAME_EXCEPTION(frame_d52023901f89b18e041b047cc67f4a9e); 204     RESTORE_FRAME_EXCEPTION(frame_d52023901f89b18e041b047cc67f4a9e);
493 #endif 205 #endif
494 206
495     // Put the previous frame back on top. 207     // Put the previous frame back on top.
496     popFrameStack(); 208     popFrameStack();
497 209
n 498     goto try_return_handler_1; n 210     goto function_return_exit;
499 211
500     frame_exception_exit_1:; 212     frame_exception_exit_1:;
501 213
502 #if 0 214 #if 0
503     RESTORE_FRAME_EXCEPTION(frame_d52023901f89b18e041b047cc67f4a9e); 215     RESTORE_FRAME_EXCEPTION(frame_d52023901f89b18e041b047cc67f4a9e);
511 223
512     // Attaches locals to frame if any. 224     // Attaches locals to frame if any.
513     Nuitka_Frame_AttachLocals( 225     Nuitka_Frame_AttachLocals(
514         frame_d52023901f89b18e041b047cc67f4a9e, 226         frame_d52023901f89b18e041b047cc67f4a9e,
515         type_description_1, 227         type_description_1,
n 516         var_l n 228         NULL
517     ); 229     );
518 230
519 231
520     // Release cached frame if used for exception. 232     // Release cached frame if used for exception.
521     if (frame_d52023901f89b18e041b047cc67f4a9e == cache_frame_d52023901f89b18e041b047cc67f4a9e) { 233     if (frame_d52023901f89b18e041b047cc67f4a9e == cache_frame_d52023901f89b18e041b047cc67f4a9e) {
532 244
533     // Put the previous frame back on top. 245     // Put the previous frame back on top.
534     popFrameStack(); 246     popFrameStack();
535 247
536     // Return the error. 248     // Return the error.
n 537     goto try_except_handler_1; n
538  
539     frame_no_exception_2:;
540     NUITKA_CANNOT_GET_HERE("tried codes exits in all cases");
541     return NULL;
542     // Return handler code:
543     try_return_handler_1:;
544     CHECK_OBJECT(var_l);
545     Py_DECREF(var_l);
546     var_l = NULL;
547     goto function_return_exit;
548     // Exception handler code:
549     try_except_handler_1:;
550     exception_keeper_type_3 = exception_type;
551     exception_keeper_value_3 = exception_value;
552     exception_keeper_tb_3 = exception_tb;
553     exception_keeper_lineno_3 = exception_lineno;
554     exception_type = NULL;
555     exception_value = NULL;
556     exception_tb = NULL;
557     exception_lineno = 0;
558  
559     Py_XDECREF(var_l);
560     var_l = NULL;
561     // Re-raise.
562     exception_type = exception_keeper_type_3;
563     exception_value = exception_keeper_value_3;
564     exception_tb = exception_keeper_tb_3;
565     exception_lineno = exception_keeper_lineno_3;
566  
567     goto function_exception_exit; 249     goto function_exception_exit;
t 568     // End of try: t 250  
251     frame_no_exception_1:;
569 252
570     NUITKA_CANNOT_GET_HERE("Return statement must have exited already."); 253     NUITKA_CANNOT_GET_HERE("Return statement must have exited already.");
571     return NULL; 254     return NULL;
572 255
573 function_exception_exit: 256 function_exception_exit: