Construct LoopSmallRange

Performance Diagrams

Construct LoopSmallRange 00100000001000000020000000200000003000000030000000400000004000000050000000500000006000000060000000700000007000000080000000800000009000000090000000100000000100000000110000000110000000CPython 2.7Nuitka (master)Nuitka (develop)Nuitka (factory)11046100788.11538461538461257.0CPython 2.748263994240.03846153846155396.14266406627166Nuitka (master)48262673391.96153846153845396.1456193120361Nuitka (develop)48260559543.8846153846154396.15034860011036Nuitka (factory)Construct LoopSmallRangeTicks Construct LoopSmallRange 00100000001000000020000000200000003000000030000000400000004000000050000000500000006000000060000000700000007000000080000000800000009000000090000000100000000100000000110000000110000000120000000120000000130000000130000000140000000140000000CPython 3.5Nuitka (master)Nuitka (develop)Nuitka (factory)14571574988.11538461538461257.0CPython 3.589040203240.03846153846155353.11452052500465Nuitka (master)89040198391.96153846153845353.11452900436893Nuitka (develop)89040168543.8846153846154353.11457988055486Nuitka (factory)Construct LoopSmallRangeTicks

Source Code with Construct

module_value1 = 5
module_value2 = 3

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

    # Make sure we have a local variable x anyway
    x = 2

    local_value = module_value1

# construct_begin
    for x in range(local_value, local_value+3):
        pass
# construct_end

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

print("OK.")

Source Code without Construct

module_value1 = 5
module_value2 = 3

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

    # Make sure we have a local variable x anyway
    x = 2

    local_value = module_value1

# construct_begin




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

print("OK.")

Context Diff of Source Code


Construct
Baseline
29     x = 2 29     x = 2
30 30
31     local_value = module_value1 31     local_value = module_value1
32 32
33 # construct_begin 33 # construct_begin
t 34     for x in range(local_value, local_value+3): t 34  
35         pass 35  
36 # construct_end 36  
37 37
38 import itertools 38 import itertools
39 for x in itertools.repeat(None, 50000): 39 for x in itertools.repeat(None, 50000):
40     calledRepeatedly() 40     calledRepeatedly()
41 41

Context Diff of Generated Code


Construct
Baseline
33 /* The declarations of module constants used, if any. */ 33 /* The declarations of module constants used, if any. */
34 static PyObject *const_str_plain_itertools; 34 static PyObject *const_str_plain_itertools;
35 extern PyObject *const_str_plain___file__; 35 extern PyObject *const_str_plain___file__;
36 extern PyObject *const_int_0; 36 extern PyObject *const_int_0;
37 extern PyObject *const_str_plain_print; 37 extern PyObject *const_str_plain_print;
n n 38 static PyObject *const_int_pos_50000;
38 static PyObject *const_int_pos_3; 39 static PyObject *const_int_pos_3;
n 39 static PyObject *const_int_pos_50000; n
40 static PyObject *const_str_plain_local_value; 40 static PyObject *const_str_plain_local_value;
41 static PyObject *const_str_plain_module_value2; 41 static PyObject *const_str_plain_module_value2;
42 static PyObject *const_tuple_str_digest_5ed1392909ad16e6227b8230f4582352_tuple; 42 static PyObject *const_tuple_str_digest_5ed1392909ad16e6227b8230f4582352_tuple;
43 static PyObject *const_str_plain_module_value1; 43 static PyObject *const_str_plain_module_value1;
44 static PyObject *const_str_plain_calledRepeatedly; 44 static PyObject *const_str_plain_calledRepeatedly;
48 extern PyObject *const_tuple_empty; 48 extern PyObject *const_tuple_empty;
49 static PyObject *const_str_digest_5ed1392909ad16e6227b8230f4582352; 49 static PyObject *const_str_digest_5ed1392909ad16e6227b8230f4582352;
50 static PyObject *const_int_pos_5; 50 static PyObject *const_int_pos_5;
51 static PyObject *const_str_digest_b82a348ac9fec8fad000fa23508c7e25; 51 static PyObject *const_str_digest_b82a348ac9fec8fad000fa23508c7e25;
52 static PyObject *const_str_plain_repeat; 52 static PyObject *const_str_plain_repeat;
n 53 static PyObject *const_int_pos_2; n
54 static PyObject *const_tuple_none_int_pos_50000_tuple; 53 static PyObject *const_tuple_none_int_pos_50000_tuple;
55 static PyObject *const_tuple_str_plain_x_str_plain_local_value_tuple; 54 static PyObject *const_tuple_str_plain_x_str_plain_local_value_tuple;
56 extern PyObject *const_str_plain___doc__; 55 extern PyObject *const_str_plain___doc__;
57 extern PyObject *const_str_plain___cached__; 56 extern PyObject *const_str_plain___cached__;
58 static PyObject *module_filename_obj; 57 static PyObject *module_filename_obj;
62 61
63 /* Function to create module private constants. */ 62 /* Function to create module private constants. */
64 static void createModuleConstants( void ) 63 static void createModuleConstants( void )
65 { 64 {
66     const_str_plain_itertools = UNSTREAM_STRING_ASCII(&constant_bin[ 73 ], 9, 1); 65     const_str_plain_itertools = UNSTREAM_STRING_ASCII(&constant_bin[ 73 ], 9, 1);
n n 66     const_int_pos_50000 = PyLong_FromUnsignedLong(50000ul);
67     const_int_pos_3 = PyLong_FromUnsignedLong(3ul); 67     const_int_pos_3 = PyLong_FromUnsignedLong(3ul);
n 68     const_int_pos_50000 = PyLong_FromUnsignedLong(50000ul); n
69     const_str_plain_local_value = UNSTREAM_STRING_ASCII(&constant_bin[ 82 ], 11, 1); 68     const_str_plain_local_value = UNSTREAM_STRING_ASCII(&constant_bin[ 82 ], 11, 1);
70     const_str_plain_module_value2 = UNSTREAM_STRING_ASCII(&constant_bin[ 93 ], 13, 1); 69     const_str_plain_module_value2 = UNSTREAM_STRING_ASCII(&constant_bin[ 93 ], 13, 1);
71     const_tuple_str_digest_5ed1392909ad16e6227b8230f4582352_tuple = PyTuple_New(1); 70     const_tuple_str_digest_5ed1392909ad16e6227b8230f4582352_tuple = PyTuple_New(1);
72     const_str_digest_5ed1392909ad16e6227b8230f4582352 = UNSTREAM_STRING_ASCII(&constant_bin[ 106 ], 3, 0); 71     const_str_digest_5ed1392909ad16e6227b8230f4582352 = UNSTREAM_STRING_ASCII(&constant_bin[ 106 ], 3, 0);
73     PyTuple_SET_ITEM(const_tuple_str_digest_5ed1392909ad16e6227b8230f4582352_tuple, 0, const_str_digest_5ed1392909ad16e6227b8230f4582352); Py_INCREF(const_str_digest_5ed1392909ad16e6227b8230f4582352); 72     PyTuple_SET_ITEM(const_tuple_str_digest_5ed1392909ad16e6227b8230f4582352_tuple, 0, const_str_digest_5ed1392909ad16e6227b8230f4582352); Py_INCREF(const_str_digest_5ed1392909ad16e6227b8230f4582352);
77     const_str_plain_None = UNSTREAM_STRING_ASCII(&constant_bin[ 117 ], 4, 1); 76     const_str_plain_None = UNSTREAM_STRING_ASCII(&constant_bin[ 117 ], 4, 1);
78     const_str_plain_x = UNSTREAM_STRING_ASCII(&constant_bin[ 121 ], 1, 1); 77     const_str_plain_x = UNSTREAM_STRING_ASCII(&constant_bin[ 121 ], 1, 1);
79     const_int_pos_5 = PyLong_FromUnsignedLong(5ul); 78     const_int_pos_5 = PyLong_FromUnsignedLong(5ul);
80     const_str_digest_b82a348ac9fec8fad000fa23508c7e25 = UNSTREAM_STRING_ASCII(&constant_bin[ 122 ], 39, 0); 79     const_str_digest_b82a348ac9fec8fad000fa23508c7e25 = UNSTREAM_STRING_ASCII(&constant_bin[ 122 ], 39, 0);
81     const_str_plain_repeat = UNSTREAM_STRING_ASCII(&constant_bin[ 161 ], 6, 1); 80     const_str_plain_repeat = UNSTREAM_STRING_ASCII(&constant_bin[ 161 ], 6, 1);
n 82     const_int_pos_2 = PyLong_FromUnsignedLong(2ul); n
83     const_tuple_none_int_pos_50000_tuple = PyTuple_New(2); 81     const_tuple_none_int_pos_50000_tuple = PyTuple_New(2);
84     PyTuple_SET_ITEM(const_tuple_none_int_pos_50000_tuple, 0, Py_None); Py_INCREF(Py_None); 82     PyTuple_SET_ITEM(const_tuple_none_int_pos_50000_tuple, 0, Py_None); Py_INCREF(Py_None);
85     PyTuple_SET_ITEM(const_tuple_none_int_pos_50000_tuple, 1, const_int_pos_50000); Py_INCREF(const_int_pos_50000); 83     PyTuple_SET_ITEM(const_tuple_none_int_pos_50000_tuple, 1, const_int_pos_50000); Py_INCREF(const_int_pos_50000);
86     const_tuple_str_plain_x_str_plain_local_value_tuple = PyTuple_New(2); 84     const_tuple_str_plain_x_str_plain_local_value_tuple = PyTuple_New(2);
87     PyTuple_SET_ITEM(const_tuple_str_plain_x_str_plain_local_value_tuple, 0, const_str_plain_x); Py_INCREF(const_str_plain_x); 85     PyTuple_SET_ITEM(const_tuple_str_plain_x_str_plain_local_value_tuple, 0, const_str_plain_x); Py_INCREF(const_str_plain_x);
124 #ifndef __NUITKA_NO_ASSERT__ 122 #ifndef __NUITKA_NO_ASSERT__
125     NUITKA_MAY_BE_UNUSED bool had_error = ERROR_OCCURRED(); 123     NUITKA_MAY_BE_UNUSED bool had_error = ERROR_OCCURRED();
126 #endif 124 #endif
127 125
128     // Local variable declarations. 126     // Local variable declarations.
n 129     PyObject *var_x = NULL; n
130     PyObject *var_local_value = NULL; 127     PyObject *var_local_value = NULL;
n 131     PyObject *tmp_for_loop_1__for_iterator = NULL; n
132     PyObject *tmp_for_loop_1__iter_value = NULL;
133     struct Nuitka_FrameObject *frame_feeae0f05f938108e0007898f79d7dfc; 128     struct Nuitka_FrameObject *frame_feeae0f05f938108e0007898f79d7dfc;
134     NUITKA_MAY_BE_UNUSED char const *type_description_1 = NULL; 129     NUITKA_MAY_BE_UNUSED char const *type_description_1 = NULL;
135     PyObject *exception_type = NULL; 130     PyObject *exception_type = NULL;
136     PyObject *exception_value = NULL; 131     PyObject *exception_value = NULL;
137     PyTracebackObject *exception_tb = NULL; 132     PyTracebackObject *exception_tb = NULL;
138     NUITKA_MAY_BE_UNUSED int exception_lineno = 0; 133     NUITKA_MAY_BE_UNUSED int exception_lineno = 0;
n n 134     static struct Nuitka_FrameObject *cache_frame_feeae0f05f938108e0007898f79d7dfc = NULL;
135     PyObject *tmp_return_value = NULL;
139     PyObject *exception_keeper_type_1; 136     PyObject *exception_keeper_type_1;
140     PyObject *exception_keeper_value_1; 137     PyObject *exception_keeper_value_1;
141     PyTracebackObject *exception_keeper_tb_1; 138     PyTracebackObject *exception_keeper_tb_1;
142     NUITKA_MAY_BE_UNUSED int exception_keeper_lineno_1; 139     NUITKA_MAY_BE_UNUSED int exception_keeper_lineno_1;
n 143     static struct Nuitka_FrameObject *cache_frame_feeae0f05f938108e0007898f79d7dfc = NULL; n
144     PyObject *tmp_return_value = NULL;
145     PyObject *exception_keeper_type_2;
146     PyObject *exception_keeper_value_2;
147     PyTracebackObject *exception_keeper_tb_2;
148     NUITKA_MAY_BE_UNUSED int exception_keeper_lineno_2;
149 140
150     // Actual function body. 141     // Actual function body.
151     // Tried code: 142     // Tried code:
152     MAKE_OR_REUSE_FRAME(cache_frame_feeae0f05f938108e0007898f79d7dfc, codeobj_feeae0f05f938108e0007898f79d7dfc, module___main__, sizeof(void *)+sizeof(void *)); 143     MAKE_OR_REUSE_FRAME(cache_frame_feeae0f05f938108e0007898f79d7dfc, codeobj_feeae0f05f938108e0007898f79d7dfc, module___main__, sizeof(void *)+sizeof(void *));
153     frame_feeae0f05f938108e0007898f79d7dfc = cache_frame_feeae0f05f938108e0007898f79d7dfc; 144     frame_feeae0f05f938108e0007898f79d7dfc = cache_frame_feeae0f05f938108e0007898f79d7dfc;
175             exception_tb = NULL; 166             exception_tb = NULL;
176             NORMALIZE_EXCEPTION(&exception_type, &exception_value, &exception_tb); 167             NORMALIZE_EXCEPTION(&exception_type, &exception_value, &exception_tb);
177             CHAIN_EXCEPTION(exception_value); 168             CHAIN_EXCEPTION(exception_value);
178 169
179             exception_lineno = 26; 170             exception_lineno = 26;
n 180             type_description_1 = "oo"; n 171             type_description_1 = "No";
181             goto frame_exception_exit_1; 172             goto frame_exception_exit_1;
182         } 173         }
183 174
184     } 175     }
185     { 176     {
186         PyObject *tmp_assign_source_1; 177         PyObject *tmp_assign_source_1;
n 187         tmp_assign_source_1 = const_int_pos_2; n
188         assert(var_x == NULL);
189         Py_INCREF(tmp_assign_source_1);
190         var_x = tmp_assign_source_1;
191     }
192     {
193         PyObject *tmp_assign_source_2;
194         PyObject *tmp_mvar_value_2; 178         PyObject *tmp_mvar_value_2;
195         tmp_mvar_value_2 = GET_STRING_DICT_VALUE(moduledict___main__, (Nuitka_StringObject *)const_str_plain_module_value1); 179         tmp_mvar_value_2 = GET_STRING_DICT_VALUE(moduledict___main__, (Nuitka_StringObject *)const_str_plain_module_value1);
196 180
197         if (unlikely(tmp_mvar_value_2 == NULL)) { 181         if (unlikely(tmp_mvar_value_2 == NULL)) {
198             tmp_mvar_value_2 = GET_STRING_DICT_VALUE(dict_builtin, (Nuitka_StringObject *)const_str_plain_module_value1); 182             tmp_mvar_value_2 = GET_STRING_DICT_VALUE(dict_builtin, (Nuitka_StringObject *)const_str_plain_module_value1);
206             exception_tb = NULL; 190             exception_tb = NULL;
207             NORMALIZE_EXCEPTION(&exception_type, &exception_value, &exception_tb); 191             NORMALIZE_EXCEPTION(&exception_type, &exception_value, &exception_tb);
208             CHAIN_EXCEPTION(exception_value); 192             CHAIN_EXCEPTION(exception_value);
209 193
210             exception_lineno = 31; 194             exception_lineno = 31;
n 211             type_description_1 = "oo"; n 195             type_description_1 = "No";
212             goto frame_exception_exit_1; 196             goto frame_exception_exit_1;
213         } 197         }
214 198
n 215         tmp_assign_source_2 = tmp_mvar_value_2; n 199         tmp_assign_source_1 = tmp_mvar_value_2;
216         assert(var_local_value == NULL); 200         assert(var_local_value == NULL);
n 217         Py_INCREF(tmp_assign_source_2); n 201         Py_INCREF(tmp_assign_source_1);
218         var_local_value = tmp_assign_source_2; 202         var_local_value = tmp_assign_source_1;
219     }
220     { 203     }
221         PyObject *tmp_assign_source_3;
222         PyObject *tmp_iter_arg_1;
223         PyObject *tmp_xrange_low_1;
224         PyObject *tmp_xrange_high_1;
225         PyObject *tmp_left_name_1;
226         PyObject *tmp_right_name_1;
227         CHECK_OBJECT(var_local_value);
228         tmp_xrange_low_1 = var_local_value;
229         CHECK_OBJECT(var_local_value);
230         tmp_left_name_1 = var_local_value;
231         tmp_right_name_1 = const_int_pos_3;
232         tmp_xrange_high_1 = BINARY_OPERATION_ADD_OBJECT_LONG(tmp_left_name_1, tmp_right_name_1);
233         if (tmp_xrange_high_1 == NULL) {
234             assert(ERROR_OCCURRED());
235 204
n 236             FETCH_ERROR_OCCURRED(&exception_type, &exception_value, &exception_tb); n 205 #if 0
206     RESTORE_FRAME_EXCEPTION(frame_feeae0f05f938108e0007898f79d7dfc);
207 #endif
237 208
n n 209     // Put the previous frame back on top.
210     popFrameStack();
238 211
n 239             exception_lineno = 34; n 212     goto frame_no_exception_1;
240             type_description_1 = "oo"; 213  
241             goto frame_exception_exit_1; 214     frame_exception_exit_1:;
242         }
243         tmp_iter_arg_1 = BUILTIN_XRANGE2(tmp_xrange_low_1, tmp_xrange_high_1);
244         Py_DECREF(tmp_xrange_high_1);
245         if (tmp_iter_arg_1 == NULL) {
246             assert(ERROR_OCCURRED());
247 215
n 248             FETCH_ERROR_OCCURRED(&exception_type, &exception_value, &exception_tb); n 216 #if 0
217     RESTORE_FRAME_EXCEPTION(frame_feeae0f05f938108e0007898f79d7dfc);
218 #endif
249 219
n 250   n 220     if (exception_tb == NULL) {
251             exception_lineno = 34; 221         exception_tb = MAKE_TRACEBACK(frame_feeae0f05f938108e0007898f79d7dfc, exception_lineno);
252             type_description_1 = "oo";
253             goto frame_exception_exit_1;
254         }
255         tmp_assign_source_3 = MAKE_ITERATOR(tmp_iter_arg_1);
256         Py_DECREF(tmp_iter_arg_1);
257         if (tmp_assign_source_3 == NULL) {
258             assert(ERROR_OCCURRED());
259  
260             FETCH_ERROR_OCCURRED(&exception_type, &exception_value, &exception_tb);
261  
262  
263             exception_lineno = 34;
264             type_description_1 = "oo";
265             goto frame_exception_exit_1;
266         }
267         assert(tmp_for_loop_1__for_iterator == NULL);
268         tmp_for_loop_1__for_iterator = tmp_assign_source_3;
269     }
270     // Tried code:
271     loop_start_1:;
272     { 222     }
273         PyObject *tmp_next_source_1; 223     else if (exception_tb->tb_frame != &frame_feeae0f05f938108e0007898f79d7dfc->m_frame) {
274         PyObject *tmp_assign_source_4; 224         exception_tb = ADD_TRACEBACK(exception_tb, frame_feeae0f05f938108e0007898f79d7dfc, exception_lineno);
275         CHECK_OBJECT(tmp_for_loop_1__for_iterator);
276         tmp_next_source_1 = tmp_for_loop_1__for_iterator;
277         tmp_assign_source_4 = ITERATOR_NEXT(tmp_next_source_1);
278         if (tmp_assign_source_4 == NULL) {
279             if (CHECK_AND_CLEAR_STOP_ITERATION_OCCURRED()) {
280  
281                 goto loop_end_1;
282             } else {
283  
284                 FETCH_ERROR_OCCURRED(&exception_type, &exception_value, &exception_tb);
285                 type_description_1 = "oo";
286                 exception_lineno = 34;
287                 goto try_except_handler_2;
288             }
289         }
290  
291         {
292             PyObject *old = tmp_for_loop_1__iter_value;
293             tmp_for_loop_1__iter_value = tmp_assign_source_4;
294             Py_XDECREF(old);
295         }
296  
297     }
298     { 225     }
299         PyObject *tmp_assign_source_5;
300         CHECK_OBJECT(tmp_for_loop_1__iter_value);
301         tmp_assign_source_5 = tmp_for_loop_1__iter_value;
302         {
303             PyObject *old = var_x;
304             assert(old != NULL);
305             var_x = tmp_assign_source_5;
306             Py_INCREF(var_x);
307             Py_DECREF(old);
308         }
309 226
n 310     } n 227     // Attachs locals to frame if any.
311     if (CONSIDER_THREADING() == false) { 228     Nuitka_Frame_AttachLocals(
312         assert(ERROR_OCCURRED()); 229         (struct Nuitka_FrameObject *)frame_feeae0f05f938108e0007898f79d7dfc,
313  
314         FETCH_ERROR_OCCURRED(&exception_type, &exception_value, &exception_tb);
315  
316  
317         exception_lineno = 34;
318         type_description_1 = "oo"; 230         type_description_1,
231         NULL,
232         var_local_value
233     );
234  
235  
236     // Release cached frame.
237     if (frame_feeae0f05f938108e0007898f79d7dfc == cache_frame_feeae0f05f938108e0007898f79d7dfc) {
238         Py_DECREF(frame_feeae0f05f938108e0007898f79d7dfc);
239     }
240     cache_frame_feeae0f05f938108e0007898f79d7dfc = NULL;
241  
242     assertFrameObject(frame_feeae0f05f938108e0007898f79d7dfc);
243  
244     // Put the previous frame back on top.
245     popFrameStack();
246  
247     // Return the error.
319         goto try_except_handler_2; 248     goto try_except_handler_1;
320     } 249  
321     goto loop_start_1; 250     frame_no_exception_1:;
322     loop_end_1:; 251     tmp_return_value = Py_None;
252     Py_INCREF(tmp_return_value);
323     goto try_end_1; 253     goto try_return_handler_1;
254     // tried codes exits in all cases
255     NUITKA_CANNOT_GET_HERE(__main__$$$function_1_calledRepeatedly);
256     return NULL;
257     // Return handler code:
258     try_return_handler_1:;
259     CHECK_OBJECT((PyObject *)var_local_value);
260     Py_DECREF(var_local_value);
261     var_local_value = NULL;
262  
263     goto function_return_exit;
324     // Exception handler code: 264     // Exception handler code:
n 325     try_except_handler_2:; n 265     try_except_handler_1:;
326     exception_keeper_type_1 = exception_type; 266     exception_keeper_type_1 = exception_type;
327     exception_keeper_value_1 = exception_value; 267     exception_keeper_value_1 = exception_value;
328     exception_keeper_tb_1 = exception_tb; 268     exception_keeper_tb_1 = exception_tb;
329     exception_keeper_lineno_1 = exception_lineno; 269     exception_keeper_lineno_1 = exception_lineno;
330     exception_type = NULL; 270     exception_type = NULL;
331     exception_value = NULL; 271     exception_value = NULL;
332     exception_tb = NULL; 272     exception_tb = NULL;
333     exception_lineno = 0; 273     exception_lineno = 0;
334 274
n 335     Py_XDECREF(tmp_for_loop_1__iter_value); n
336     tmp_for_loop_1__iter_value = NULL;
337  
338     CHECK_OBJECT((PyObject *)tmp_for_loop_1__for_iterator);
339     Py_DECREF(tmp_for_loop_1__for_iterator);
340     tmp_for_loop_1__for_iterator = NULL;
341  
342     // Re-raise. 275     // Re-raise.
343     exception_type = exception_keeper_type_1; 276     exception_type = exception_keeper_type_1;
344     exception_value = exception_keeper_value_1; 277     exception_value = exception_keeper_value_1;
345     exception_tb = exception_keeper_tb_1; 278     exception_tb = exception_keeper_tb_1;
346     exception_lineno = exception_keeper_lineno_1; 279     exception_lineno = exception_keeper_lineno_1;
t 347   t
348     goto frame_exception_exit_1;
349     // End of try:
350     try_end_1:;
351  
352 #if 0
353     RESTORE_FRAME_EXCEPTION(frame_feeae0f05f938108e0007898f79d7dfc);
354 #endif
355  
356     // Put the previous frame back on top.
357     popFrameStack();
358  
359     goto frame_no_exception_1;
360  
361     frame_exception_exit_1:;
362  
363 #if 0
364     RESTORE_FRAME_EXCEPTION(frame_feeae0f05f938108e0007898f79d7dfc);
365 #endif
366  
367     if (exception_tb == NULL) {
368         exception_tb = MAKE_TRACEBACK(frame_feeae0f05f938108e0007898f79d7dfc, exception_lineno);
369     }
370     else if (exception_tb->tb_frame != &frame_feeae0f05f938108e0007898f79d7dfc->m_frame) {
371         exception_tb = ADD_TRACEBACK(exception_tb, frame_feeae0f05f938108e0007898f79d7dfc, exception_lineno);
372     }
373  
374     // Attachs locals to frame if any.
375     Nuitka_Frame_AttachLocals(
376         (struct Nuitka_FrameObject *)frame_feeae0f05f938108e0007898f79d7dfc,
377         type_description_1,
378         var_x,
379         var_local_value
380     );
381  
382  
383     // Release cached frame.
384     if (frame_feeae0f05f938108e0007898f79d7dfc == cache_frame_feeae0f05f938108e0007898f79d7dfc) {
385         Py_DECREF(frame_feeae0f05f938108e0007898f79d7dfc);
386     }
387     cache_frame_feeae0f05f938108e0007898f79d7dfc = NULL;
388  
389     assertFrameObject(frame_feeae0f05f938108e0007898f79d7dfc);
390  
391     // Put the previous frame back on top.
392     popFrameStack();
393  
394     // Return the error.
395     goto try_except_handler_1;
396  
397     frame_no_exception_1:;
398     Py_XDECREF(tmp_for_loop_1__iter_value);
399     tmp_for_loop_1__iter_value = NULL;
400  
401     CHECK_OBJECT((PyObject *)tmp_for_loop_1__for_iterator);
402     Py_DECREF(tmp_for_loop_1__for_iterator);
403     tmp_for_loop_1__for_iterator = NULL;
404  
405     tmp_return_value = Py_None;
406     Py_INCREF(tmp_return_value);
407     goto try_return_handler_1;
408     // tried codes exits in all cases
409     NUITKA_CANNOT_GET_HERE(__main__$$$function_1_calledRepeatedly);
410     return NULL;
411     // Return handler code:
412     try_return_handler_1:;
413     CHECK_OBJECT((PyObject *)var_x);
414     Py_DECREF(var_x);
415     var_x = NULL;
416  
417     CHECK_OBJECT((PyObject *)var_local_value);
418     Py_DECREF(var_local_value);
419     var_local_value = NULL;
420  
421     goto function_return_exit;
422     // Exception handler code:
423     try_except_handler_1:;
424     exception_keeper_type_2 = exception_type;
425     exception_keeper_value_2 = exception_value;
426     exception_keeper_tb_2 = exception_tb;
427     exception_keeper_lineno_2 = exception_lineno;
428     exception_type = NULL;
429     exception_value = NULL;
430     exception_tb = NULL;
431     exception_lineno = 0;
432  
433     Py_XDECREF(var_x);
434     var_x = NULL;
435  
436     Py_XDECREF(var_local_value);
437     var_local_value = NULL;
438  
439     // Re-raise.
440     exception_type = exception_keeper_type_2;
441     exception_value = exception_keeper_value_2;
442     exception_tb = exception_keeper_tb_2;
443     exception_lineno = exception_keeper_lineno_2;
444 280
445     goto function_exception_exit; 281     goto function_exception_exit;
446     // End of try: 282     // End of try:
447 283
448     // Return statement must have exited already. 284     // Return statement must have exited already.