Construct ListContraction

Performance Diagrams

Construct ListContraction 002000000020000000400000004000000060000000600000008000000080000000100000000100000000120000000120000000140000000140000000160000000160000000180000000180000000CPython 2.7Nuitka (master)Nuitka (develop)Nuitka (factory)19536017588.11538461538461257.0CPython 2.774793855240.03846153846155409.50699145033803Nuitka (master)74793337391.96153846153845409.5076466799376Nuitka (develop)74793422543.8846153846154409.50753916156697Nuitka (factory)Construct ListContractionTicks Construct ListContraction 002000000020000000400000004000000060000000600000008000000080000000100000000100000000120000000120000000140000000140000000160000000160000000180000000180000000200000000200000000220000000220000000240000000240000000260000000260000000280000000280000000CPython 3.5Nuitka (master)Nuitka (develop)Nuitka (factory)28339106188.11538461538461257.0CPython 3.596860255240.03846153846155419.65379615240477Nuitka (master)96860402391.96153846153845419.65366796924536Nuitka (develop)96860864543.8846153846154419.6532651078873Nuitka (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_1d344758940e23885a03d405a77ca493; 37 static PyObject *const_str_digest_1d344758940e23885a03d405a77ca493;
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___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_str_digest_1d344758940e23885a03d405a77ca493 = UNSTREAM_STRING_ASCII(&constant_bin[ 110 ], 40, 0); 68     const_str_digest_1d344758940e23885a03d405a77ca493 = UNSTREAM_STRING_ASCII(&constant_bin[ 105 ], 40, 0);
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[ 150 ], 3, 0); n 71     const_str_digest_5ed1392909ad16e6227b8230f4582352 = UNSTREAM_STRING_ASCII(&constant_bin[ 145 ], 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);
83     const_str_plain_module_value1 = UNSTREAM_STRING_ASCII(&constant_bin[ 6 ], 13, 1); 74     const_str_plain_module_value1 = UNSTREAM_STRING_ASCII(&constant_bin[ 6 ], 13, 1);
84     const_str_plain_calledRepeatedly = UNSTREAM_STRING_ASCII(&constant_bin[ 64 ], 16, 1); 75     const_str_plain_calledRepeatedly = UNSTREAM_STRING_ASCII(&constant_bin[ 64 ], 16, 1);
n 85     const_str_angle_module = UNSTREAM_STRING_ASCII(&constant_bin[ 153 ], 8, 0); n 76     const_str_angle_module = UNSTREAM_STRING_ASCII(&constant_bin[ 148 ], 8, 0);
86     const_str_plain_None = UNSTREAM_STRING_ASCII(&constant_bin[ 161 ], 4, 1); 77     const_str_plain_None = UNSTREAM_STRING_ASCII(&constant_bin[ 156 ], 4, 1);
87     const_str_plain_x = UNSTREAM_STRING_ASCII(&constant_bin[ 41 ], 1, 1); 78     const_str_plain_x = UNSTREAM_STRING_ASCII(&constant_bin[ 41 ], 1, 1);
n 88     const_str_angle_listcomp = UNSTREAM_STRING_ASCII(&constant_bin[ 165 ], 10, 0); n
89     const_str_plain_repeat = UNSTREAM_STRING_ASCII(&constant_bin[ 175 ], 6, 1); 79     const_str_plain_repeat = UNSTREAM_STRING_ASCII(&constant_bin[ 160 ], 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_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_558b1c7ddb7fc74b8708b98c2d217cef; n
113 static PyCodeObject *codeobj_91d8f86ce0467e6f98bc0d35db5c6474; 99 static PyCodeObject *codeobj_91d8f86ce0467e6f98bc0d35db5c6474;
114 static PyCodeObject *codeobj_427a3d7baf9b7d6c615db30548fcf09f; 100 static PyCodeObject *codeobj_427a3d7baf9b7d6c615db30548fcf09f;
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_1d344758940e23885a03d405a77ca493; 106     module_filename_obj = const_str_digest_1d344758940e23885a03d405a77ca493;
n 121     codeobj_558b1c7ddb7fc74b8708b98c2d217cef = 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_91d8f86ce0467e6f98bc0d35db5c6474 = MAKE_CODEOBJ(module_filename_obj, const_str_angle_module, 1, const_tuple_empty, 0, 0, CO_NOFREE); 107     codeobj_91d8f86ce0467e6f98bc0d35db5c6474 = MAKE_CODEOBJ(module_filename_obj, const_str_angle_module, 1, const_tuple_empty, 0, 0, CO_NOFREE);
123     codeobj_427a3d7baf9b7d6c615db30548fcf09f = 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_427a3d7baf9b7d6c615db30548fcf09f = 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.
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_427a3d7baf9b7d6c615db30548fcf09f; 123     struct Nuitka_FrameObject *frame_427a3d7baf9b7d6c615db30548fcf09f;
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_558b1c7ddb7fc74b8708b98c2d217cef_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_558b1c7ddb7fc74b8708b98c2d217cef_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_427a3d7baf9b7d6c615db30548fcf09f = NULL; 130     static struct Nuitka_FrameObject *cache_frame_427a3d7baf9b7d6c615db30548fcf09f = 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 body. 132     // Actual function body.
n 169     // Tried code: n
170     MAKE_OR_REUSE_FRAME(cache_frame_427a3d7baf9b7d6c615db30548fcf09f, codeobj_427a3d7baf9b7d6c615db30548fcf09f, module___main__, sizeof(void *)); 133     MAKE_OR_REUSE_FRAME(cache_frame_427a3d7baf9b7d6c615db30548fcf09f, codeobj_427a3d7baf9b7d6c615db30548fcf09f, module___main__, sizeof(void *));
171     frame_427a3d7baf9b7d6c615db30548fcf09f = cache_frame_427a3d7baf9b7d6c615db30548fcf09f; 134     frame_427a3d7baf9b7d6c615db30548fcf09f = cache_frame_427a3d7baf9b7d6c615db30548fcf09f;
172 135
173     // Push the new frame as the currently active one. 136     // Push the new frame as the currently active one.
174     pushFrameStack(frame_427a3d7baf9b7d6c615db30548fcf09f); 137     pushFrameStack(frame_427a3d7baf9b7d6c615db30548fcf09f);
193             exception_tb = NULL; 156             exception_tb = NULL;
194             NORMALIZE_EXCEPTION(&exception_type, &exception_value, &exception_tb); 157             NORMALIZE_EXCEPTION(&exception_type, &exception_value, &exception_tb);
195             CHAIN_EXCEPTION(exception_value); 158             CHAIN_EXCEPTION(exception_value);
196 159
197             exception_lineno = 24; 160             exception_lineno = 24;
n 198             type_description_1 = "o"; n 161             type_description_1 = "N";
199             goto frame_exception_exit_1; 162             goto frame_exception_exit_1;
200         } 163         }
201 164
n 202     } n
203     {
204         PyObject *tmp_assign_source_1;
205         {
206             PyObject *tmp_assign_source_2;
207             PyObject *tmp_iter_arg_1;
208             tmp_iter_arg_1 = const_xrange_0_7;
209             tmp_assign_source_2 = MAKE_ITERATOR(tmp_iter_arg_1);
210             assert(!(tmp_assign_source_2 == NULL));
211             assert(tmp_listcomp_1__$0 == NULL);
212             tmp_listcomp_1__$0 = tmp_assign_source_2;
213         }
214         {
215             PyObject *tmp_assign_source_3;
216             tmp_assign_source_3 = PyList_New(0);
217             assert(tmp_listcomp_1__contraction == NULL);
218             tmp_listcomp_1__contraction = tmp_assign_source_3;
219         }
220         // Tried code:
221         MAKE_OR_REUSE_FRAME(cache_frame_558b1c7ddb7fc74b8708b98c2d217cef_2, codeobj_558b1c7ddb7fc74b8708b98c2d217cef, module___main__, sizeof(void *));
222         frame_558b1c7ddb7fc74b8708b98c2d217cef_2 = cache_frame_558b1c7ddb7fc74b8708b98c2d217cef_2;
223  
224         // Push the new frame as the currently active one.
225         pushFrameStack(frame_558b1c7ddb7fc74b8708b98c2d217cef_2);
226  
227         // Mark the frame object as in use, ref count 1 will be up for reuse.
228         assert(Py_REFCNT(frame_558b1c7ddb7fc74b8708b98c2d217cef_2) == 2); // Frame stack
229  
230         // Framed code:
231         // Tried code:
232         loop_start_1:;
233         {
234             PyObject *tmp_next_source_1;
235             PyObject *tmp_assign_source_4;
236             CHECK_OBJECT(tmp_listcomp_1__$0);
237             tmp_next_source_1 = tmp_listcomp_1__$0;
238             tmp_assign_source_4 = ITERATOR_NEXT(tmp_next_source_1);
239             if (tmp_assign_source_4 == NULL) {
240                 if (CHECK_AND_CLEAR_STOP_ITERATION_OCCURRED()) {
241  
242                     goto loop_end_1;
243                 } else {
244  
245                     FETCH_ERROR_OCCURRED(&exception_type, &exception_value, &exception_tb);
246                     type_description_2 = "o";
247                     exception_lineno = 28;
248                     goto try_except_handler_3;
249                 }
250             }
251  
252             {
253                 PyObject *old = tmp_listcomp_1__iter_value_0;
254                 tmp_listcomp_1__iter_value_0 = tmp_assign_source_4;
255                 Py_XDECREF(old);
256             }
257  
258         }
259         {
260             PyObject *tmp_assign_source_5;
261             CHECK_OBJECT(tmp_listcomp_1__iter_value_0);
262             tmp_assign_source_5 = tmp_listcomp_1__iter_value_0;
263             {
264                 PyObject *old = outline_0_var_x;
265                 outline_0_var_x = tmp_assign_source_5;
266                 Py_INCREF(outline_0_var_x);
267                 Py_XDECREF(old);
268             }
269  
270         }
271         {
272             PyObject *tmp_append_list_1;
273             PyObject *tmp_append_value_1;
274             CHECK_OBJECT(tmp_listcomp_1__contraction);
275             tmp_append_list_1 = tmp_listcomp_1__contraction;
276             CHECK_OBJECT(outline_0_var_x);
277             tmp_append_value_1 = outline_0_var_x;
278             assert(PyList_Check(tmp_append_list_1));
279             tmp_res = PyList_Append(tmp_append_list_1, tmp_append_value_1);
280             if (tmp_res == -1) {
281                 assert(ERROR_OCCURRED());
282  
283                 FETCH_ERROR_OCCURRED(&exception_type, &exception_value, &exception_tb);
284  
285  
286                 exception_lineno = 28;
287                 type_description_2 = "o";
288                 goto try_except_handler_3;
289             }
290         }
291         if (CONSIDER_THREADING() == false) {
292             assert(ERROR_OCCURRED());
293  
294             FETCH_ERROR_OCCURRED(&exception_type, &exception_value, &exception_tb);
295  
296  
297             exception_lineno = 28;
298             type_description_2 = "o";
299             goto try_except_handler_3;
300         }
301         goto loop_start_1;
302         loop_end_1:;
303         CHECK_OBJECT(tmp_listcomp_1__contraction);
304         tmp_assign_source_1 = tmp_listcomp_1__contraction;
305         Py_INCREF(tmp_assign_source_1);
306         goto try_return_handler_3;
307         // tried codes exits in all cases
308         NUITKA_CANNOT_GET_HERE(__main__$$$function_1_calledRepeatedly);
309         return NULL;
310         // Return handler code:
311         try_return_handler_3:;
312         CHECK_OBJECT((PyObject *)tmp_listcomp_1__$0);
313         Py_DECREF(tmp_listcomp_1__$0);
314         tmp_listcomp_1__$0 = NULL;
315  
316         CHECK_OBJECT((PyObject *)tmp_listcomp_1__contraction);
317         Py_DECREF(tmp_listcomp_1__contraction);
318         tmp_listcomp_1__contraction = NULL;
319  
320         Py_XDECREF(tmp_listcomp_1__iter_value_0);
321         tmp_listcomp_1__iter_value_0 = NULL;
322  
323         goto frame_return_exit_2;
324         // Exception handler code:
325         try_except_handler_3:;
326         exception_keeper_type_1 = exception_type;
327         exception_keeper_value_1 = exception_value;
328         exception_keeper_tb_1 = exception_tb;
329         exception_keeper_lineno_1 = exception_lineno;
330         exception_type = NULL;
331         exception_value = NULL;
332         exception_tb = NULL;
333         exception_lineno = 0;
334  
335         CHECK_OBJECT((PyObject *)tmp_listcomp_1__$0);
336         Py_DECREF(tmp_listcomp_1__$0);
337         tmp_listcomp_1__$0 = NULL;
338  
339         CHECK_OBJECT((PyObject *)tmp_listcomp_1__contraction);
340         Py_DECREF(tmp_listcomp_1__contraction);
341         tmp_listcomp_1__contraction = NULL;
342  
343         Py_XDECREF(tmp_listcomp_1__iter_value_0);
344         tmp_listcomp_1__iter_value_0 = NULL;
345  
346         // Re-raise.
347         exception_type = exception_keeper_type_1;
348         exception_value = exception_keeper_value_1;
349         exception_tb = exception_keeper_tb_1;
350         exception_lineno = exception_keeper_lineno_1;
351  
352         goto frame_exception_exit_2;
353         // End of try:
354  
355 #if 0
356         RESTORE_FRAME_EXCEPTION(frame_558b1c7ddb7fc74b8708b98c2d217cef_2);
357 #endif
358  
359         // Put the previous frame back on top.
360         popFrameStack();
361  
362         goto frame_no_exception_1;
363  
364         frame_return_exit_2:;
365 #if 0
366         RESTORE_FRAME_EXCEPTION(frame_558b1c7ddb7fc74b8708b98c2d217cef_2);
367 #endif
368  
369         // Put the previous frame back on top.
370         popFrameStack();
371  
372         goto try_return_handler_2;
373  
374         frame_exception_exit_2:;
375  
376 #if 0
377         RESTORE_FRAME_EXCEPTION(frame_558b1c7ddb7fc74b8708b98c2d217cef_2);
378 #endif
379  
380         if (exception_tb == NULL) {
381             exception_tb = MAKE_TRACEBACK(frame_558b1c7ddb7fc74b8708b98c2d217cef_2, exception_lineno);
382         }
383         else if (exception_tb->tb_frame != &frame_558b1c7ddb7fc74b8708b98c2d217cef_2->m_frame) {
384             exception_tb = ADD_TRACEBACK(exception_tb, frame_558b1c7ddb7fc74b8708b98c2d217cef_2, exception_lineno);
385         }
386  
387         // Attachs locals to frame if any.
388         Nuitka_Frame_AttachLocals(
389             (struct Nuitka_FrameObject *)frame_558b1c7ddb7fc74b8708b98c2d217cef_2,
390             type_description_2,
391             outline_0_var_x
392         );
393  
394  
395         // Release cached frame.
396         if (frame_558b1c7ddb7fc74b8708b98c2d217cef_2 == cache_frame_558b1c7ddb7fc74b8708b98c2d217cef_2) {
397             Py_DECREF(frame_558b1c7ddb7fc74b8708b98c2d217cef_2);
398         }
399         cache_frame_558b1c7ddb7fc74b8708b98c2d217cef_2 = NULL;
400  
401         assertFrameObject(frame_558b1c7ddb7fc74b8708b98c2d217cef_2);
402  
403         // Put the previous frame back on top.
404         popFrameStack();
405  
406         // Return the error.
407         goto nested_frame_exit_1;
408  
409         frame_no_exception_1:;
410         goto skip_nested_handling_1;
411         nested_frame_exit_1:;
412         type_description_1 = "o";
413         goto try_except_handler_2;
414         skip_nested_handling_1:;
415         // tried codes exits in all cases
416         NUITKA_CANNOT_GET_HERE(__main__$$$function_1_calledRepeatedly);
417         return NULL;
418         // Return handler code:
419         try_return_handler_2:;
420         Py_XDECREF(outline_0_var_x);
421         outline_0_var_x = NULL;
422  
423         goto outline_result_1;
424         // Exception handler code:
425         try_except_handler_2:;
426         exception_keeper_type_2 = exception_type;
427         exception_keeper_value_2 = exception_value;
428         exception_keeper_tb_2 = exception_tb;
429         exception_keeper_lineno_2 = exception_lineno;
430         exception_type = NULL;
431         exception_value = NULL;
432         exception_tb = NULL;
433         exception_lineno = 0;
434  
435         Py_XDECREF(outline_0_var_x);
436         outline_0_var_x = NULL;
437  
438         // Re-raise.
439         exception_type = exception_keeper_type_2;
440         exception_value = exception_keeper_value_2;
441         exception_tb = exception_keeper_tb_2;
442         exception_lineno = exception_keeper_lineno_2;
443  
444         goto outline_exception_1;
445         // End of try:
446         // Return statement must have exited already.
447         NUITKA_CANNOT_GET_HERE(__main__$$$function_1_calledRepeatedly);
448         return NULL;
449         outline_exception_1:;
450         exception_lineno = 28;
451         goto frame_exception_exit_1;
452         outline_result_1:;
453         assert(var_l == NULL);
454         var_l = tmp_assign_source_1;
455     } 165     }
456     { 166     {
457         PyObject *tmp_tuple_element_1; 167         PyObject *tmp_tuple_element_1;
458         PyObject *tmp_mvar_value_2; 168         PyObject *tmp_mvar_value_2;
n 459         CHECK_OBJECT(var_l); n
460         tmp_tuple_element_1 = var_l; 169         tmp_tuple_element_1 = const_int_pos_1;
461         tmp_return_value = PyTuple_New(2); 170         tmp_return_value = PyTuple_New(2);
462         Py_INCREF(tmp_tuple_element_1); 171         Py_INCREF(tmp_tuple_element_1);
463         PyTuple_SET_ITEM(tmp_return_value, 0, tmp_tuple_element_1); 172         PyTuple_SET_ITEM(tmp_return_value, 0, tmp_tuple_element_1);
464         tmp_mvar_value_2 = GET_STRING_DICT_VALUE(moduledict___main__, (Nuitka_StringObject *)const_str_plain_x); 173         tmp_mvar_value_2 = GET_STRING_DICT_VALUE(moduledict___main__, (Nuitka_StringObject *)const_str_plain_x);
465 174
475             exception_tb = NULL; 184             exception_tb = NULL;
476             NORMALIZE_EXCEPTION(&exception_type, &exception_value, &exception_tb); 185             NORMALIZE_EXCEPTION(&exception_type, &exception_value, &exception_tb);
477             CHAIN_EXCEPTION(exception_value); 186             CHAIN_EXCEPTION(exception_value);
478 187
479             exception_lineno = 36; 188             exception_lineno = 36;
n 480             type_description_1 = "o"; n 189             type_description_1 = "N";
481             goto frame_exception_exit_1; 190             goto frame_exception_exit_1;
482         } 191         }
483 192
484         tmp_tuple_element_1 = tmp_mvar_value_2; 193         tmp_tuple_element_1 = tmp_mvar_value_2;
485         Py_INCREF(tmp_tuple_element_1); 194         Py_INCREF(tmp_tuple_element_1);
492 #endif 201 #endif
493 202
494     // Put the previous frame back on top. 203     // Put the previous frame back on top.
495     popFrameStack(); 204     popFrameStack();
496 205
n 497     goto frame_no_exception_2; n 206     goto frame_no_exception_1;
498 207
499     frame_return_exit_1:; 208     frame_return_exit_1:;
500 #if 0 209 #if 0
501     RESTORE_FRAME_EXCEPTION(frame_427a3d7baf9b7d6c615db30548fcf09f); 210     RESTORE_FRAME_EXCEPTION(frame_427a3d7baf9b7d6c615db30548fcf09f);
502 #endif 211 #endif
503 212
504     // Put the previous frame back on top. 213     // Put the previous frame back on top.
505     popFrameStack(); 214     popFrameStack();
506 215
n 507     goto try_return_handler_1; n 216     goto function_return_exit;
508 217
509     frame_exception_exit_1:; 218     frame_exception_exit_1:;
510 219
511 #if 0 220 #if 0
512     RESTORE_FRAME_EXCEPTION(frame_427a3d7baf9b7d6c615db30548fcf09f); 221     RESTORE_FRAME_EXCEPTION(frame_427a3d7baf9b7d6c615db30548fcf09f);
521 230
522     // Attachs locals to frame if any. 231     // Attachs locals to frame if any.
523     Nuitka_Frame_AttachLocals( 232     Nuitka_Frame_AttachLocals(
524         (struct Nuitka_FrameObject *)frame_427a3d7baf9b7d6c615db30548fcf09f, 233         (struct Nuitka_FrameObject *)frame_427a3d7baf9b7d6c615db30548fcf09f,
525         type_description_1, 234         type_description_1,
n 526         var_l n 235         NULL
527     ); 236     );
528 237
529 238
530     // Release cached frame. 239     // Release cached frame.
531     if (frame_427a3d7baf9b7d6c615db30548fcf09f == cache_frame_427a3d7baf9b7d6c615db30548fcf09f) { 240     if (frame_427a3d7baf9b7d6c615db30548fcf09f == cache_frame_427a3d7baf9b7d6c615db30548fcf09f) {
537 246
538     // Put the previous frame back on top. 247     // Put the previous frame back on top.
539     popFrameStack(); 248     popFrameStack();
540 249
541     // Return the error. 250     // Return the error.
n 542     goto try_except_handler_1; n
543  
544     frame_no_exception_2:;
545     // tried codes exits in all cases
546     NUITKA_CANNOT_GET_HERE(__main__$$$function_1_calledRepeatedly);
547     return NULL;
548     // Return handler code:
549     try_return_handler_1:;
550     CHECK_OBJECT((PyObject *)var_l);
551     Py_DECREF(var_l);
552     var_l = NULL;
553  
554     goto function_return_exit;
555     // Exception handler code:
556     try_except_handler_1:;
557     exception_keeper_type_3 = exception_type;
558     exception_keeper_value_3 = exception_value;
559     exception_keeper_tb_3 = exception_tb;
560     exception_keeper_lineno_3 = exception_lineno;
561     exception_type = NULL;
562     exception_value = NULL;
563     exception_tb = NULL;
564     exception_lineno = 0;
565  
566     Py_XDECREF(var_l);
567     var_l = NULL;
568  
569     // Re-raise.
570     exception_type = exception_keeper_type_3;
571     exception_value = exception_keeper_value_3;
572     exception_tb = exception_keeper_tb_3;
573     exception_lineno = exception_keeper_lineno_3;
574  
575     goto function_exception_exit; 251     goto function_exception_exit;
t 576     // End of try: t 252  
253     frame_no_exception_1:;
577 254
578     // Return statement must have exited already. 255     // Return statement must have exited already.
579     NUITKA_CANNOT_GET_HERE(__main__$$$function_1_calledRepeatedly); 256     NUITKA_CANNOT_GET_HERE(__main__$$$function_1_calledRepeatedly);
580     return NULL; 257     return NULL;
581 258