Construct ListContraction

Performance Diagrams

Construct ListContraction 002000000020000000400000004000000060000000600000008000000080000000100000000100000000120000000120000000140000000140000000160000000160000000180000000180000000CPython 2.7Nuitka (master)Nuitka (develop)Nuitka (factory)18096937988.11538461538461257.0CPython 2.780781970240.03846153846155393.8068468017114Nuitka (master)80799817391.96153846153845393.78247655579685Nuitka (develop)80782057543.8846153846154393.8067280023953Nuitka (factory)Construct ListContractionTicks Construct ListContraction 002000000020000000400000004000000060000000600000008000000080000000100000000100000000120000000120000000140000000140000000160000000160000000180000000180000000200000000200000000220000000220000000240000000240000000260000000260000000280000000280000000CPython 3.5Nuitka (master)Nuitka (develop)Nuitka (factory)28862821888.11538461538461257.0CPython 3.5102059045240.03846153846155416.73529290635486Nuitka (master)102042698391.96153846153845416.7492887492433Nuitka (develop)102043878543.8846153846154416.7482784663407Nuitka (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_digest_5b1b339ff03aa589d67094a1062eb678; 50 static PyObject *const_str_digest_5b1b339ff03aa589d67094a1062eb678;
55 static PyObject *const_str_plain_l; 51 static PyObject *const_str_plain_l;
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_5b1b339ff03aa589d67094a1062eb678 = UNSTREAM_STRING( &constant_bin[ 86 ], 73, 0 ); 81     const_str_digest_5b1b339ff03aa589d67094a1062eb678 = 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_00679e1b115231752f890e0ea54d3d25; n
111 static PyCodeObject *codeobj_9104d45b0dc03f6cc6155d68df1fcc1a; 101 static PyCodeObject *codeobj_9104d45b0dc03f6cc6155d68df1fcc1a;
112 static PyCodeObject *codeobj_bae922a1d46f1434da7bcae5bab7c005; 102 static PyCodeObject *codeobj_bae922a1d46f1434da7bcae5bab7c005;
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_5b1b339ff03aa589d67094a1062eb678; 108     module_filename_obj = const_str_digest_5b1b339ff03aa589d67094a1062eb678;
n 119     codeobj_00679e1b115231752f890e0ea54d3d25 = 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_9104d45b0dc03f6cc6155d68df1fcc1a = MAKE_CODEOBJ( module_filename_obj, const_str_angle_module, 1, const_tuple_empty, 0, 0, CO_NOFREE ); 109     codeobj_9104d45b0dc03f6cc6155d68df1fcc1a = MAKE_CODEOBJ( module_filename_obj, const_str_angle_module, 1, const_tuple_empty, 0, 0, CO_NOFREE );
121     codeobj_main = codeobj_9104d45b0dc03f6cc6155d68df1fcc1a; 110     codeobj_main = codeobj_9104d45b0dc03f6cc6155d68df1fcc1a;
122     codeobj_bae922a1d46f1434da7bcae5bab7c005 = 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_bae922a1d46f1434da7bcae5bab7c005 = 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_00679e1b115231752f890e0ea54d3d25_2 = NULL; n
174  
175     struct Nuitka_FrameObject *frame_00679e1b115231752f890e0ea54d3d25_2;
176  
177     static struct Nuitka_FrameObject *cache_frame_bae922a1d46f1434da7bcae5bab7c005 = NULL; 138     static struct Nuitka_FrameObject *cache_frame_bae922a1d46f1434da7bcae5bab7c005 = NULL;
178 139
179     struct Nuitka_FrameObject *frame_bae922a1d46f1434da7bcae5bab7c005; 140     struct Nuitka_FrameObject *frame_bae922a1d46f1434da7bcae5bab7c005;
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_bae922a1d46f1434da7bcae5bab7c005, codeobj_bae922a1d46f1434da7bcae5bab7c005, module___main__, sizeof(void *) ); 147     MAKE_OR_REUSE_FRAME( cache_frame_bae922a1d46f1434da7bcae5bab7c005, codeobj_bae922a1d46f1434da7bcae5bab7c005, module___main__, sizeof(void *) );
189     frame_bae922a1d46f1434da7bcae5bab7c005 = cache_frame_bae922a1d46f1434da7bcae5bab7c005; 148     frame_bae922a1d46f1434da7bcae5bab7c005 = cache_frame_bae922a1d46f1434da7bcae5bab7c005;
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_00679e1b115231752f890e0ea54d3d25_2, codeobj_00679e1b115231752f890e0ea54d3d25, module___main__, sizeof(void *) );
232     frame_00679e1b115231752f890e0ea54d3d25_2 = cache_frame_00679e1b115231752f890e0ea54d3d25_2;
233  
234     // Push the new frame as the currently active one.
235     pushFrameStack( frame_00679e1b115231752f890e0ea54d3d25_2 );
236  
237     // Mark the frame object as in use, ref count 1 will be up for reuse.
238     assert( Py_REFCNT( frame_00679e1b115231752f890e0ea54d3d25_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_bae922a1d46f1434da7bcae5bab7c005 );
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_bae922a1d46f1434da7bcae5bab7c005 );
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_bae922a1d46f1434da7bcae5bab7c005 );
232 #endif
233  
234     if ( exception_tb == NULL )
235     {
236         exception_tb = MAKE_TRACEBACK( frame_bae922a1d46f1434da7bcae5bab7c005, exception_lineno );
237     }
238     else if ( exception_tb->tb_frame != &frame_bae922a1d46f1434da7bcae5bab7c005->m_frame )
239     {
240         exception_tb = ADD_TRACEBACK( exception_tb, frame_bae922a1d46f1434da7bcae5bab7c005, exception_lineno );
241     }
242  
243     // Attachs locals to frame if any.
244     Nuitka_Frame_AttachLocals(
245         (struct Nuitka_FrameObject *)frame_bae922a1d46f1434da7bcae5bab7c005,
246         type_description_1,
247         NULL
248     );
249  
250  
251     // Release cached frame.
252     if ( frame_bae922a1d46f1434da7bcae5bab7c005 == cache_frame_bae922a1d46f1434da7bcae5bab7c005 )
253     {
254         Py_DECREF( frame_bae922a1d46f1434da7bcae5bab7c005 );
255     }
256     cache_frame_bae922a1d46f1434da7bcae5bab7c005 = NULL;
257  
258     assertFrameObject( frame_bae922a1d46f1434da7bcae5bab7c005 );
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     Py_XDECREF( tmp_listcontraction_1__$0 );
323     tmp_listcontraction_1__$0 = NULL;
324  
325     Py_XDECREF( tmp_listcontraction_1__contraction );
326     tmp_listcontraction_1__contraction = NULL;
327  
328     Py_XDECREF( tmp_listcontraction_1__iter_value_0 );
329     tmp_listcontraction_1__iter_value_0 = NULL;
330  
331     goto frame_return_exit_2;
332     // Exception handler code: 271     // Exception handler code:
n 333     try_except_handler_3:; n 272     try_except_handler_1:;
334     exception_keeper_type_1 = exception_type; 273     exception_keeper_type_1 = exception_type;
335     exception_keeper_value_1 = exception_value; 274     exception_keeper_value_1 = exception_value;
336     exception_keeper_tb_1 = exception_tb; 275     exception_keeper_tb_1 = exception_tb;
337     exception_keeper_lineno_1 = exception_lineno; 276     exception_keeper_lineno_1 = exception_lineno;
338     exception_type = NULL; 277     exception_type = NULL;
339     exception_value = NULL; 278     exception_value = NULL;
340     exception_tb = NULL; 279     exception_tb = NULL;
341     exception_lineno = 0; 280     exception_lineno = 0;
342 281
n 343     Py_XDECREF( tmp_listcontraction_1__$0 ); n
344     tmp_listcontraction_1__$0 = NULL;
345  
346     Py_XDECREF( tmp_listcontraction_1__contraction );
347     tmp_listcontraction_1__contraction = NULL;
348  
349     Py_XDECREF( tmp_listcontraction_1__iter_value_0 );
350     tmp_listcontraction_1__iter_value_0 = NULL;
351  
352     // Re-raise. 282     // Re-raise.
353     exception_type = exception_keeper_type_1; 283     exception_type = exception_keeper_type_1;
354     exception_value = exception_keeper_value_1; 284     exception_value = exception_keeper_value_1;
355     exception_tb = exception_keeper_tb_1; 285     exception_tb = exception_keeper_tb_1;
356     exception_lineno = exception_keeper_lineno_1; 286     exception_lineno = exception_keeper_lineno_1;
t 357   t
358     goto frame_exception_exit_2;
359     // End of try:
360  
361 #if 0
362     RESTORE_FRAME_EXCEPTION( frame_00679e1b115231752f890e0ea54d3d25_2 );
363 #endif
364  
365     // Put the previous frame back on top.
366     popFrameStack();
367  
368     goto frame_no_exception_1;
369  
370     frame_return_exit_2:;
371 #if 0
372     RESTORE_FRAME_EXCEPTION( frame_00679e1b115231752f890e0ea54d3d25_2 );
373 #endif
374  
375     // Put the previous frame back on top.
376     popFrameStack();
377  
378     goto try_return_handler_2;
379  
380     frame_exception_exit_2:;
381  
382 #if 0
383     RESTORE_FRAME_EXCEPTION( frame_00679e1b115231752f890e0ea54d3d25_2 );
384 #endif
385  
386     if ( exception_tb == NULL )
387     {
388         exception_tb = MAKE_TRACEBACK( frame_00679e1b115231752f890e0ea54d3d25_2, exception_lineno );
389     }
390     else if ( exception_tb->tb_frame != &frame_00679e1b115231752f890e0ea54d3d25_2->m_frame )
391     {
392         exception_tb = ADD_TRACEBACK( exception_tb, frame_00679e1b115231752f890e0ea54d3d25_2, exception_lineno );
393     }
394  
395     // Attachs locals to frame if any.
396     Nuitka_Frame_AttachLocals(
397         (struct Nuitka_FrameObject *)frame_00679e1b115231752f890e0ea54d3d25_2,
398         type_description_2,
399         outline_0_var_x
400     );
401  
402  
403     // Release cached frame.
404     if ( frame_00679e1b115231752f890e0ea54d3d25_2 == cache_frame_00679e1b115231752f890e0ea54d3d25_2 )
405     {
406         Py_DECREF( frame_00679e1b115231752f890e0ea54d3d25_2 );
407     }
408     cache_frame_00679e1b115231752f890e0ea54d3d25_2 = NULL;
409  
410     assertFrameObject( frame_00679e1b115231752f890e0ea54d3d25_2 );
411  
412     // Put the previous frame back on top.
413     popFrameStack();
414  
415     // Return the error.
416     goto nested_frame_exit_1;
417  
418     frame_no_exception_1:;
419  
420     goto skip_nested_handling_1;
421     nested_frame_exit_1:;
422     type_description_1 = "o";
423     goto try_except_handler_2;
424     skip_nested_handling_1:;
425     // tried codes exits in all cases
426     NUITKA_CANNOT_GET_HERE( __main__$$$function_1_calledRepeatedly );
427     return NULL;
428     // Return handler code:
429     try_return_handler_2:;
430     Py_XDECREF( outline_0_var_x );
431     outline_0_var_x = NULL;
432  
433     goto outline_result_1;
434     // Exception handler code:
435     try_except_handler_2:;
436     exception_keeper_type_2 = exception_type;
437     exception_keeper_value_2 = exception_value;
438     exception_keeper_tb_2 = exception_tb;
439     exception_keeper_lineno_2 = exception_lineno;
440     exception_type = NULL;
441     exception_value = NULL;
442     exception_tb = NULL;
443     exception_lineno = 0;
444  
445     Py_XDECREF( outline_0_var_x );
446     outline_0_var_x = NULL;
447  
448     // Re-raise.
449     exception_type = exception_keeper_type_2;
450     exception_value = exception_keeper_value_2;
451     exception_tb = exception_keeper_tb_2;
452     exception_lineno = exception_keeper_lineno_2;
453  
454     goto outline_exception_1;
455     // End of try:
456     // Return statement must have exited already.
457     NUITKA_CANNOT_GET_HERE( __main__$$$function_1_calledRepeatedly );
458     return NULL;
459     outline_exception_1:;
460     exception_lineno = 28;
461     goto frame_exception_exit_1;
462     outline_result_1:;
463     tmp_assign_source_1 = tmp_outline_return_value_1;
464     assert( var_l == NULL );
465     var_l = tmp_assign_source_1;
466  
467     tmp_return_value = PyTuple_New( 2 );
468     tmp_tuple_element_1 = var_l;
469  
470     CHECK_OBJECT( tmp_tuple_element_1 );
471     Py_INCREF( tmp_tuple_element_1 );
472     PyTuple_SET_ITEM( tmp_return_value, 0, tmp_tuple_element_1 );
473     tmp_tuple_element_1 = GET_STRING_DICT_VALUE( moduledict___main__, (Nuitka_StringObject *)const_str_plain_x );
474  
475     if (unlikely( tmp_tuple_element_1 == NULL ))
476     {
477         tmp_tuple_element_1 = GET_STRING_DICT_VALUE( dict_builtin, (Nuitka_StringObject *)const_str_plain_x );
478     }
479  
480     if ( tmp_tuple_element_1 == NULL )
481     {
482         Py_DECREF( tmp_return_value );
483         exception_type = PyExc_NameError;
484         Py_INCREF( exception_type );
485         exception_value = PyUnicode_FromFormat( "name '%s' is not defined", "x" );
486         exception_tb = NULL;
487         NORMALIZE_EXCEPTION( &exception_type, &exception_value, &exception_tb );
488         CHAIN_EXCEPTION( exception_value );
489  
490         exception_lineno = 36;
491         type_description_1 = "o";
492         goto frame_exception_exit_1;
493     }
494  
495     Py_INCREF( tmp_tuple_element_1 );
496     PyTuple_SET_ITEM( tmp_return_value, 1, tmp_tuple_element_1 );
497     goto frame_return_exit_1;
498  
499 #if 0
500     RESTORE_FRAME_EXCEPTION( frame_bae922a1d46f1434da7bcae5bab7c005 );
501 #endif
502  
503     // Put the previous frame back on top.
504     popFrameStack();
505  
506     goto frame_no_exception_2;
507  
508     frame_return_exit_1:;
509 #if 0
510     RESTORE_FRAME_EXCEPTION( frame_bae922a1d46f1434da7bcae5bab7c005 );
511 #endif
512  
513     // Put the previous frame back on top.
514     popFrameStack();
515  
516     goto try_return_handler_1;
517  
518     frame_exception_exit_1:;
519  
520 #if 0
521     RESTORE_FRAME_EXCEPTION( frame_bae922a1d46f1434da7bcae5bab7c005 );
522 #endif
523  
524     if ( exception_tb == NULL )
525     {
526         exception_tb = MAKE_TRACEBACK( frame_bae922a1d46f1434da7bcae5bab7c005, exception_lineno );
527     }
528     else if ( exception_tb->tb_frame != &frame_bae922a1d46f1434da7bcae5bab7c005->m_frame )
529     {
530         exception_tb = ADD_TRACEBACK( exception_tb, frame_bae922a1d46f1434da7bcae5bab7c005, exception_lineno );
531     }
532  
533     // Attachs locals to frame if any.
534     Nuitka_Frame_AttachLocals(
535         (struct Nuitka_FrameObject *)frame_bae922a1d46f1434da7bcae5bab7c005,
536         type_description_1,
537         var_l
538     );
539  
540  
541     // Release cached frame.
542     if ( frame_bae922a1d46f1434da7bcae5bab7c005 == cache_frame_bae922a1d46f1434da7bcae5bab7c005 )
543     {
544         Py_DECREF( frame_bae922a1d46f1434da7bcae5bab7c005 );
545     }
546     cache_frame_bae922a1d46f1434da7bcae5bab7c005 = NULL;
547  
548     assertFrameObject( frame_bae922a1d46f1434da7bcae5bab7c005 );
549  
550     // Put the previous frame back on top.
551     popFrameStack();
552  
553     // Return the error.
554     goto try_except_handler_1;
555  
556     frame_no_exception_2:;
557  
558     // tried codes exits in all cases
559     NUITKA_CANNOT_GET_HERE( __main__$$$function_1_calledRepeatedly );
560     return NULL;
561     // Return handler code:
562     try_return_handler_1:;
563     CHECK_OBJECT( (PyObject *)var_l );
564     Py_DECREF( var_l );
565     var_l = NULL;
566  
567     goto function_return_exit;
568     // Exception handler code:
569     try_except_handler_1:;
570     exception_keeper_type_3 = exception_type;
571     exception_keeper_value_3 = exception_value;
572     exception_keeper_tb_3 = exception_tb;
573     exception_keeper_lineno_3 = exception_lineno;
574     exception_type = NULL;
575     exception_value = NULL;
576     exception_tb = NULL;
577     exception_lineno = 0;
578  
579     Py_XDECREF( var_l );
580     var_l = NULL;
581  
582     // Re-raise.
583     exception_type = exception_keeper_type_3;
584     exception_value = exception_keeper_value_3;
585     exception_tb = exception_keeper_tb_3;
586     exception_lineno = exception_keeper_lineno_3;
587 287
588     goto function_exception_exit; 288     goto function_exception_exit;
589     // End of try: 289     // End of try:
590 290
591     // Return statement must have exited already. 291     // Return statement must have exited already.