Construct ListContraction

Performance Diagrams

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