Construct ListContraction

Performance Diagrams

Construct ListContraction 002000000020000000400000004000000060000000600000008000000080000000100000000100000000120000000120000000140000000140000000160000000160000000180000000180000000200000000200000000CPython 2.7Nuitka (master)Nuitka (develop)Nuitka (factory)21573689988.11538461538461257.0CPython 2.780040543240.03846153846155412.43311023417533Nuitka (master)80040487391.96153846153845412.4331743792595Nuitka (develop)80040472543.8846153846154412.43319156097846Nuitka (factory)Construct ListContractionTicks Construct ListContraction 002000000020000000400000004000000060000000600000008000000080000000100000000100000000120000000120000000140000000140000000160000000160000000180000000180000000200000000200000000220000000220000000240000000240000000260000000260000000280000000280000000CPython 3.5Nuitka (master)Nuitka (develop)Nuitka (factory)28598793988.11538461538461257.0CPython 3.5100062588240.03846153846155417.65367925224075Nuitka (master)100062494391.96153846153845417.6537604754078Nuitka (develop)100068138543.8846153846154417.64888362907766Nuitka (factory)Construct ListContractionTicks

Source Code with Construct

module_value1 = 1000

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

# construct_begin
    l = [
        x
        for x in
        range(7)
    ]
# construct_alternative



    return l, x

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

print("OK.")

Source Code without Construct

module_value1 = 1000

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

# construct_begin





# construct_alternative
    l = 1
# construct_end

    return l, x

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

print("OK.")

Context Diff of Source Code


Construct
Baseline
22 def calledRepeatedly(): 22 def calledRepeatedly():
23     # Force frame and eliminate forward propagation (currently). 23     # Force frame and eliminate forward propagation (currently).
24     module_value1 24     module_value1
25 25
26 # construct_begin 26 # construct_begin
n 27     l = [ n
28         x
29         for x in
30         range(7)
31     ]
32 # construct_alternative
33 27
34 28
t t 29  
30  
31  
32 # construct_alternative
33     l = 1
34 # construct_end
35 35
36     return l, x 36     return l, x
37 37
38 import itertools 38 import itertools
39 for x in itertools.repeat(None, 50000): 39 for x in itertools.repeat(None, 50000):

Context Diff of Generated Code


Construct
Baseline
31 PyDictObject *moduledict___main__; 31 PyDictObject *moduledict___main__;
32 32
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 static PyObject *const_tuple_str_plain_l_tuple; 35 static PyObject *const_tuple_str_plain_l_tuple;
n 36 static PyObject *const_xrange_0_7; n
37 static PyObject *const_str_plain_False;
38 extern PyObject *const_int_pos_1; 36 extern PyObject *const_int_pos_1;
39 extern PyObject *const_str_plain___file__; 37 extern PyObject *const_str_plain___file__;
n 40 extern PyObject *const_str_plain___cached__; n
41 extern PyObject *const_int_0; 38 extern PyObject *const_int_0;
42 extern PyObject *const_str_plain_print; 39 extern PyObject *const_str_plain_print;
43 static PyObject *const_int_pos_50000; 40 static PyObject *const_int_pos_50000;
44 static PyObject *const_tuple_str_digest_5ed1392909ad16e6227b8230f4582352_tuple; 41 static PyObject *const_tuple_str_digest_5ed1392909ad16e6227b8230f4582352_tuple;
45 static PyObject *const_int_pos_1000; 42 static PyObject *const_int_pos_1000;
46 static PyObject *const_str_plain_module_value1; 43 static PyObject *const_str_plain_module_value1;
47 static PyObject *const_str_plain_calledRepeatedly; 44 static PyObject *const_str_plain_calledRepeatedly;
48 static PyObject *const_str_angle_module; 45 static PyObject *const_str_angle_module;
49 static PyObject *const_str_plain_None; 46 static PyObject *const_str_plain_None;
n 50 static PyObject *const_int_pos_7; n
51 static PyObject *const_str_plain_x; 47 static PyObject *const_str_plain_x;
n 52 static PyObject *const_str_angle_listcomp; n
53 static PyObject *const_str_plain_l; 48 static PyObject *const_str_plain_l;
54 extern PyObject *const_tuple_empty; 49 extern PyObject *const_tuple_empty;
55 static PyObject *const_str_digest_5ed1392909ad16e6227b8230f4582352; 50 static PyObject *const_str_digest_5ed1392909ad16e6227b8230f4582352;
56 static PyObject *const_str_plain_repeat; 51 static PyObject *const_str_plain_repeat;
57 static PyObject *const_tuple_none_int_pos_50000_tuple; 52 static PyObject *const_tuple_none_int_pos_50000_tuple;
58 static PyObject *const_str_digest_640b093cc5256f8a8d4ebd0f036e7310; 53 static PyObject *const_str_digest_640b093cc5256f8a8d4ebd0f036e7310;
59 extern PyObject *const_str_plain___main__; 54 extern PyObject *const_str_plain___main__;
60 extern PyObject *const_str_plain___doc__; 55 extern PyObject *const_str_plain___doc__;
n 61 static PyObject *const_tuple_str_plain_x_tuple; n
62 static PyObject *const_str_plain___debug__; 56 extern PyObject *const_str_plain___cached__;
63 static PyObject *module_filename_obj; 57 static PyObject *module_filename_obj;
64 58
65 /* Indicator if this modules private constants were created yet. */ 59 /* Indicator if this modules private constants were created yet. */
66 static bool constants_created = false; 60 static bool constants_created = false;
67 61
70 { 64 {
71     const_str_plain_itertools = UNSTREAM_STRING_ASCII( &constant_bin[ 0 ], 9, 1 ); 65     const_str_plain_itertools = UNSTREAM_STRING_ASCII( &constant_bin[ 0 ], 9, 1 );
72     const_tuple_str_plain_l_tuple = PyTuple_New( 1 ); 66     const_tuple_str_plain_l_tuple = PyTuple_New( 1 );
73     const_str_plain_l = UNSTREAM_STRING_ASCII( &constant_bin[ 7 ], 1, 1 ); 67     const_str_plain_l = UNSTREAM_STRING_ASCII( &constant_bin[ 7 ], 1, 1 );
74     PyTuple_SET_ITEM( const_tuple_str_plain_l_tuple, 0, const_str_plain_l ); Py_INCREF( const_str_plain_l ); 68     PyTuple_SET_ITEM( const_tuple_str_plain_l_tuple, 0, const_str_plain_l ); Py_INCREF( const_str_plain_l );
n 75     const_int_pos_7 = PyLong_FromUnsignedLong( 7ul ); n
76     const_xrange_0_7 = BUILTIN_XRANGE3( const_int_0, const_int_pos_7, const_int_pos_1 );
77     const_str_plain_False = UNSTREAM_STRING_ASCII( &constant_bin[ 9 ], 5, 1 );
78     const_int_pos_50000 = PyLong_FromUnsignedLong( 50000ul ); 69     const_int_pos_50000 = PyLong_FromUnsignedLong( 50000ul );
79     const_tuple_str_digest_5ed1392909ad16e6227b8230f4582352_tuple = PyTuple_New( 1 ); 70     const_tuple_str_digest_5ed1392909ad16e6227b8230f4582352_tuple = PyTuple_New( 1 );
n 80     const_str_digest_5ed1392909ad16e6227b8230f4582352 = UNSTREAM_STRING_ASCII( &constant_bin[ 14 ], 3, 0 ); n 71     const_str_digest_5ed1392909ad16e6227b8230f4582352 = UNSTREAM_STRING_ASCII( &constant_bin[ 9 ], 3, 0 );
81     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 );
82     const_int_pos_1000 = PyLong_FromUnsignedLong( 1000ul ); 73     const_int_pos_1000 = PyLong_FromUnsignedLong( 1000ul );
n 83     const_str_plain_module_value1 = UNSTREAM_STRING_ASCII( &constant_bin[ 17 ], 13, 1 ); n 74     const_str_plain_module_value1 = UNSTREAM_STRING_ASCII( &constant_bin[ 12 ], 13, 1 );
84     const_str_plain_calledRepeatedly = UNSTREAM_STRING_ASCII( &constant_bin[ 30 ], 16, 1 ); 75     const_str_plain_calledRepeatedly = UNSTREAM_STRING_ASCII( &constant_bin[ 25 ], 16, 1 );
85     const_str_angle_module = UNSTREAM_STRING_ASCII( &constant_bin[ 46 ], 8, 0 ); 76     const_str_angle_module = UNSTREAM_STRING_ASCII( &constant_bin[ 41 ], 8, 0 );
86     const_str_plain_None = UNSTREAM_STRING_ASCII( &constant_bin[ 54 ], 4, 1 ); 77     const_str_plain_None = UNSTREAM_STRING_ASCII( &constant_bin[ 49 ], 4, 1 );
87     const_str_plain_x = UNSTREAM_STRING_ASCII( &constant_bin[ 58 ], 1, 1 ); 78     const_str_plain_x = UNSTREAM_STRING_ASCII( &constant_bin[ 53 ], 1, 1 );
88     const_str_angle_listcomp = UNSTREAM_STRING_ASCII( &constant_bin[ 59 ], 10, 0 );
89     const_str_plain_repeat = UNSTREAM_STRING_ASCII( &constant_bin[ 69 ], 6, 1 ); 79     const_str_plain_repeat = UNSTREAM_STRING_ASCII( &constant_bin[ 54 ], 6, 1 );
90     const_tuple_none_int_pos_50000_tuple = PyTuple_New( 2 ); 80     const_tuple_none_int_pos_50000_tuple = PyTuple_New( 2 );
91     PyTuple_SET_ITEM( const_tuple_none_int_pos_50000_tuple, 0, Py_None ); Py_INCREF( Py_None ); 81     PyTuple_SET_ITEM( const_tuple_none_int_pos_50000_tuple, 0, Py_None ); Py_INCREF( Py_None );
92     PyTuple_SET_ITEM( const_tuple_none_int_pos_50000_tuple, 1, const_int_pos_50000 ); Py_INCREF( const_int_pos_50000 ); 82     PyTuple_SET_ITEM( const_tuple_none_int_pos_50000_tuple, 1, const_int_pos_50000 ); Py_INCREF( const_int_pos_50000 );
n 93     const_str_digest_640b093cc5256f8a8d4ebd0f036e7310 = UNSTREAM_STRING_ASCII( &constant_bin[ 75 ], 66, 0 ); n 83     const_str_digest_640b093cc5256f8a8d4ebd0f036e7310 = UNSTREAM_STRING_ASCII( &constant_bin[ 60 ], 66, 0 );
94     const_tuple_str_plain_x_tuple = PyTuple_New( 1 );
95     PyTuple_SET_ITEM( const_tuple_str_plain_x_tuple, 0, const_str_plain_x ); Py_INCREF( const_str_plain_x );
96     const_str_plain___debug__ = UNSTREAM_STRING_ASCII( &constant_bin[ 141 ], 9, 1 );
97 84
98     constants_created = true; 85     constants_created = true;
99 } 86 }
100 87
101 /* Function to verify module private constants for non-corruption. */ 88 /* Function to verify module private constants for non-corruption. */
108 95
109 } 96 }
110 #endif 97 #endif
111 98
112 // The module code objects. 99 // The module code objects.
n 113 static PyCodeObject *codeobj_29aaba6b95c0b6a3d1935917ebac8f23; n
114 static PyCodeObject *codeobj_e12a306c01d57e6f82e540ab72064fc3; 100 static PyCodeObject *codeobj_e12a306c01d57e6f82e540ab72064fc3;
115 static PyCodeObject *codeobj_14da5bf3510c8d969176b9c05cd3e6d4; 101 static PyCodeObject *codeobj_14da5bf3510c8d969176b9c05cd3e6d4;
116 /* For use in "MainProgram.c". */ 102 /* For use in "MainProgram.c". */
117 PyCodeObject *codeobj_main = NULL; 103 PyCodeObject *codeobj_main = NULL;
118 104
119 static void createModuleCodeObjects(void) 105 static void createModuleCodeObjects(void)
120 { 106 {
121     module_filename_obj = const_str_digest_640b093cc5256f8a8d4ebd0f036e7310; 107     module_filename_obj = const_str_digest_640b093cc5256f8a8d4ebd0f036e7310;
n 122     codeobj_29aaba6b95c0b6a3d1935917ebac8f23 = MAKE_CODEOBJ( module_filename_obj, const_str_angle_listcomp, 28, const_tuple_str_plain_x_tuple, 1, 0, CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE ); n
123     codeobj_e12a306c01d57e6f82e540ab72064fc3 = MAKE_CODEOBJ( module_filename_obj, const_str_angle_module, 1, const_tuple_empty, 0, 0, CO_NOFREE ); 108     codeobj_e12a306c01d57e6f82e540ab72064fc3 = MAKE_CODEOBJ( module_filename_obj, const_str_angle_module, 1, const_tuple_empty, 0, 0, CO_NOFREE );
124     codeobj_14da5bf3510c8d969176b9c05cd3e6d4 = MAKE_CODEOBJ( module_filename_obj, const_str_plain_calledRepeatedly, 22, const_tuple_str_plain_l_tuple, 0, 0, CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE ); 109     codeobj_14da5bf3510c8d969176b9c05cd3e6d4 = MAKE_CODEOBJ( module_filename_obj, const_str_plain_calledRepeatedly, 22, const_tuple_str_plain_l_tuple, 0, 0, CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE );
125 } 110 }
126 111
127 // The module function declarations. 112 // The module function declarations.
135 #ifndef __NUITKA_NO_ASSERT__ 120 #ifndef __NUITKA_NO_ASSERT__
136     NUITKA_MAY_BE_UNUSED bool had_error = ERROR_OCCURRED(); 121     NUITKA_MAY_BE_UNUSED bool had_error = ERROR_OCCURRED();
137 #endif 122 #endif
138 123
139     // Local variable declarations. 124     // Local variable declarations.
n 140     PyObject *var_l = NULL; n
141     PyObject *outline_0_var_x = NULL;
142     PyObject *tmp_listcomp_1__$0 = NULL;
143     PyObject *tmp_listcomp_1__contraction = NULL;
144     PyObject *tmp_listcomp_1__iter_value_0 = NULL;
145     struct Nuitka_FrameObject *frame_14da5bf3510c8d969176b9c05cd3e6d4; 125     struct Nuitka_FrameObject *frame_14da5bf3510c8d969176b9c05cd3e6d4;
146     NUITKA_MAY_BE_UNUSED char const *type_description_1 = NULL; 126     NUITKA_MAY_BE_UNUSED char const *type_description_1 = NULL;
147     PyObject *exception_type = NULL; 127     PyObject *exception_type = NULL;
148     PyObject *exception_value = NULL; 128     PyObject *exception_value = NULL;
149     PyTracebackObject *exception_tb = NULL; 129     PyTracebackObject *exception_tb = NULL;
150     NUITKA_MAY_BE_UNUSED int exception_lineno = 0; 130     NUITKA_MAY_BE_UNUSED int exception_lineno = 0;
n 151     struct Nuitka_FrameObject *frame_29aaba6b95c0b6a3d1935917ebac8f23_2; n
152     NUITKA_MAY_BE_UNUSED char const *type_description_2 = NULL;
153     int tmp_res;
154     PyObject *exception_keeper_type_1;
155     PyObject *exception_keeper_value_1;
156     PyTracebackObject *exception_keeper_tb_1;
157     NUITKA_MAY_BE_UNUSED int exception_keeper_lineno_1;
158     static struct Nuitka_FrameObject *cache_frame_29aaba6b95c0b6a3d1935917ebac8f23_2 = NULL;
159     PyObject *exception_keeper_type_2;
160     PyObject *exception_keeper_value_2;
161     PyTracebackObject *exception_keeper_tb_2;
162     NUITKA_MAY_BE_UNUSED int exception_keeper_lineno_2;
163     PyObject *tmp_return_value = NULL; 131     PyObject *tmp_return_value = NULL;
164     static struct Nuitka_FrameObject *cache_frame_14da5bf3510c8d969176b9c05cd3e6d4 = NULL; 132     static struct Nuitka_FrameObject *cache_frame_14da5bf3510c8d969176b9c05cd3e6d4 = NULL;
n 165     PyObject *exception_keeper_type_3; n
166     PyObject *exception_keeper_value_3;
167     PyTracebackObject *exception_keeper_tb_3;
168     NUITKA_MAY_BE_UNUSED int exception_keeper_lineno_3;
169 133
170     // Actual function body. 134     // Actual function body.
n 171     // Tried code: n
172     MAKE_OR_REUSE_FRAME( cache_frame_14da5bf3510c8d969176b9c05cd3e6d4, codeobj_14da5bf3510c8d969176b9c05cd3e6d4, module___main__, sizeof(void *) ); 135     MAKE_OR_REUSE_FRAME( cache_frame_14da5bf3510c8d969176b9c05cd3e6d4, codeobj_14da5bf3510c8d969176b9c05cd3e6d4, module___main__, sizeof(void *) );
173     frame_14da5bf3510c8d969176b9c05cd3e6d4 = cache_frame_14da5bf3510c8d969176b9c05cd3e6d4; 136     frame_14da5bf3510c8d969176b9c05cd3e6d4 = cache_frame_14da5bf3510c8d969176b9c05cd3e6d4;
174 137
175     // Push the new frame as the currently active one. 138     // Push the new frame as the currently active one.
176     pushFrameStack( frame_14da5bf3510c8d969176b9c05cd3e6d4 ); 139     pushFrameStack( frame_14da5bf3510c8d969176b9c05cd3e6d4 );
197             exception_tb = NULL; 160             exception_tb = NULL;
198             NORMALIZE_EXCEPTION( &exception_type, &exception_value, &exception_tb ); 161             NORMALIZE_EXCEPTION( &exception_type, &exception_value, &exception_tb );
199             CHAIN_EXCEPTION( exception_value ); 162             CHAIN_EXCEPTION( exception_value );
200 163
201             exception_lineno = 24; 164             exception_lineno = 24;
n 202             type_description_1 = "o"; n 165             type_description_1 = "N";
203             goto frame_exception_exit_1; 166             goto frame_exception_exit_1;
204         } 167         }
205 168
n 206     } n
207     {
208         PyObject *tmp_assign_source_1;
209         {
210             PyObject *tmp_assign_source_2;
211             PyObject *tmp_iter_arg_1;
212             tmp_iter_arg_1 = const_xrange_0_7;
213             tmp_assign_source_2 = MAKE_ITERATOR( tmp_iter_arg_1 );
214             assert( !(tmp_assign_source_2 == NULL) );
215             assert( tmp_listcomp_1__$0 == NULL );
216             tmp_listcomp_1__$0 = tmp_assign_source_2;
217         }
218         {
219             PyObject *tmp_assign_source_3;
220             tmp_assign_source_3 = PyList_New( 0 );
221             assert( tmp_listcomp_1__contraction == NULL );
222             tmp_listcomp_1__contraction = tmp_assign_source_3;
223         }
224         // Tried code:
225         MAKE_OR_REUSE_FRAME( cache_frame_29aaba6b95c0b6a3d1935917ebac8f23_2, codeobj_29aaba6b95c0b6a3d1935917ebac8f23, module___main__, sizeof(void *) );
226         frame_29aaba6b95c0b6a3d1935917ebac8f23_2 = cache_frame_29aaba6b95c0b6a3d1935917ebac8f23_2;
227  
228         // Push the new frame as the currently active one.
229         pushFrameStack( frame_29aaba6b95c0b6a3d1935917ebac8f23_2 );
230  
231         // Mark the frame object as in use, ref count 1 will be up for reuse.
232         assert( Py_REFCNT( frame_29aaba6b95c0b6a3d1935917ebac8f23_2 ) == 2 ); // Frame stack
233  
234         // Framed code:
235         // Tried code:
236         loop_start_1:;
237         {
238             PyObject *tmp_next_source_1;
239             PyObject *tmp_assign_source_4;
240             CHECK_OBJECT( tmp_listcomp_1__$0 );
241             tmp_next_source_1 = tmp_listcomp_1__$0;
242             tmp_assign_source_4 = ITERATOR_NEXT( tmp_next_source_1 );
243             if ( tmp_assign_source_4 == NULL )
244             {
245                 if ( CHECK_AND_CLEAR_STOP_ITERATION_OCCURRED() )
246                 {
247  
248                     goto loop_end_1;
249                 }
250                 else
251                 {
252  
253                     FETCH_ERROR_OCCURRED( &exception_type, &exception_value, &exception_tb );
254                     type_description_2 = "o";
255                     exception_lineno = 28;
256                     goto try_except_handler_3;
257                 }
258             }
259  
260             {
261                 PyObject *old = tmp_listcomp_1__iter_value_0;
262                 tmp_listcomp_1__iter_value_0 = tmp_assign_source_4;
263                 Py_XDECREF( old );
264             }
265  
266         }
267         {
268             PyObject *tmp_assign_source_5;
269             CHECK_OBJECT( tmp_listcomp_1__iter_value_0 );
270             tmp_assign_source_5 = tmp_listcomp_1__iter_value_0;
271             {
272                 PyObject *old = outline_0_var_x;
273                 outline_0_var_x = tmp_assign_source_5;
274                 Py_INCREF( outline_0_var_x );
275                 Py_XDECREF( old );
276             }
277  
278         }
279         {
280             PyObject *tmp_append_list_1;
281             PyObject *tmp_append_value_1;
282             CHECK_OBJECT( tmp_listcomp_1__contraction );
283             tmp_append_list_1 = tmp_listcomp_1__contraction;
284             CHECK_OBJECT( outline_0_var_x );
285             tmp_append_value_1 = outline_0_var_x;
286             assert( PyList_Check( tmp_append_list_1 ) );
287             tmp_res = PyList_Append( tmp_append_list_1, tmp_append_value_1 );
288             if ( tmp_res == -1 )
289             {
290                 assert( ERROR_OCCURRED() );
291  
292                 FETCH_ERROR_OCCURRED( &exception_type, &exception_value, &exception_tb );
293  
294  
295                 exception_lineno = 28;
296                 type_description_2 = "o";
297                 goto try_except_handler_3;
298             }
299         }
300         if ( CONSIDER_THREADING() == false )
301         {
302             assert( ERROR_OCCURRED() );
303  
304             FETCH_ERROR_OCCURRED( &exception_type, &exception_value, &exception_tb );
305  
306  
307             exception_lineno = 28;
308             type_description_2 = "o";
309             goto try_except_handler_3;
310         }
311         goto loop_start_1;
312         loop_end_1:;
313         CHECK_OBJECT( tmp_listcomp_1__contraction );
314         tmp_assign_source_1 = tmp_listcomp_1__contraction;
315         Py_INCREF( tmp_assign_source_1 );
316         goto try_return_handler_3;
317         // tried codes exits in all cases
318         NUITKA_CANNOT_GET_HERE( __main__$$$function_1_calledRepeatedly );
319         return NULL;
320         // Return handler code:
321         try_return_handler_3:;
322         CHECK_OBJECT( (PyObject *)tmp_listcomp_1__$0 );
323         Py_DECREF( tmp_listcomp_1__$0 );
324         tmp_listcomp_1__$0 = NULL;
325  
326         CHECK_OBJECT( (PyObject *)tmp_listcomp_1__contraction );
327         Py_DECREF( tmp_listcomp_1__contraction );
328         tmp_listcomp_1__contraction = NULL;
329  
330         Py_XDECREF( tmp_listcomp_1__iter_value_0 );
331         tmp_listcomp_1__iter_value_0 = NULL;
332  
333         goto frame_return_exit_2;
334         // Exception handler code:
335         try_except_handler_3:;
336         exception_keeper_type_1 = exception_type;
337         exception_keeper_value_1 = exception_value;
338         exception_keeper_tb_1 = exception_tb;
339         exception_keeper_lineno_1 = exception_lineno;
340         exception_type = NULL;
341         exception_value = NULL;
342         exception_tb = NULL;
343         exception_lineno = 0;
344  
345         CHECK_OBJECT( (PyObject *)tmp_listcomp_1__$0 );
346         Py_DECREF( tmp_listcomp_1__$0 );
347         tmp_listcomp_1__$0 = NULL;
348  
349         CHECK_OBJECT( (PyObject *)tmp_listcomp_1__contraction );
350         Py_DECREF( tmp_listcomp_1__contraction );
351         tmp_listcomp_1__contraction = NULL;
352  
353         Py_XDECREF( tmp_listcomp_1__iter_value_0 );
354         tmp_listcomp_1__iter_value_0 = NULL;
355  
356         // Re-raise.
357         exception_type = exception_keeper_type_1;
358         exception_value = exception_keeper_value_1;
359         exception_tb = exception_keeper_tb_1;
360         exception_lineno = exception_keeper_lineno_1;
361  
362         goto frame_exception_exit_2;
363         // End of try:
364  
365 #if 0
366         RESTORE_FRAME_EXCEPTION( frame_29aaba6b95c0b6a3d1935917ebac8f23_2 );
367 #endif
368  
369         // Put the previous frame back on top.
370         popFrameStack();
371  
372         goto frame_no_exception_1;
373  
374         frame_return_exit_2:;
375 #if 0
376         RESTORE_FRAME_EXCEPTION( frame_29aaba6b95c0b6a3d1935917ebac8f23_2 );
377 #endif
378  
379         // Put the previous frame back on top.
380         popFrameStack();
381  
382         goto try_return_handler_2;
383  
384         frame_exception_exit_2:;
385  
386 #if 0
387         RESTORE_FRAME_EXCEPTION( frame_29aaba6b95c0b6a3d1935917ebac8f23_2 );
388 #endif
389  
390         if ( exception_tb == NULL )
391         {
392             exception_tb = MAKE_TRACEBACK( frame_29aaba6b95c0b6a3d1935917ebac8f23_2, exception_lineno );
393         }
394         else if ( exception_tb->tb_frame != &frame_29aaba6b95c0b6a3d1935917ebac8f23_2->m_frame )
395         {
396             exception_tb = ADD_TRACEBACK( exception_tb, frame_29aaba6b95c0b6a3d1935917ebac8f23_2, exception_lineno );
397         }
398  
399         // Attachs locals to frame if any.
400         Nuitka_Frame_AttachLocals(
401             (struct Nuitka_FrameObject *)frame_29aaba6b95c0b6a3d1935917ebac8f23_2,
402             type_description_2,
403             outline_0_var_x
404         );
405  
406  
407         // Release cached frame.
408         if ( frame_29aaba6b95c0b6a3d1935917ebac8f23_2 == cache_frame_29aaba6b95c0b6a3d1935917ebac8f23_2 )
409         {
410             Py_DECREF( frame_29aaba6b95c0b6a3d1935917ebac8f23_2 );
411         }
412         cache_frame_29aaba6b95c0b6a3d1935917ebac8f23_2 = NULL;
413  
414         assertFrameObject( frame_29aaba6b95c0b6a3d1935917ebac8f23_2 );
415  
416         // Put the previous frame back on top.
417         popFrameStack();
418  
419         // Return the error.
420         goto nested_frame_exit_1;
421  
422         frame_no_exception_1:;
423         goto skip_nested_handling_1;
424         nested_frame_exit_1:;
425         type_description_1 = "o";
426         goto try_except_handler_2;
427         skip_nested_handling_1:;
428         // tried codes exits in all cases
429         NUITKA_CANNOT_GET_HERE( __main__$$$function_1_calledRepeatedly );
430         return NULL;
431         // Return handler code:
432         try_return_handler_2:;
433         Py_XDECREF( outline_0_var_x );
434         outline_0_var_x = NULL;
435  
436         goto outline_result_1;
437         // Exception handler code:
438         try_except_handler_2:;
439         exception_keeper_type_2 = exception_type;
440         exception_keeper_value_2 = exception_value;
441         exception_keeper_tb_2 = exception_tb;
442         exception_keeper_lineno_2 = exception_lineno;
443         exception_type = NULL;
444         exception_value = NULL;
445         exception_tb = NULL;
446         exception_lineno = 0;
447  
448         Py_XDECREF( outline_0_var_x );
449         outline_0_var_x = NULL;
450  
451         // Re-raise.
452         exception_type = exception_keeper_type_2;
453         exception_value = exception_keeper_value_2;
454         exception_tb = exception_keeper_tb_2;
455         exception_lineno = exception_keeper_lineno_2;
456  
457         goto outline_exception_1;
458         // End of try:
459         // Return statement must have exited already.
460         NUITKA_CANNOT_GET_HERE( __main__$$$function_1_calledRepeatedly );
461         return NULL;
462         outline_exception_1:;
463         exception_lineno = 28;
464         goto frame_exception_exit_1;
465         outline_result_1:;
466         assert( var_l == NULL );
467         var_l = tmp_assign_source_1;
468     } 169     }
469     { 170     {
470         PyObject *tmp_tuple_element_1; 171         PyObject *tmp_tuple_element_1;
471         PyObject *tmp_mvar_value_2; 172         PyObject *tmp_mvar_value_2;
n 472         CHECK_OBJECT( var_l ); n
473         tmp_tuple_element_1 = var_l; 173         tmp_tuple_element_1 = const_int_pos_1;
474         tmp_return_value = PyTuple_New( 2 ); 174         tmp_return_value = PyTuple_New( 2 );
475         Py_INCREF( tmp_tuple_element_1 ); 175         Py_INCREF( tmp_tuple_element_1 );
476         PyTuple_SET_ITEM( tmp_return_value, 0, tmp_tuple_element_1 ); 176         PyTuple_SET_ITEM( tmp_return_value, 0, tmp_tuple_element_1 );
477         tmp_mvar_value_2 = GET_STRING_DICT_VALUE( moduledict___main__, (Nuitka_StringObject *)const_str_plain_x ); 177         tmp_mvar_value_2 = GET_STRING_DICT_VALUE( moduledict___main__, (Nuitka_StringObject *)const_str_plain_x );
478 178
490             exception_tb = NULL; 190             exception_tb = NULL;
491             NORMALIZE_EXCEPTION( &exception_type, &exception_value, &exception_tb ); 191             NORMALIZE_EXCEPTION( &exception_type, &exception_value, &exception_tb );
492             CHAIN_EXCEPTION( exception_value ); 192             CHAIN_EXCEPTION( exception_value );
493 193
494             exception_lineno = 36; 194             exception_lineno = 36;
n 495             type_description_1 = "o"; n 195             type_description_1 = "N";
496             goto frame_exception_exit_1; 196             goto frame_exception_exit_1;
497         } 197         }
498 198
499         tmp_tuple_element_1 = tmp_mvar_value_2; 199         tmp_tuple_element_1 = tmp_mvar_value_2;
500         Py_INCREF( tmp_tuple_element_1 ); 200         Py_INCREF( tmp_tuple_element_1 );
507 #endif 207 #endif
508 208
509     // Put the previous frame back on top. 209     // Put the previous frame back on top.
510     popFrameStack(); 210     popFrameStack();
511 211
n 512     goto frame_no_exception_2; n 212     goto frame_no_exception_1;
513 213
514     frame_return_exit_1:; 214     frame_return_exit_1:;
515 #if 0 215 #if 0
516     RESTORE_FRAME_EXCEPTION( frame_14da5bf3510c8d969176b9c05cd3e6d4 ); 216     RESTORE_FRAME_EXCEPTION( frame_14da5bf3510c8d969176b9c05cd3e6d4 );
517 #endif 217 #endif
518 218
519     // Put the previous frame back on top. 219     // Put the previous frame back on top.
520     popFrameStack(); 220     popFrameStack();
521 221
n 522     goto try_return_handler_1; n 222     goto function_return_exit;
523 223
524     frame_exception_exit_1:; 224     frame_exception_exit_1:;
525 225
526 #if 0 226 #if 0
527     RESTORE_FRAME_EXCEPTION( frame_14da5bf3510c8d969176b9c05cd3e6d4 ); 227     RESTORE_FRAME_EXCEPTION( frame_14da5bf3510c8d969176b9c05cd3e6d4 );
538 238
539     // Attachs locals to frame if any. 239     // Attachs locals to frame if any.
540     Nuitka_Frame_AttachLocals( 240     Nuitka_Frame_AttachLocals(
541         (struct Nuitka_FrameObject *)frame_14da5bf3510c8d969176b9c05cd3e6d4, 241         (struct Nuitka_FrameObject *)frame_14da5bf3510c8d969176b9c05cd3e6d4,
542         type_description_1, 242         type_description_1,
n 543         var_l n 243         NULL
544     ); 244     );
545 245
546 246
547     // Release cached frame. 247     // Release cached frame.
548     if ( frame_14da5bf3510c8d969176b9c05cd3e6d4 == cache_frame_14da5bf3510c8d969176b9c05cd3e6d4 ) 248     if ( frame_14da5bf3510c8d969176b9c05cd3e6d4 == cache_frame_14da5bf3510c8d969176b9c05cd3e6d4 )
555 255
556     // Put the previous frame back on top. 256     // Put the previous frame back on top.
557     popFrameStack(); 257     popFrameStack();
558 258
559     // Return the error. 259     // Return the error.
n 560     goto try_except_handler_1; n
561  
562     frame_no_exception_2:;
563     // tried codes exits in all cases
564     NUITKA_CANNOT_GET_HERE( __main__$$$function_1_calledRepeatedly );
565     return NULL;
566     // Return handler code:
567     try_return_handler_1:;
568     CHECK_OBJECT( (PyObject *)var_l );
569     Py_DECREF( var_l );
570     var_l = NULL;
571  
572     goto function_return_exit;
573     // Exception handler code:
574     try_except_handler_1:;
575     exception_keeper_type_3 = exception_type;
576     exception_keeper_value_3 = exception_value;
577     exception_keeper_tb_3 = exception_tb;
578     exception_keeper_lineno_3 = exception_lineno;
579     exception_type = NULL;
580     exception_value = NULL;
581     exception_tb = NULL;
582     exception_lineno = 0;
583  
584     Py_XDECREF( var_l );
585     var_l = NULL;
586  
587     // Re-raise.
588     exception_type = exception_keeper_type_3;
589     exception_value = exception_keeper_value_3;
590     exception_tb = exception_keeper_tb_3;
591     exception_lineno = exception_keeper_lineno_3;
592  
593     goto function_exception_exit; 260     goto function_exception_exit;
t 594     // End of try: t 261  
262     frame_no_exception_1:;
595 263
596     // Return statement must have exited already. 264     // Return statement must have exited already.
597     NUITKA_CANNOT_GET_HERE( __main__$$$function_1_calledRepeatedly ); 265     NUITKA_CANNOT_GET_HERE( __main__$$$function_1_calledRepeatedly );
598     return NULL; 266     return NULL;
599 267