Construct LoopSmallRange

Performance Diagrams

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