Construct ListContraction

Performance Diagrams

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