Construct ListContraction

Performance Diagrams

Construct ListContraction 002000000020000000400000004000000060000000600000008000000080000000100000000100000000120000000120000000140000000140000000160000000160000000180000000180000000200000000200000000CPython 2.7Nuitka (master)Nuitka (develop)Nuitka (factory)21909198588.11538461538461257.0CPython 2.784503826240.03846153846155408.8029273227934Nuitka (master)84502743391.96153846153845408.8041488460798Nuitka (develop)84432233543.8846153846154408.88367756900055Nuitka (factory)Construct ListContractionTicks Construct ListContraction 002000000020000000400000004000000060000000600000008000000080000000100000000100000000120000000120000000140000000140000000160000000160000000180000000180000000200000000200000000220000000220000000240000000240000000260000000260000000280000000280000000CPython 3.5Nuitka (master)Nuitka (develop)Nuitka (factory)28308631088.11538461538461257.0CPython 3.5100057437240.03846153846155416.7719449842537Nuitka (master)100055937391.96153846153845416.77325438376835Nuitka (develop)100056297543.8846153846154416.77294012788485Nuitka (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 module constants used, if any. */ 33 /* The 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 extern PyObject *const_str_plain___main__; 53 extern PyObject *const_str_plain___main__;
59 static PyObject *const_str_digest_96702337fbc5553b846f7f7f6bb71f82; 54 static PyObject *const_str_digest_96702337fbc5553b846f7f7f6bb71f82;
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 static bool constants_created = false; 59 static bool constants_created = false;
66 60
67 static void createModuleConstants( void ) 61 static void createModuleConstants( void )
68 { 62 {
69     const_str_plain_itertools = UNSTREAM_STRING_ASCII( &constant_bin[ 0 ], 9, 1 ); 63     const_str_plain_itertools = UNSTREAM_STRING_ASCII( &constant_bin[ 0 ], 9, 1 );
70     const_tuple_str_plain_l_tuple = PyTuple_New( 1 ); 64     const_tuple_str_plain_l_tuple = PyTuple_New( 1 );
71     const_str_plain_l = UNSTREAM_STRING_ASCII( &constant_bin[ 7 ], 1, 1 ); 65     const_str_plain_l = UNSTREAM_STRING_ASCII( &constant_bin[ 7 ], 1, 1 );
72     PyTuple_SET_ITEM( const_tuple_str_plain_l_tuple, 0, const_str_plain_l ); Py_INCREF( const_str_plain_l ); 66     PyTuple_SET_ITEM( const_tuple_str_plain_l_tuple, 0, const_str_plain_l ); Py_INCREF( const_str_plain_l );
n 73     const_int_pos_7 = PyLong_FromUnsignedLong( 7ul ); n
74     const_xrange_0_7 = BUILTIN_XRANGE3( const_int_0, const_int_pos_7, const_int_pos_1 );
75     const_str_plain_False = UNSTREAM_STRING_ASCII( &constant_bin[ 9 ], 5, 1 );
76     const_int_pos_50000 = PyLong_FromUnsignedLong( 50000ul ); 67     const_int_pos_50000 = PyLong_FromUnsignedLong( 50000ul );
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_ASCII( &constant_bin[ 14 ], 3, 0 ); n 69     const_str_digest_5ed1392909ad16e6227b8230f4582352 = UNSTREAM_STRING_ASCII( &constant_bin[ 9 ], 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_ASCII( &constant_bin[ 17 ], 13, 1 ); n 72     const_str_plain_module_value1 = UNSTREAM_STRING_ASCII( &constant_bin[ 12 ], 13, 1 );
82     const_str_plain_calledRepeatedly = UNSTREAM_STRING_ASCII( &constant_bin[ 30 ], 16, 1 ); 73     const_str_plain_calledRepeatedly = UNSTREAM_STRING_ASCII( &constant_bin[ 25 ], 16, 1 );
83     const_str_angle_module = UNSTREAM_STRING_ASCII( &constant_bin[ 46 ], 8, 0 ); 74     const_str_angle_module = UNSTREAM_STRING_ASCII( &constant_bin[ 41 ], 8, 0 );
84     const_str_plain_None = UNSTREAM_STRING_ASCII( &constant_bin[ 54 ], 4, 1 ); 75     const_str_plain_None = UNSTREAM_STRING_ASCII( &constant_bin[ 49 ], 4, 1 );
85     const_str_plain_x = UNSTREAM_STRING_ASCII( &constant_bin[ 58 ], 1, 1 ); 76     const_str_plain_x = UNSTREAM_STRING_ASCII( &constant_bin[ 53 ], 1, 1 );
86     const_str_angle_listcomp = UNSTREAM_STRING_ASCII( &constant_bin[ 59 ], 10, 0 );
87     const_str_plain_repeat = UNSTREAM_STRING_ASCII( &constant_bin[ 69 ], 6, 1 ); 77     const_str_plain_repeat = UNSTREAM_STRING_ASCII( &constant_bin[ 54 ], 6, 1 );
88     const_tuple_none_int_pos_50000_tuple = PyTuple_New( 2 ); 78     const_tuple_none_int_pos_50000_tuple = PyTuple_New( 2 );
89     PyTuple_SET_ITEM( const_tuple_none_int_pos_50000_tuple, 0, Py_None ); Py_INCREF( Py_None ); 79     PyTuple_SET_ITEM( const_tuple_none_int_pos_50000_tuple, 0, Py_None ); Py_INCREF( Py_None );
90     PyTuple_SET_ITEM( const_tuple_none_int_pos_50000_tuple, 1, const_int_pos_50000 ); Py_INCREF( const_int_pos_50000 ); 80     PyTuple_SET_ITEM( const_tuple_none_int_pos_50000_tuple, 1, const_int_pos_50000 ); Py_INCREF( const_int_pos_50000 );
n 91     const_str_digest_96702337fbc5553b846f7f7f6bb71f82 = UNSTREAM_STRING_ASCII( &constant_bin[ 75 ], 66, 0 ); n 81     const_str_digest_96702337fbc5553b846f7f7f6bb71f82 = UNSTREAM_STRING_ASCII( &constant_bin[ 60 ], 66, 0 );
92     const_tuple_str_plain_x_tuple = PyTuple_New( 1 );
93     PyTuple_SET_ITEM( const_tuple_str_plain_x_tuple, 0, const_str_plain_x ); Py_INCREF( const_str_plain_x );
94     const_str_plain___debug__ = UNSTREAM_STRING_ASCII( &constant_bin[ 141 ], 9, 1 );
95 82
96     constants_created = true; 83     constants_created = true;
97 } 84 }
98 85
99 #ifndef __NUITKA_NO_ASSERT__ 86 #ifndef __NUITKA_NO_ASSERT__
105 92
106 } 93 }
107 #endif 94 #endif
108 95
109 // The module code objects. 96 // The module code objects.
n 110 static PyCodeObject *codeobj_8d0442114cb42b9a04ceaab7f82518bd; n
111 static PyCodeObject *codeobj_f1a4fc6d5fa51574e946fd517ad71231; 97 static PyCodeObject *codeobj_f1a4fc6d5fa51574e946fd517ad71231;
112 static PyCodeObject *codeobj_1694415e1c856e1c0b7ca48892f6901b; 98 static PyCodeObject *codeobj_1694415e1c856e1c0b7ca48892f6901b;
113 /* For use in "MainProgram.c". */ 99 /* For use in "MainProgram.c". */
114 PyCodeObject *codeobj_main = NULL; 100 PyCodeObject *codeobj_main = NULL;
115 101
116 static void createModuleCodeObjects(void) 102 static void createModuleCodeObjects(void)
117 { 103 {
118     module_filename_obj = const_str_digest_96702337fbc5553b846f7f7f6bb71f82; 104     module_filename_obj = const_str_digest_96702337fbc5553b846f7f7f6bb71f82;
n 119     codeobj_8d0442114cb42b9a04ceaab7f82518bd = 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
120     codeobj_f1a4fc6d5fa51574e946fd517ad71231 = MAKE_CODEOBJ( module_filename_obj, const_str_angle_module, 1, const_tuple_empty, 0, 0, CO_NOFREE ); 105     codeobj_f1a4fc6d5fa51574e946fd517ad71231 = MAKE_CODEOBJ( module_filename_obj, const_str_angle_module, 1, const_tuple_empty, 0, 0, CO_NOFREE );
121     codeobj_main = codeobj_f1a4fc6d5fa51574e946fd517ad71231; 106     codeobj_main = codeobj_f1a4fc6d5fa51574e946fd517ad71231;
122     codeobj_1694415e1c856e1c0b7ca48892f6901b = MAKE_CODEOBJ( module_filename_obj, const_str_plain_calledRepeatedly, 22, const_tuple_str_plain_l_tuple, 0, 0, CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE ); 107     codeobj_1694415e1c856e1c0b7ca48892f6901b = MAKE_CODEOBJ( module_filename_obj, const_str_plain_calledRepeatedly, 22, const_tuple_str_plain_l_tuple, 0, 0, CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE );
123 } 108 }
124 109
133 #ifndef __NUITKA_NO_ASSERT__ 118 #ifndef __NUITKA_NO_ASSERT__
134     NUITKA_MAY_BE_UNUSED bool had_error = ERROR_OCCURRED(); 119     NUITKA_MAY_BE_UNUSED bool had_error = ERROR_OCCURRED();
135 #endif 120 #endif
136 121
137     // Local variable declarations. 122     // Local variable declarations.
n 138     PyObject *var_l = NULL; n
139     PyObject *outline_0_var_x = NULL;
140     PyObject *tmp_listcomp_1__$0 = NULL;
141     PyObject *tmp_listcomp_1__contraction = NULL;
142     PyObject *tmp_listcomp_1__iter_value_0 = NULL;
143     struct Nuitka_FrameObject *frame_1694415e1c856e1c0b7ca48892f6901b; 123     struct Nuitka_FrameObject *frame_1694415e1c856e1c0b7ca48892f6901b;
144     NUITKA_MAY_BE_UNUSED char const *type_description_1 = NULL; 124     NUITKA_MAY_BE_UNUSED char const *type_description_1 = NULL;
145     PyObject *exception_type = NULL; 125     PyObject *exception_type = NULL;
146     PyObject *exception_value = NULL; 126     PyObject *exception_value = NULL;
147     PyTracebackObject *exception_tb = NULL; 127     PyTracebackObject *exception_tb = NULL;
148     NUITKA_MAY_BE_UNUSED int exception_lineno = 0; 128     NUITKA_MAY_BE_UNUSED int exception_lineno = 0;
n 149     struct Nuitka_FrameObject *frame_8d0442114cb42b9a04ceaab7f82518bd_2; n
150     NUITKA_MAY_BE_UNUSED char const *type_description_2 = NULL;
151     int tmp_res;
152     PyObject *exception_keeper_type_1;
153     PyObject *exception_keeper_value_1;
154     PyTracebackObject *exception_keeper_tb_1;
155     NUITKA_MAY_BE_UNUSED int exception_keeper_lineno_1;
156     static struct Nuitka_FrameObject *cache_frame_8d0442114cb42b9a04ceaab7f82518bd_2 = NULL;
157     PyObject *exception_keeper_type_2;
158     PyObject *exception_keeper_value_2;
159     PyTracebackObject *exception_keeper_tb_2;
160     NUITKA_MAY_BE_UNUSED int exception_keeper_lineno_2;
161     PyObject *tmp_return_value = NULL; 129     PyObject *tmp_return_value = NULL;
162     static struct Nuitka_FrameObject *cache_frame_1694415e1c856e1c0b7ca48892f6901b = NULL; 130     static struct Nuitka_FrameObject *cache_frame_1694415e1c856e1c0b7ca48892f6901b = NULL;
n 163     PyObject *exception_keeper_type_3; n
164     PyObject *exception_keeper_value_3;
165     PyTracebackObject *exception_keeper_tb_3;
166     NUITKA_MAY_BE_UNUSED int exception_keeper_lineno_3;
167 131
168     // Actual function code. 132     // Actual function code.
n 169     { n
170     // Tried code:
171     MAKE_OR_REUSE_FRAME( cache_frame_1694415e1c856e1c0b7ca48892f6901b, codeobj_1694415e1c856e1c0b7ca48892f6901b, module___main__, sizeof(void *) ); 133     MAKE_OR_REUSE_FRAME( cache_frame_1694415e1c856e1c0b7ca48892f6901b, codeobj_1694415e1c856e1c0b7ca48892f6901b, module___main__, sizeof(void *) );
172     frame_1694415e1c856e1c0b7ca48892f6901b = cache_frame_1694415e1c856e1c0b7ca48892f6901b; 134     frame_1694415e1c856e1c0b7ca48892f6901b = cache_frame_1694415e1c856e1c0b7ca48892f6901b;
173 135
174     // Push the new frame as the currently active one. 136     // Push the new frame as the currently active one.
175     pushFrameStack( frame_1694415e1c856e1c0b7ca48892f6901b ); 137     pushFrameStack( frame_1694415e1c856e1c0b7ca48892f6901b );
196         exception_tb = NULL; 158         exception_tb = NULL;
197         NORMALIZE_EXCEPTION( &exception_type, &exception_value, &exception_tb ); 159         NORMALIZE_EXCEPTION( &exception_type, &exception_value, &exception_tb );
198         CHAIN_EXCEPTION( exception_value ); 160         CHAIN_EXCEPTION( exception_value );
199 161
200         exception_lineno = 24; 162         exception_lineno = 24;
n 201         type_description_1 = "o"; n 163         type_description_1 = "N";
202         goto frame_exception_exit_1; 164         goto frame_exception_exit_1;
203     } 165     }
n 204   n
205     }
206     {
207     PyObject *tmp_assign_source_1;
208     {
209     PyObject *tmp_assign_source_2;
210     PyObject *tmp_iter_arg_1;
211     tmp_iter_arg_1 = const_xrange_0_7;
212     tmp_assign_source_2 = MAKE_ITERATOR( tmp_iter_arg_1 );
213     assert( !(tmp_assign_source_2 == NULL) );
214     assert( tmp_listcomp_1__$0 == NULL );
215     tmp_listcomp_1__$0 = tmp_assign_source_2;
216  
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     }
225     {
226     // Tried code:
227     MAKE_OR_REUSE_FRAME( cache_frame_8d0442114cb42b9a04ceaab7f82518bd_2, codeobj_8d0442114cb42b9a04ceaab7f82518bd, module___main__, sizeof(void *) );
228     frame_8d0442114cb42b9a04ceaab7f82518bd_2 = cache_frame_8d0442114cb42b9a04ceaab7f82518bd_2;
229  
230     // Push the new frame as the currently active one.
231     pushFrameStack( frame_8d0442114cb42b9a04ceaab7f82518bd_2 );
232  
233     // Mark the frame object as in use, ref count 1 will be up for reuse.
234     assert( Py_REFCNT( frame_8d0442114cb42b9a04ceaab7f82518bd_2 ) == 2 ); // Frame stack
235  
236     // Framed code:
237     {
238     // Tried code:
239     {
240     loop_start_1:;
241     {
242     PyObject *tmp_next_source_1;
243     PyObject *tmp_assign_source_4;
244     CHECK_OBJECT( tmp_listcomp_1__$0 );
245     tmp_next_source_1 = tmp_listcomp_1__$0;
246     tmp_assign_source_4 = ITERATOR_NEXT( tmp_next_source_1 );
247     if ( tmp_assign_source_4 == NULL )
248     {
249         if ( CHECK_AND_CLEAR_STOP_ITERATION_OCCURRED() )
250         {
251  
252             goto loop_end_1;
253         }
254         else
255         {
256  
257             FETCH_ERROR_OCCURRED( &exception_type, &exception_value, &exception_tb );
258             type_description_2 = "o";
259             exception_lineno = 28;
260             goto try_except_handler_3;
261         }
262     }
263  
264     {
265         PyObject *old = tmp_listcomp_1__iter_value_0;
266         tmp_listcomp_1__iter_value_0 = tmp_assign_source_4;
267         Py_XDECREF( old );
268     }
269  
270     }
271     {
272     PyObject *tmp_assign_source_5;
273     CHECK_OBJECT( tmp_listcomp_1__iter_value_0 );
274     tmp_assign_source_5 = tmp_listcomp_1__iter_value_0;
275     {
276         PyObject *old = outline_0_var_x;
277         outline_0_var_x = tmp_assign_source_5;
278         Py_INCREF( outline_0_var_x );
279         Py_XDECREF( old );
280     }
281  
282     }
283     {
284     PyObject *tmp_append_list_1;
285     PyObject *tmp_append_value_1;
286     CHECK_OBJECT( tmp_listcomp_1__contraction );
287     tmp_append_list_1 = tmp_listcomp_1__contraction;
288     CHECK_OBJECT( outline_0_var_x );
289     tmp_append_value_1 = outline_0_var_x;
290     assert( PyList_Check( tmp_append_list_1 ) );
291     tmp_res = PyList_Append( tmp_append_list_1, tmp_append_value_1 );
292     if ( tmp_res == -1 )
293     {
294         assert( ERROR_OCCURRED() );
295  
296         FETCH_ERROR_OCCURRED( &exception_type, &exception_value, &exception_tb );
297  
298  
299         exception_lineno = 28;
300         type_description_2 = "o";
301         goto try_except_handler_3;
302     }
303     }
304     if ( CONSIDER_THREADING() == false )
305     {
306         assert( ERROR_OCCURRED() );
307  
308         FETCH_ERROR_OCCURRED( &exception_type, &exception_value, &exception_tb );
309  
310  
311         exception_lineno = 28;
312         type_description_2 = "o";
313         goto try_except_handler_3;
314     }
315     goto loop_start_1;
316     loop_end_1:;
317     }
318     {
319     CHECK_OBJECT( tmp_listcomp_1__contraction );
320     tmp_assign_source_1 = tmp_listcomp_1__contraction;
321     Py_INCREF( tmp_assign_source_1 );
322     goto try_return_handler_3;
323     }
324     // tried codes exits in all cases
325     NUITKA_CANNOT_GET_HERE( __main__$$$function_1_calledRepeatedly );
326     return NULL;
327     // Return handler code:
328     try_return_handler_3:;
329     {
330     CHECK_OBJECT( (PyObject *)tmp_listcomp_1__$0 );
331     Py_DECREF( tmp_listcomp_1__$0 );
332     tmp_listcomp_1__$0 = NULL;
333  
334     }
335     {
336     CHECK_OBJECT( (PyObject *)tmp_listcomp_1__contraction );
337     Py_DECREF( tmp_listcomp_1__contraction );
338     tmp_listcomp_1__contraction = NULL;
339  
340     }
341     {
342     Py_XDECREF( tmp_listcomp_1__iter_value_0 );
343     tmp_listcomp_1__iter_value_0 = NULL;
344  
345     }
346     {
347     goto frame_return_exit_2;
348     }
349     // Exception handler code:
350     try_except_handler_3:;
351     exception_keeper_type_1 = exception_type;
352     exception_keeper_value_1 = exception_value;
353     exception_keeper_tb_1 = exception_tb;
354     exception_keeper_lineno_1 = exception_lineno;
355     exception_type = NULL;
356     exception_value = NULL;
357     exception_tb = NULL;
358     exception_lineno = 0;
359  
360     {
361     CHECK_OBJECT( (PyObject *)tmp_listcomp_1__$0 );
362     Py_DECREF( tmp_listcomp_1__$0 );
363     tmp_listcomp_1__$0 = NULL;
364  
365     }
366     {
367     CHECK_OBJECT( (PyObject *)tmp_listcomp_1__contraction );
368     Py_DECREF( tmp_listcomp_1__contraction );
369     tmp_listcomp_1__contraction = NULL;
370  
371     }
372     {
373     Py_XDECREF( tmp_listcomp_1__iter_value_0 );
374     tmp_listcomp_1__iter_value_0 = NULL;
375  
376     }
377     {
378     // Re-raise.
379     exception_type = exception_keeper_type_1;
380     exception_value = exception_keeper_value_1;
381     exception_tb = exception_keeper_tb_1;
382     exception_lineno = exception_keeper_lineno_1;
383  
384     goto frame_exception_exit_2;
385     }
386     // End of try:
387     }
388  
389 #if 0
390     RESTORE_FRAME_EXCEPTION( frame_8d0442114cb42b9a04ceaab7f82518bd_2 );
391 #endif
392  
393     // Put the previous frame back on top.
394     popFrameStack();
395  
396     goto frame_no_exception_1;
397  
398     frame_return_exit_2:;
399 #if 0
400     RESTORE_FRAME_EXCEPTION( frame_8d0442114cb42b9a04ceaab7f82518bd_2 );
401 #endif
402  
403     // Put the previous frame back on top.
404     popFrameStack();
405  
406     goto try_return_handler_2;
407  
408     frame_exception_exit_2:;
409  
410 #if 0
411     RESTORE_FRAME_EXCEPTION( frame_8d0442114cb42b9a04ceaab7f82518bd_2 );
412 #endif
413  
414     if ( exception_tb == NULL )
415     {
416         exception_tb = MAKE_TRACEBACK( frame_8d0442114cb42b9a04ceaab7f82518bd_2, exception_lineno );
417     }
418     else if ( exception_tb->tb_frame != &frame_8d0442114cb42b9a04ceaab7f82518bd_2->m_frame )
419     {
420         exception_tb = ADD_TRACEBACK( exception_tb, frame_8d0442114cb42b9a04ceaab7f82518bd_2, exception_lineno );
421     }
422  
423     // Attachs locals to frame if any.
424     Nuitka_Frame_AttachLocals(
425         (struct Nuitka_FrameObject *)frame_8d0442114cb42b9a04ceaab7f82518bd_2,
426         type_description_2,
427         outline_0_var_x
428     );
429  
430  
431     // Release cached frame.
432     if ( frame_8d0442114cb42b9a04ceaab7f82518bd_2 == cache_frame_8d0442114cb42b9a04ceaab7f82518bd_2 )
433     {
434         Py_DECREF( frame_8d0442114cb42b9a04ceaab7f82518bd_2 );
435     }
436     cache_frame_8d0442114cb42b9a04ceaab7f82518bd_2 = NULL;
437  
438     assertFrameObject( frame_8d0442114cb42b9a04ceaab7f82518bd_2 );
439  
440     // Put the previous frame back on top.
441     popFrameStack();
442  
443     // Return the error.
444     goto nested_frame_exit_1;
445  
446     frame_no_exception_1:;
447     goto skip_nested_handling_1;
448     nested_frame_exit_1:;
449     type_description_1 = "o";
450     goto try_except_handler_2;
451     skip_nested_handling_1:;
452     // tried codes exits in all cases
453     NUITKA_CANNOT_GET_HERE( __main__$$$function_1_calledRepeatedly );
454     return NULL;
455     // Return handler code:
456     try_return_handler_2:;
457     {
458     Py_XDECREF( outline_0_var_x );
459     outline_0_var_x = NULL;
460  
461     }
462     {
463     goto outline_result_1;
464     }
465     // Exception handler code:
466     try_except_handler_2:;
467     exception_keeper_type_2 = exception_type;
468     exception_keeper_value_2 = exception_value;
469     exception_keeper_tb_2 = exception_tb;
470     exception_keeper_lineno_2 = exception_lineno;
471     exception_type = NULL;
472     exception_value = NULL;
473     exception_tb = NULL;
474     exception_lineno = 0;
475  
476     {
477     Py_XDECREF( outline_0_var_x );
478     outline_0_var_x = NULL;
479  
480     }
481     {
482     // Re-raise.
483     exception_type = exception_keeper_type_2;
484     exception_value = exception_keeper_value_2;
485     exception_tb = exception_keeper_tb_2;
486     exception_lineno = exception_keeper_lineno_2;
487  
488     goto outline_exception_1;
489     }
490     // End of try:
491     }
492     // Return statement must have exited already.
493     NUITKA_CANNOT_GET_HERE( __main__$$$function_1_calledRepeatedly );
494     return NULL;
495     outline_exception_1:;
496     exception_lineno = 28;
497     goto frame_exception_exit_1;
498     outline_result_1:;
499     assert( var_l == NULL );
500     var_l = tmp_assign_source_1;
501 166
502     } 167     }
503     { 168     {
504     PyObject *tmp_tuple_element_1; 169     PyObject *tmp_tuple_element_1;
505     PyObject *tmp_mvar_value_2; 170     PyObject *tmp_mvar_value_2;
n 506     CHECK_OBJECT( var_l ); n
507     tmp_tuple_element_1 = var_l; 171     tmp_tuple_element_1 = const_int_pos_1;
508     tmp_return_value = PyTuple_New( 2 ); 172     tmp_return_value = PyTuple_New( 2 );
509     Py_INCREF( tmp_tuple_element_1 ); 173     Py_INCREF( tmp_tuple_element_1 );
510     PyTuple_SET_ITEM( tmp_return_value, 0, tmp_tuple_element_1 ); 174     PyTuple_SET_ITEM( tmp_return_value, 0, tmp_tuple_element_1 );
511     tmp_mvar_value_2 = GET_STRING_DICT_VALUE( moduledict___main__, (Nuitka_StringObject *)const_str_plain_x ); 175     tmp_mvar_value_2 = GET_STRING_DICT_VALUE( moduledict___main__, (Nuitka_StringObject *)const_str_plain_x );
512 176
524         exception_tb = NULL; 188         exception_tb = NULL;
525         NORMALIZE_EXCEPTION( &exception_type, &exception_value, &exception_tb ); 189         NORMALIZE_EXCEPTION( &exception_type, &exception_value, &exception_tb );
526         CHAIN_EXCEPTION( exception_value ); 190         CHAIN_EXCEPTION( exception_value );
527 191
528         exception_lineno = 36; 192         exception_lineno = 36;
n 529         type_description_1 = "o"; n 193         type_description_1 = "N";
530         goto frame_exception_exit_1; 194         goto frame_exception_exit_1;
531     } 195     }
532 196
533     tmp_tuple_element_1 = tmp_mvar_value_2; 197     tmp_tuple_element_1 = tmp_mvar_value_2;
534     Py_INCREF( tmp_tuple_element_1 ); 198     Py_INCREF( tmp_tuple_element_1 );
541 #endif 205 #endif
542 206
543     // Put the previous frame back on top. 207     // Put the previous frame back on top.
544     popFrameStack(); 208     popFrameStack();
545 209
n 546     goto frame_no_exception_2; n 210     goto frame_no_exception_1;
547 211
548     frame_return_exit_1:; 212     frame_return_exit_1:;
549 #if 0 213 #if 0
550     RESTORE_FRAME_EXCEPTION( frame_1694415e1c856e1c0b7ca48892f6901b ); 214     RESTORE_FRAME_EXCEPTION( frame_1694415e1c856e1c0b7ca48892f6901b );
551 #endif 215 #endif
552 216
553     // Put the previous frame back on top. 217     // Put the previous frame back on top.
554     popFrameStack(); 218     popFrameStack();
555 219
n 556     goto try_return_handler_1; n 220     goto function_return_exit;
557 221
558     frame_exception_exit_1:; 222     frame_exception_exit_1:;
559 223
560 #if 0 224 #if 0
561     RESTORE_FRAME_EXCEPTION( frame_1694415e1c856e1c0b7ca48892f6901b ); 225     RESTORE_FRAME_EXCEPTION( frame_1694415e1c856e1c0b7ca48892f6901b );
572 236
573     // Attachs locals to frame if any. 237     // Attachs locals to frame if any.
574     Nuitka_Frame_AttachLocals( 238     Nuitka_Frame_AttachLocals(
575         (struct Nuitka_FrameObject *)frame_1694415e1c856e1c0b7ca48892f6901b, 239         (struct Nuitka_FrameObject *)frame_1694415e1c856e1c0b7ca48892f6901b,
576         type_description_1, 240         type_description_1,
n 577         var_l n 241         NULL
578     ); 242     );
579 243
580 244
581     // Release cached frame. 245     // Release cached frame.
582     if ( frame_1694415e1c856e1c0b7ca48892f6901b == cache_frame_1694415e1c856e1c0b7ca48892f6901b ) 246     if ( frame_1694415e1c856e1c0b7ca48892f6901b == cache_frame_1694415e1c856e1c0b7ca48892f6901b )
589 253
590     // Put the previous frame back on top. 254     // Put the previous frame back on top.
591     popFrameStack(); 255     popFrameStack();
592 256
593     // Return the error. 257     // Return the error.
n 594     goto try_except_handler_1; n
595  
596     frame_no_exception_2:;
597     // tried codes exits in all cases
598     NUITKA_CANNOT_GET_HERE( __main__$$$function_1_calledRepeatedly );
599     return NULL;
600     // Return handler code:
601     try_return_handler_1:;
602     {
603     CHECK_OBJECT( (PyObject *)var_l );
604     Py_DECREF( var_l );
605     var_l = NULL;
606  
607     }
608     {
609     goto function_return_exit;
610     }
611     // Exception handler code:
612     try_except_handler_1:;
613     exception_keeper_type_3 = exception_type;
614     exception_keeper_value_3 = exception_value;
615     exception_keeper_tb_3 = exception_tb;
616     exception_keeper_lineno_3 = exception_lineno;
617     exception_type = NULL;
618     exception_value = NULL;
619     exception_tb = NULL;
620     exception_lineno = 0;
621  
622     {
623     Py_XDECREF( var_l );
624     var_l = NULL;
625  
626     }
627     {
628     // Re-raise.
629     exception_type = exception_keeper_type_3;
630     exception_value = exception_keeper_value_3;
631     exception_tb = exception_keeper_tb_3;
632     exception_lineno = exception_keeper_lineno_3;
633  
634     goto function_exception_exit; 258     goto function_exception_exit;
t 635     } t 259  
636     // End of try: 260     frame_no_exception_1:;
637     }
638 261
639     // Return statement must have exited already. 262     // Return statement must have exited already.
640     NUITKA_CANNOT_GET_HERE( __main__$$$function_1_calledRepeatedly ); 263     NUITKA_CANNOT_GET_HERE( __main__$$$function_1_calledRepeatedly );
641     return NULL; 264     return NULL;
642 265