Construct ListContraction

Performance Diagrams

Construct ListContraction 002000000020000000400000004000000060000000600000008000000080000000100000000100000000120000000120000000140000000140000000160000000160000000180000000180000000200000000200000000CPython 2.7Nuitka (master)Nuitka (develop)Nuitka (factory)21944156788.11538461538461257.0CPython 2.784427637240.03846153846155409.0405623077993Nuitka (master)84427325391.96153846153845409.04091365417844Nuitka (develop)84427383543.8846153846154409.0408483397875Nuitka (factory)Construct ListContractionTicks Construct ListContraction 002000000020000000400000004000000060000000600000008000000080000000100000000100000000120000000120000000140000000140000000160000000160000000180000000180000000200000000200000000220000000220000000240000000240000000260000000260000000280000000280000000CPython 3.5Nuitka (master)Nuitka (develop)Nuitka (factory)28308676688.11538461538461257.0CPython 3.5100059783240.03846153846155416.7700377807081Nuitka (master)100059514391.96153846153845416.77027259930946Nuitka (develop)100060000543.8846153846154416.76984835455005Nuitka (factory)Construct ListContractionTicks

Source Code with Construct

module_value1 = 1000

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

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



    return l, x

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

print("OK.")

Source Code without Construct

module_value1 = 1000

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

# construct_begin





# construct_alternative
    l = 1
# construct_end

    return l, x

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

print("OK.")

Context Diff of Source Code


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

Context Diff of Generated Code


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