Construct ListContraction

Performance Diagrams

Construct ListContraction 002000000020000000400000004000000060000000600000008000000080000000100000000100000000120000000120000000140000000140000000160000000160000000180000000180000000CPython 2.7Nuitka (historic)Nuitka (master)Nuitka (develop)Nuitka (factory)18036872072.9230769230769257.0CPython 2.785779716194.46153846153845386.5923046071744Nuitka (historic)80782089316.0393.43933727597215Nuitka (master)80831804437.53846153846143393.3712249040146Nuitka (develop)80781965559.0769230769231393.4395071630107Nuitka (factory)Construct ListContractionTicks Construct ListContraction 002000000020000000400000004000000060000000600000008000000080000000100000000100000000120000000120000000140000000140000000160000000160000000180000000180000000200000000200000000220000000220000000240000000240000000260000000260000000280000000280000000CPython 3.5Nuitka (historic)Nuitka (master)Nuitka (develop)Nuitka (factory)29009757872.9230769230769257.0CPython 3.50194.46153846153845504.11538461538464Nuitka (historic)101782907316.0417.41310194214935Nuitka (master)101933350437.53846153846143417.28494926998985Nuitka (develop)101948221559.0769230769231417.27228162584765Nuitka (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

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

for x in xrange(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 for x in xrange(50000): 38 for x in xrange(50000):
39     calledRepeatedly() 39     calledRepeatedly()

Context Diff of Generated Code


Construct
Baseline
30 PyObject *module___main__; 30 PyObject *module___main__;
31 PyDictObject *moduledict___main__; 31 PyDictObject *moduledict___main__;
32 32
33 /* The module constants used, if any. */ 33 /* The module constants used, if any. */
34 static PyObject *const_tuple_str_plain_l_tuple; 34 static PyObject *const_tuple_str_plain_l_tuple;
n 35 static PyObject *const_xrange_0_7; n
36 static PyObject *const_str_plain___package__; 35 static PyObject *const_str_plain___package__;
37 extern PyObject *const_int_pos_1; 36 extern PyObject *const_int_pos_1;
38 extern PyObject *const_dict_empty; 37 extern PyObject *const_dict_empty;
39 extern PyObject *const_str_plain___file__; 38 extern PyObject *const_str_plain___file__;
n 40 static PyObject *const_str_digest_b9c4baf879ebd882d40843df3a4dead7; n
41 extern PyObject *const_int_0; 39 extern PyObject *const_int_0;
n 42 static PyObject *const_str_angle_listcontraction; n
43 static PyObject *const_xrange_0_50000; 40 static PyObject *const_xrange_0_50000;
44 extern PyObject *const_str_plain_print; 41 extern PyObject *const_str_plain_print;
45 static PyObject *const_int_pos_50000; 42 static PyObject *const_int_pos_50000;
46 static PyObject *const_tuple_str_digest_5ed1392909ad16e6227b8230f4582352_tuple; 43 static PyObject *const_tuple_str_digest_5ed1392909ad16e6227b8230f4582352_tuple;
47 static PyObject *const_int_pos_1000; 44 static PyObject *const_int_pos_1000;
48 static PyObject *const_str_plain_module_value1; 45 static PyObject *const_str_plain_module_value1;
49 static PyObject *const_str_plain_calledRepeatedly; 46 static PyObject *const_str_plain_calledRepeatedly;
50 static PyObject *const_str_angle_module; 47 static PyObject *const_str_angle_module;
n 51 static PyObject *const_int_pos_7; n
52 static PyObject *const_str_plain_x; 48 static PyObject *const_str_plain_x;
53 static PyObject *const_str_plain_l; 49 static PyObject *const_str_plain_l;
54 extern PyObject *const_tuple_empty; 50 extern PyObject *const_tuple_empty;
55 static PyObject *const_str_digest_5ed1392909ad16e6227b8230f4582352; 51 static PyObject *const_str_digest_5ed1392909ad16e6227b8230f4582352;
n 56 static PyObject *const_tuple_str_digest_b9c4baf879ebd882d40843df3a4dead7_str_plain_x_tuple; n
57 extern PyObject *const_str_plain___main__; 52 extern PyObject *const_str_plain___main__;
58 extern PyObject *const_str_plain___doc__; 53 extern PyObject *const_str_plain___doc__;
59 extern PyObject *const_str_plain___cached__; 54 extern PyObject *const_str_plain___cached__;
60 static PyObject *const_str_digest_160dfacb135f3df7ad31cdff2b8d3c5a; 55 static PyObject *const_str_digest_160dfacb135f3df7ad31cdff2b8d3c5a;
61 static PyObject *module_filename_obj; 56 static PyObject *module_filename_obj;
65 static void createModuleConstants( void ) 60 static void createModuleConstants( void )
66 { 61 {
67     const_tuple_str_plain_l_tuple = PyTuple_New( 1 ); 62     const_tuple_str_plain_l_tuple = PyTuple_New( 1 );
68     const_str_plain_l = UNSTREAM_STRING( &constant_bin[ 0 ], 1, 1 ); 63     const_str_plain_l = UNSTREAM_STRING( &constant_bin[ 0 ], 1, 1 );
69     PyTuple_SET_ITEM( const_tuple_str_plain_l_tuple, 0, const_str_plain_l ); Py_INCREF( const_str_plain_l ); 64     PyTuple_SET_ITEM( const_tuple_str_plain_l_tuple, 0, const_str_plain_l ); Py_INCREF( const_str_plain_l );
n 70     const_int_pos_7 = PyLong_FromUnsignedLong( 7ul ); n
71     const_xrange_0_7 = BUILTIN_XRANGE3( const_int_0, const_int_pos_7, const_int_pos_1 );
72     const_str_plain___package__ = UNSTREAM_STRING( &constant_bin[ 1 ], 11, 1 ); 65     const_str_plain___package__ = UNSTREAM_STRING( &constant_bin[ 1 ], 11, 1 );
n 73     const_str_digest_b9c4baf879ebd882d40843df3a4dead7 = UNSTREAM_STRING( &constant_bin[ 12 ], 2, 1 ); n
74     const_str_angle_listcontraction = UNSTREAM_STRING( &constant_bin[ 14 ], 17, 0 );
75     const_int_pos_50000 = PyLong_FromUnsignedLong( 50000ul ); 66     const_int_pos_50000 = PyLong_FromUnsignedLong( 50000ul );
76     const_xrange_0_50000 = BUILTIN_XRANGE3( const_int_0, const_int_pos_50000, const_int_pos_1 ); 67     const_xrange_0_50000 = BUILTIN_XRANGE3( const_int_0, const_int_pos_50000, const_int_pos_1 );
77     const_tuple_str_digest_5ed1392909ad16e6227b8230f4582352_tuple = PyTuple_New( 1 ); 68     const_tuple_str_digest_5ed1392909ad16e6227b8230f4582352_tuple = PyTuple_New( 1 );
n 78     const_str_digest_5ed1392909ad16e6227b8230f4582352 = UNSTREAM_STRING( &constant_bin[ 31 ], 3, 0 ); n 69     const_str_digest_5ed1392909ad16e6227b8230f4582352 = UNSTREAM_STRING( &constant_bin[ 12 ], 3, 0 );
79     PyTuple_SET_ITEM( const_tuple_str_digest_5ed1392909ad16e6227b8230f4582352_tuple, 0, const_str_digest_5ed1392909ad16e6227b8230f4582352 ); Py_INCREF( const_str_digest_5ed1392909ad16e6227b8230f4582352 ); 70     PyTuple_SET_ITEM( const_tuple_str_digest_5ed1392909ad16e6227b8230f4582352_tuple, 0, const_str_digest_5ed1392909ad16e6227b8230f4582352 ); Py_INCREF( const_str_digest_5ed1392909ad16e6227b8230f4582352 );
80     const_int_pos_1000 = PyLong_FromUnsignedLong( 1000ul ); 71     const_int_pos_1000 = PyLong_FromUnsignedLong( 1000ul );
n 81     const_str_plain_module_value1 = UNSTREAM_STRING( &constant_bin[ 34 ], 13, 1 ); n 72     const_str_plain_module_value1 = UNSTREAM_STRING( &constant_bin[ 15 ], 13, 1 );
82     const_str_plain_calledRepeatedly = UNSTREAM_STRING( &constant_bin[ 47 ], 16, 1 ); 73     const_str_plain_calledRepeatedly = UNSTREAM_STRING( &constant_bin[ 28 ], 16, 1 );
83     const_str_angle_module = UNSTREAM_STRING( &constant_bin[ 63 ], 8, 0 ); 74     const_str_angle_module = UNSTREAM_STRING( &constant_bin[ 44 ], 8, 0 );
84     const_str_plain_x = UNSTREAM_STRING( &constant_bin[ 71 ], 1, 1 ); 75     const_str_plain_x = UNSTREAM_STRING( &constant_bin[ 52 ], 1, 1 );
85     const_tuple_str_digest_b9c4baf879ebd882d40843df3a4dead7_str_plain_x_tuple = PyTuple_New( 2 );
86     PyTuple_SET_ITEM( const_tuple_str_digest_b9c4baf879ebd882d40843df3a4dead7_str_plain_x_tuple, 0, const_str_digest_b9c4baf879ebd882d40843df3a4dead7 ); Py_INCREF( const_str_digest_b9c4baf879ebd882d40843df3a4dead7 );
87     PyTuple_SET_ITEM( const_tuple_str_digest_b9c4baf879ebd882d40843df3a4dead7_str_plain_x_tuple, 1, const_str_plain_x ); Py_INCREF( const_str_plain_x );
88     const_str_digest_160dfacb135f3df7ad31cdff2b8d3c5a = UNSTREAM_STRING( &constant_bin[ 72 ], 73, 0 ); 76     const_str_digest_160dfacb135f3df7ad31cdff2b8d3c5a = UNSTREAM_STRING( &constant_bin[ 53 ], 73, 0 );
89 77
90     constants_created = true; 78     constants_created = true;
91 } 79 }
92 80
93 #ifndef __NUITKA_NO_ASSERT__ 81 #ifndef __NUITKA_NO_ASSERT__
99 87
100 } 88 }
101 #endif 89 #endif
102 90
103 // The module code objects. 91 // The module code objects.
n 104 static PyCodeObject *codeobj_dbc6d7d6a722549497b11e6371b69a2c; n
105 static PyCodeObject *codeobj_645bf6fa889e7ea69e2fdf37050183da; 92 static PyCodeObject *codeobj_645bf6fa889e7ea69e2fdf37050183da;
106 static PyCodeObject *codeobj_d9bf037acb47de7e08094e4a3ec6a60c; 93 static PyCodeObject *codeobj_d9bf037acb47de7e08094e4a3ec6a60c;
107 /* For use in "MainProgram.c". */ 94 /* For use in "MainProgram.c". */
108 PyCodeObject *codeobj_main = NULL; 95 PyCodeObject *codeobj_main = NULL;
109 96
110 static void createModuleCodeObjects(void) 97 static void createModuleCodeObjects(void)
111 { 98 {
112     module_filename_obj = const_str_digest_160dfacb135f3df7ad31cdff2b8d3c5a; 99     module_filename_obj = const_str_digest_160dfacb135f3df7ad31cdff2b8d3c5a;
n 113     codeobj_dbc6d7d6a722549497b11e6371b69a2c = MAKE_CODEOBJ( module_filename_obj, const_str_angle_listcontraction, 28, const_tuple_str_digest_b9c4baf879ebd882d40843df3a4dead7_str_plain_x_tuple, 1, 0, CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE ); n
114     codeobj_645bf6fa889e7ea69e2fdf37050183da = MAKE_CODEOBJ( module_filename_obj, const_str_angle_module, 1, const_tuple_empty, 0, 0, CO_NOFREE ); 100     codeobj_645bf6fa889e7ea69e2fdf37050183da = MAKE_CODEOBJ( module_filename_obj, const_str_angle_module, 1, const_tuple_empty, 0, 0, CO_NOFREE );
115     codeobj_main = codeobj_645bf6fa889e7ea69e2fdf37050183da; 101     codeobj_main = codeobj_645bf6fa889e7ea69e2fdf37050183da;
116     codeobj_d9bf037acb47de7e08094e4a3ec6a60c = MAKE_CODEOBJ( module_filename_obj, const_str_plain_calledRepeatedly, 22, const_tuple_str_plain_l_tuple, 0, 0, CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE ); 102     codeobj_d9bf037acb47de7e08094e4a3ec6a60c = MAKE_CODEOBJ( module_filename_obj, const_str_plain_calledRepeatedly, 22, const_tuple_str_plain_l_tuple, 0, 0, CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE );
117 } 103 }
118 104
119 // The module function declarations. 105 // The module function declarations.
n 120 NUITKA_LOCAL_MODULE PyObject *impl___main__$$$function_1_calledRepeatedly$$$function_1_listcontraction( PyObject **python_pars ); n
121  
122  
123 static PyObject *MAKE_FUNCTION___main__$$$function_1_calledRepeatedly(  ); 106 static PyObject *MAKE_FUNCTION___main__$$$function_1_calledRepeatedly(  );
124 107
125 108
126 // The module function definitions. 109 // The module function definitions.
127 static PyObject *impl___main__$$$function_1_calledRepeatedly( struct Nuitka_FunctionObject const *self, PyObject **python_pars ) 110 static PyObject *impl___main__$$$function_1_calledRepeatedly( struct Nuitka_FunctionObject const *self, PyObject **python_pars )
130 #ifndef __NUITKA_NO_ASSERT__ 113 #ifndef __NUITKA_NO_ASSERT__
131     NUITKA_MAY_BE_UNUSED bool had_error = ERROR_OCCURRED(); 114     NUITKA_MAY_BE_UNUSED bool had_error = ERROR_OCCURRED();
132 #endif 115 #endif
133 116
134     // Local variable declarations. 117     // Local variable declarations.
n 135     PyObject *var_l = NULL; n
136     PyObject *exception_type = NULL, *exception_value = NULL; 118     PyObject *exception_type = NULL, *exception_value = NULL;
137     PyTracebackObject *exception_tb = NULL; 119     PyTracebackObject *exception_tb = NULL;
138     NUITKA_MAY_BE_UNUSED int exception_lineno = -1; 120     NUITKA_MAY_BE_UNUSED int exception_lineno = -1;
139     PyObject *exception_keeper_type_1; 121     PyObject *exception_keeper_type_1;
140     PyObject *exception_keeper_value_1; 122     PyObject *exception_keeper_value_1;
141     PyTracebackObject *exception_keeper_tb_1; 123     PyTracebackObject *exception_keeper_tb_1;
142     NUITKA_MAY_BE_UNUSED int exception_keeper_lineno_1; 124     NUITKA_MAY_BE_UNUSED int exception_keeper_lineno_1;
n 143     PyObject *tmp_assign_source_1; n
144     PyObject *tmp_dircall_arg1_1;
145     PyObject *tmp_iter_arg_1;
146     PyObject *tmp_return_value; 125     PyObject *tmp_return_value;
147     PyObject *tmp_tuple_element_1; 126     PyObject *tmp_tuple_element_1;
148     NUITKA_MAY_BE_UNUSED PyObject *tmp_unused; 127     NUITKA_MAY_BE_UNUSED PyObject *tmp_unused;
149     static struct Nuitka_FrameObject *cache_frame_d9bf037acb47de7e08094e4a3ec6a60c = NULL; 128     static struct Nuitka_FrameObject *cache_frame_d9bf037acb47de7e08094e4a3ec6a60c = NULL;
150 129
153     char const *type_description; 132     char const *type_description;
154     tmp_return_value = NULL; 133     tmp_return_value = NULL;
155 134
156     // Actual function code. 135     // Actual function code.
157     // Tried code: 136     // Tried code:
n 158     MAKE_OR_REUSE_FRAME( cache_frame_d9bf037acb47de7e08094e4a3ec6a60c, codeobj_d9bf037acb47de7e08094e4a3ec6a60c, module___main__, sizeof(PyObject *) ); n 137     MAKE_OR_REUSE_FRAME( cache_frame_d9bf037acb47de7e08094e4a3ec6a60c, codeobj_d9bf037acb47de7e08094e4a3ec6a60c, module___main__, sizeof(void *) );
159     frame_d9bf037acb47de7e08094e4a3ec6a60c = cache_frame_d9bf037acb47de7e08094e4a3ec6a60c; 138     frame_d9bf037acb47de7e08094e4a3ec6a60c = cache_frame_d9bf037acb47de7e08094e4a3ec6a60c;
160 139
161     // Push the new frame as the currently active one. 140     // Push the new frame as the currently active one.
162     pushFrameStack( frame_d9bf037acb47de7e08094e4a3ec6a60c ); 141     pushFrameStack( frame_d9bf037acb47de7e08094e4a3ec6a60c );
163 142
181         exception_tb = NULL; 160         exception_tb = NULL;
182         NORMALIZE_EXCEPTION( &exception_type, &exception_value, &exception_tb ); 161         NORMALIZE_EXCEPTION( &exception_type, &exception_value, &exception_tb );
183         CHAIN_EXCEPTION( exception_value ); 162         CHAIN_EXCEPTION( exception_value );
184 163
185         exception_lineno = 24; 164         exception_lineno = 24;
n 186         type_description = "o"; n 165         type_description = "N";
187         goto frame_exception_exit_1; 166         goto frame_exception_exit_1;
188     } 167     }
189 168
n 190     tmp_iter_arg_1 = const_xrange_0_7; n
191     tmp_dircall_arg1_1 = MAKE_ITERATOR( tmp_iter_arg_1 );
192     assert( tmp_dircall_arg1_1 != NULL );
193  
194     {
195         PyObject *dir_call_args[] = {tmp_dircall_arg1_1};
196         tmp_assign_source_1 = impl___main__$$$function_1_calledRepeatedly$$$function_1_listcontraction( dir_call_args );
197     }
198     if ( tmp_assign_source_1 == NULL )
199     {
200         assert( ERROR_OCCURRED() );
201  
202         FETCH_ERROR_OCCURRED( &exception_type, &exception_value, &exception_tb );
203  
204  
205         exception_lineno = 28;
206         type_description = "o";
207         goto frame_exception_exit_1;
208     }
209     assert( var_l == NULL );
210     var_l = tmp_assign_source_1;
211  
212     tmp_return_value = PyTuple_New( 2 ); 169     tmp_return_value = PyTuple_New( 2 );
n 213     tmp_tuple_element_1 = var_l; n 170     tmp_tuple_element_1 = const_int_pos_1;
214  
215     CHECK_OBJECT( tmp_tuple_element_1 );
216     Py_INCREF( tmp_tuple_element_1 ); 171     Py_INCREF( tmp_tuple_element_1 );
217     PyTuple_SET_ITEM( tmp_return_value, 0, tmp_tuple_element_1 ); 172     PyTuple_SET_ITEM( tmp_return_value, 0, tmp_tuple_element_1 );
218     tmp_tuple_element_1 = GET_STRING_DICT_VALUE( moduledict___main__, (Nuitka_StringObject *)const_str_plain_x ); 173     tmp_tuple_element_1 = GET_STRING_DICT_VALUE( moduledict___main__, (Nuitka_StringObject *)const_str_plain_x );
219 174
220     if (unlikely( tmp_tuple_element_1 == NULL )) 175     if (unlikely( tmp_tuple_element_1 == NULL ))
231         exception_tb = NULL; 186         exception_tb = NULL;
232         NORMALIZE_EXCEPTION( &exception_type, &exception_value, &exception_tb ); 187         NORMALIZE_EXCEPTION( &exception_type, &exception_value, &exception_tb );
233         CHAIN_EXCEPTION( exception_value ); 188         CHAIN_EXCEPTION( exception_value );
234 189
235         exception_lineno = 36; 190         exception_lineno = 36;
n 236         type_description = "o"; n 191         type_description = "N";
237         goto frame_exception_exit_1; 192         goto frame_exception_exit_1;
238     } 193     }
239 194
240     Py_INCREF( tmp_tuple_element_1 ); 195     Py_INCREF( tmp_tuple_element_1 );
241     PyTuple_SET_ITEM( tmp_return_value, 1, tmp_tuple_element_1 ); 196     PyTuple_SET_ITEM( tmp_return_value, 1, tmp_tuple_element_1 );
256 #endif 211 #endif
257 212
258     // Put the previous frame back on top. 213     // Put the previous frame back on top.
259     popFrameStack(); 214     popFrameStack();
260 215
n 261     goto try_return_handler_1; n 216     goto function_return_exit;
262 217
263     frame_exception_exit_1:; 218     frame_exception_exit_1:;
264 219
265 #if 0 220 #if 0
266     RESTORE_FRAME_EXCEPTION( frame_d9bf037acb47de7e08094e4a3ec6a60c ); 221     RESTORE_FRAME_EXCEPTION( frame_d9bf037acb47de7e08094e4a3ec6a60c );
273     else if ( exception_tb->tb_frame != &frame_d9bf037acb47de7e08094e4a3ec6a60c->m_frame ) 228     else if ( exception_tb->tb_frame != &frame_d9bf037acb47de7e08094e4a3ec6a60c->m_frame )
274     { 229     {
275         exception_tb = ADD_TRACEBACK( exception_tb, frame_d9bf037acb47de7e08094e4a3ec6a60c, exception_lineno ); 230         exception_tb = ADD_TRACEBACK( exception_tb, frame_d9bf037acb47de7e08094e4a3ec6a60c, exception_lineno );
276     } 231     }
277 232
n 278     Nuitka_Frame_AttachLocals( (struct Nuitka_FrameObject *)frame_d9bf037acb47de7e08094e4a3ec6a60c, type_description ,var_l ); n 233     Nuitka_Frame_AttachLocals( (struct Nuitka_FrameObject *)frame_d9bf037acb47de7e08094e4a3ec6a60c, type_description ,NULL );
279 234
280     // Release cached frame. 235     // Release cached frame.
281     if ( frame_d9bf037acb47de7e08094e4a3ec6a60c == cache_frame_d9bf037acb47de7e08094e4a3ec6a60c ) 236     if ( frame_d9bf037acb47de7e08094e4a3ec6a60c == cache_frame_d9bf037acb47de7e08094e4a3ec6a60c )
282     { 237     {
283         Py_DECREF( frame_d9bf037acb47de7e08094e4a3ec6a60c ); 238         Py_DECREF( frame_d9bf037acb47de7e08094e4a3ec6a60c );
296     frame_no_exception_1:; 251     frame_no_exception_1:;
297 252
298     // tried codes exits in all cases 253     // tried codes exits in all cases
299     NUITKA_CANNOT_GET_HERE( __main__$$$function_1_calledRepeatedly ); 254     NUITKA_CANNOT_GET_HERE( __main__$$$function_1_calledRepeatedly );
300     return NULL; 255     return NULL;
n 301     // Return handler code: n
302     try_return_handler_1:;
303     CHECK_OBJECT( (PyObject *)var_l );
304     Py_DECREF( var_l );
305     var_l = NULL;
306  
307     goto function_return_exit;
308     // Exception handler code: 256     // Exception handler code:
309     try_except_handler_1:; 257     try_except_handler_1:;
310     exception_keeper_type_1 = exception_type; 258     exception_keeper_type_1 = exception_type;
311     exception_keeper_value_1 = exception_value; 259     exception_keeper_value_1 = exception_value;
312     exception_keeper_tb_1 = exception_tb; 260     exception_keeper_tb_1 = exception_tb;
314     exception_type = NULL; 262     exception_type = NULL;
315     exception_value = NULL; 263     exception_value = NULL;
316     exception_tb = NULL; 264     exception_tb = NULL;
317     exception_lineno = -1; 265     exception_lineno = -1;
318 266
n 319     Py_XDECREF( var_l ); n
320     var_l = NULL;
321  
322     // Re-raise. 267     // Re-raise.
323     exception_type = exception_keeper_type_1; 268     exception_type = exception_keeper_type_1;
324     exception_value = exception_keeper_value_1; 269     exception_value = exception_keeper_value_1;
325     exception_tb = exception_keeper_tb_1; 270     exception_tb = exception_keeper_tb_1;
326     exception_lineno = exception_keeper_lineno_1; 271     exception_lineno = exception_keeper_lineno_1;
328     goto function_exception_exit; 273     goto function_exception_exit;
329     // End of try: 274     // End of try:
330 275
331     // Return statement must have exited already. 276     // Return statement must have exited already.
332     NUITKA_CANNOT_GET_HERE( __main__$$$function_1_calledRepeatedly ); 277     NUITKA_CANNOT_GET_HERE( __main__$$$function_1_calledRepeatedly );
t 333     return NULL; t
334  
335 function_exception_exit:
336     assert( exception_type );
337     RESTORE_ERROR_OCCURRED( exception_type, exception_value, exception_tb );
338  
339     return NULL;
340     function_return_exit:
341  
342     CHECK_OBJECT( tmp_return_value );
343     assert( had_error || !ERROR_OCCURRED() );
344     return tmp_return_value;
345  
346 }
347  
348  
349 NUITKA_LOCAL_MODULE PyObject *impl___main__$$$function_1_calledRepeatedly$$$function_1_listcontraction( PyObject **python_pars )
350 {
351 #ifndef __NUITKA_NO_ASSERT__
352     NUITKA_MAY_BE_UNUSED bool had_error = ERROR_OCCURRED();
353     assert(!had_error); // Do not enter inlined functions with error set.
354 #endif
355  
356     // Local variable declarations.
357     PyObject *par_$0 = python_pars[ 0 ];
358     PyObject *var_x = NULL;
359     PyObject *tmp_contraction_result = NULL;
360     PyObject *tmp_iter_value_0 = NULL;
361     PyObject *exception_type = NULL, *exception_value = NULL;
362     PyTracebackObject *exception_tb = NULL;
363     NUITKA_MAY_BE_UNUSED int exception_lineno = -1;
364     PyObject *exception_keeper_type_1;
365     PyObject *exception_keeper_value_1;
366     PyTracebackObject *exception_keeper_tb_1;
367     NUITKA_MAY_BE_UNUSED int exception_keeper_lineno_1;
368     PyObject *exception_keeper_type_2;
369     PyObject *exception_keeper_value_2;
370     PyTracebackObject *exception_keeper_tb_2;
371     NUITKA_MAY_BE_UNUSED int exception_keeper_lineno_2;
372     PyObject *tmp_append_list_1;
373     PyObject *tmp_append_value_1;
374     PyObject *tmp_assign_source_1;
375     PyObject *tmp_assign_source_2;
376     PyObject *tmp_assign_source_3;
377     PyObject *tmp_next_source_1;
378     int tmp_res;
379     PyObject *tmp_return_value;
380     static struct Nuitka_FrameObject *cache_frame_dbc6d7d6a722549497b11e6371b69a2c = NULL;
381  
382     struct Nuitka_FrameObject *frame_dbc6d7d6a722549497b11e6371b69a2c;
383  
384     char const *type_description;
385     tmp_return_value = NULL;
386  
387     // Actual function code.
388     tmp_assign_source_1 = PyList_New( 0 );
389     assert( tmp_contraction_result == NULL );
390     tmp_contraction_result = tmp_assign_source_1;
391  
392     // Tried code:
393     MAKE_OR_REUSE_FRAME( cache_frame_dbc6d7d6a722549497b11e6371b69a2c, codeobj_dbc6d7d6a722549497b11e6371b69a2c, module___main__, sizeof(PyObject *)+sizeof(PyObject *) );
394     frame_dbc6d7d6a722549497b11e6371b69a2c = cache_frame_dbc6d7d6a722549497b11e6371b69a2c;
395  
396     // Push the new frame as the currently active one.
397     pushFrameStack( frame_dbc6d7d6a722549497b11e6371b69a2c );
398  
399     // Mark the frame object as in use, ref count 1 will be up for reuse.
400     assert( Py_REFCNT( frame_dbc6d7d6a722549497b11e6371b69a2c ) == 2 ); // Frame stack
401  
402     // Framed code:
403     // Tried code:
404     loop_start_1:;
405     tmp_next_source_1 = par_$0;
406  
407     CHECK_OBJECT( tmp_next_source_1 );
408     tmp_assign_source_2 = ITERATOR_NEXT( tmp_next_source_1 );
409     if ( tmp_assign_source_2 == NULL )
410     {
411         if ( CHECK_AND_CLEAR_STOP_ITERATION_OCCURRED() )
412         {
413  
414             goto loop_end_1;
415         }
416         else
417         {
418  
419             FETCH_ERROR_OCCURRED( &exception_type, &exception_value, &exception_tb );
420             type_description = "oo";
421             frame_dbc6d7d6a722549497b11e6371b69a2c->m_frame.f_lineno = 28;
422             goto try_except_handler_2;
423         }
424     }
425  
426     {
427         PyObject *old = tmp_iter_value_0;
428         tmp_iter_value_0 = tmp_assign_source_2;
429         Py_XDECREF( old );
430     }
431  
432     tmp_assign_source_3 = tmp_iter_value_0;
433  
434     CHECK_OBJECT( tmp_assign_source_3 );
435     {
436         PyObject *old = var_x;
437         var_x = tmp_assign_source_3;
438         Py_INCREF( var_x );
439         Py_XDECREF( old );
440     }
441  
442     tmp_append_list_1 = tmp_contraction_result;
443  
444     CHECK_OBJECT( tmp_append_list_1 );
445     tmp_append_value_1 = var_x;
446  
447     CHECK_OBJECT( tmp_append_value_1 );
448     assert( PyList_Check( tmp_append_list_1 ) );
449     tmp_res = PyList_Append( tmp_append_list_1, tmp_append_value_1 );
450     if ( tmp_res == -1 )
451     {
452         assert( ERROR_OCCURRED() );
453  
454         FETCH_ERROR_OCCURRED( &exception_type, &exception_value, &exception_tb );
455  
456  
457         exception_lineno = 28;
458         type_description = "oo";
459         goto try_except_handler_2;
460     }
461     if ( CONSIDER_THREADING() == false )
462     {
463         assert( ERROR_OCCURRED() );
464  
465         FETCH_ERROR_OCCURRED( &exception_type, &exception_value, &exception_tb );
466  
467  
468         exception_lineno = 28;
469         type_description = "oo";
470         goto try_except_handler_2;
471     }
472     goto loop_start_1;
473     loop_end_1:;
474     tmp_return_value = tmp_contraction_result;
475  
476     CHECK_OBJECT( tmp_return_value );
477     Py_INCREF( tmp_return_value );
478     goto try_return_handler_2;
479     // tried codes exits in all cases
480     NUITKA_CANNOT_GET_HERE( __main__$$$function_1_calledRepeatedly$$$function_1_listcontraction );
481     return NULL;
482     // Return handler code:
483     try_return_handler_2:;
484     Py_XDECREF( tmp_contraction_result );
485     tmp_contraction_result = NULL;
486  
487     Py_XDECREF( tmp_iter_value_0 );
488     tmp_iter_value_0 = NULL;
489  
490     goto frame_return_exit_1;
491     // Exception handler code:
492     try_except_handler_2:;
493     exception_keeper_type_1 = exception_type;
494     exception_keeper_value_1 = exception_value;
495     exception_keeper_tb_1 = exception_tb;
496     exception_keeper_lineno_1 = exception_lineno;
497     exception_type = NULL;
498     exception_value = NULL;
499     exception_tb = NULL;
500     exception_lineno = -1;
501  
502     Py_XDECREF( tmp_contraction_result );
503     tmp_contraction_result = NULL;
504  
505     Py_XDECREF( tmp_iter_value_0 );
506     tmp_iter_value_0 = NULL;
507  
508     // Re-raise.
509     exception_type = exception_keeper_type_1;
510     exception_value = exception_keeper_value_1;
511     exception_tb = exception_keeper_tb_1;
512     exception_lineno = exception_keeper_lineno_1;
513  
514     goto frame_exception_exit_1;
515     // End of try:
516  
517 #if 0
518     RESTORE_FRAME_EXCEPTION( frame_dbc6d7d6a722549497b11e6371b69a2c );
519 #endif
520  
521     // Put the previous frame back on top.
522     popFrameStack();
523  
524     goto frame_no_exception_1;
525  
526     frame_return_exit_1:;
527 #if 0
528     RESTORE_FRAME_EXCEPTION( frame_dbc6d7d6a722549497b11e6371b69a2c );
529 #endif
530  
531     // Put the previous frame back on top.
532     popFrameStack();
533  
534     goto try_return_handler_1;
535  
536     frame_exception_exit_1:;
537  
538 #if 0
539     RESTORE_FRAME_EXCEPTION( frame_dbc6d7d6a722549497b11e6371b69a2c );
540 #endif
541  
542     if ( exception_tb == NULL )
543     {
544         exception_tb = MAKE_TRACEBACK( frame_dbc6d7d6a722549497b11e6371b69a2c, exception_lineno );
545     }
546     else if ( exception_tb->tb_frame != &frame_dbc6d7d6a722549497b11e6371b69a2c->m_frame )
547     {
548         exception_tb = ADD_TRACEBACK( exception_tb, frame_dbc6d7d6a722549497b11e6371b69a2c, exception_lineno );
549     }
550  
551     Nuitka_Frame_AttachLocals( (struct Nuitka_FrameObject *)frame_dbc6d7d6a722549497b11e6371b69a2c, type_description ,par_$0, var_x );
552  
553     // Release cached frame.
554     if ( frame_dbc6d7d6a722549497b11e6371b69a2c == cache_frame_dbc6d7d6a722549497b11e6371b69a2c )
555     {
556         Py_DECREF( frame_dbc6d7d6a722549497b11e6371b69a2c );
557     }
558     cache_frame_dbc6d7d6a722549497b11e6371b69a2c = NULL;
559  
560     assertFrameObject( frame_dbc6d7d6a722549497b11e6371b69a2c );
561  
562  
563     // Put the previous frame back on top.
564     popFrameStack();
565  
566     // Return the error.
567     goto try_except_handler_1;
568  
569     frame_no_exception_1:;
570  
571     // tried codes exits in all cases
572     NUITKA_CANNOT_GET_HERE( __main__$$$function_1_calledRepeatedly$$$function_1_listcontraction );
573     return NULL;
574     // Return handler code:
575     try_return_handler_1:;
576     Py_XDECREF( par_$0 );
577     par_$0 = NULL;
578  
579     Py_XDECREF( var_x );
580     var_x = NULL;
581  
582     goto function_return_exit;
583     // Exception handler code:
584     try_except_handler_1:;
585     exception_keeper_type_2 = exception_type;
586     exception_keeper_value_2 = exception_value;
587     exception_keeper_tb_2 = exception_tb;
588     exception_keeper_lineno_2 = exception_lineno;
589     exception_type = NULL;
590     exception_value = NULL;
591     exception_tb = NULL;
592     exception_lineno = -1;
593  
594     Py_XDECREF( par_$0 );
595     par_$0 = NULL;
596  
597     Py_XDECREF( var_x );
598     var_x = NULL;
599  
600     // Re-raise.
601     exception_type = exception_keeper_type_2;
602     exception_value = exception_keeper_value_2;
603     exception_tb = exception_keeper_tb_2;
604     exception_lineno = exception_keeper_lineno_2;
605  
606     goto function_exception_exit;
607     // End of try:
608  
609     // Return statement must have exited already.
610     NUITKA_CANNOT_GET_HERE( __main__$$$function_1_calledRepeatedly$$$function_1_listcontraction );
611     return NULL; 278     return NULL;
612 279
613 function_exception_exit: 280 function_exception_exit:
614     assert( exception_type ); 281     assert( exception_type );
615     RESTORE_ERROR_OCCURRED( exception_type, exception_value, exception_tb ); 282     RESTORE_ERROR_OCCURRED( exception_type, exception_value, exception_tb );