Construct LoopSmallRange

Performance Diagrams

Construct LoopSmallRange 00100000001000000020000000200000003000000030000000400000004000000050000000500000006000000060000000700000007000000080000000800000009000000090000000100000000100000000110000000110000000CPython 2.7Nuitka (historic)Nuitka (master)Nuitka (develop)Nuitka (factory)11002546972.9230769230769257.0CPython 2.754807241194.46153846153845381.0192273118145Nuitka (historic)52257093316.0386.74681756499626Nuitka (master)52285727437.53846153846143386.6825060743261Nuitka (develop)52336782559.0769230769231386.56783738828267Nuitka (factory)Construct LoopSmallRangeTicks Construct LoopSmallRange 00100000001000000020000000200000003000000030000000400000004000000050000000500000006000000060000000700000007000000080000000800000009000000090000000100000000100000000110000000110000000120000000120000000130000000130000000140000000140000000CPython 3.5Nuitka (historic)Nuitka (master)Nuitka (develop)Nuitka (factory)14521802672.9230769230769257.00000000000006CPython 3.50194.46153846153845504.11538461538464Nuitka (historic)86676928316.0356.6185277169167Nuitka (master)86628420437.53846153846143356.7010730689443Nuitka (develop)86614506559.0769230769231356.72475031863735Nuitka (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

for x in xrange(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




for x in xrange(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 for x in xrange(50000): 38 for x in xrange(50000):
39     calledRepeatedly() 39     calledRepeatedly()
40 40
41 print("OK.") 41 print("OK.")

Context Diff of Generated Code


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