Construct ListContraction

Performance Diagrams

Construct ListContraction 002000000020000000400000004000000060000000600000008000000080000000100000000100000000120000000120000000140000000140000000160000000160000000180000000180000000200000000200000000CPython 2.7Nuitka (master)Nuitka (develop)Nuitka (factory)21909198588.11538461538461257.0CPython 2.7120481117240.03846153846155368.22388878386823Nuitka (master)120481185391.96153846153845368.22381208619186Nuitka (develop)120481131543.8846153846154368.2238729931702Nuitka (factory)Construct ListContractionTicks Construct ListContraction 002000000020000000400000004000000060000000600000008000000080000000100000000100000000120000000120000000140000000140000000160000000160000000180000000180000000200000000200000000220000000220000000240000000240000000260000000260000000280000000280000000CPython 3.5Nuitka (master)Nuitka (develop)Nuitka (factory)28308631088.11538461538461257.0CPython 3.5107447135240.03846153846155410.32123366775966Nuitka (master)107374322391.96153846153845410.38479453900067Nuitka (develop)107339448543.8846153846154410.4152372047837Nuitka (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_digest_215837e5ff7ab43ad853150ac65f9a73; 36 static PyObject *const_str_digest_215837e5ff7ab43ad853150ac65f9a73;
n 38 static PyObject *const_str_plain_False; n
39 extern PyObject *const_int_pos_1; 37 extern PyObject *const_int_pos_1;
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;
n 49 static PyObject *const_str_plain_True; n
50 static PyObject *const_str_angle_module; 46 static PyObject *const_str_angle_module;
51 static PyObject *const_str_plain_None; 47 static PyObject *const_str_plain_None;
n 52 static PyObject *const_int_pos_7; n
53 static PyObject *const_str_plain_x; 48 static PyObject *const_str_plain_x;
n 54 static PyObject *const_str_angle_listcomp; n
55 static PyObject *const_str_plain_l; 49 static PyObject *const_str_plain_l;
56 extern PyObject *const_tuple_empty; 50 extern PyObject *const_tuple_empty;
57 static PyObject *const_str_digest_5ed1392909ad16e6227b8230f4582352; 51 static PyObject *const_str_digest_5ed1392909ad16e6227b8230f4582352;
58 static PyObject *const_str_plain_repeat; 52 static PyObject *const_str_plain_repeat;
59 static PyObject *const_tuple_none_int_pos_50000_tuple; 53 static PyObject *const_tuple_none_int_pos_50000_tuple;
60 extern PyObject *const_str_plain___main__; 54 extern PyObject *const_str_plain___main__;
61 extern PyObject *const_str_plain___doc__; 55 extern PyObject *const_str_plain___doc__;
n 62 static PyObject *const_tuple_str_plain_x_tuple; n 56 extern PyObject *const_str_plain___cached__;
63 static PyObject *module_filename_obj; 57 static PyObject *module_filename_obj;
64 58
65 static bool constants_created = false; 59 static bool constants_created = false;
66 60
67 static void createModuleConstants( void ) 61 static void createModuleConstants( void )
68 { 62 {
69     const_str_plain_itertools = UNSTREAM_STRING( &constant_bin[ 0 ], 9, 1 ); 63     const_str_plain_itertools = UNSTREAM_STRING( &constant_bin[ 0 ], 9, 1 );
70     const_tuple_str_plain_l_tuple = PyTuple_New( 1 ); 64     const_tuple_str_plain_l_tuple = PyTuple_New( 1 );
71     const_str_plain_l = UNSTREAM_STRING( &constant_bin[ 7 ], 1, 1 ); 65     const_str_plain_l = UNSTREAM_STRING( &constant_bin[ 7 ], 1, 1 );
72     PyTuple_SET_ITEM( const_tuple_str_plain_l_tuple, 0, const_str_plain_l ); Py_INCREF( const_str_plain_l ); 66     PyTuple_SET_ITEM( const_tuple_str_plain_l_tuple, 0, const_str_plain_l ); Py_INCREF( const_str_plain_l );
n 73     const_int_pos_7 = PyLong_FromUnsignedLong( 7ul ); n
74     const_xrange_0_7 = BUILTIN_XRANGE3( const_int_0, const_int_pos_7, const_int_pos_1 );
75     const_str_digest_215837e5ff7ab43ad853150ac65f9a73 = UNSTREAM_STRING( &constant_bin[ 9 ], 73, 0 ); 67     const_str_digest_215837e5ff7ab43ad853150ac65f9a73 = UNSTREAM_STRING( &constant_bin[ 9 ], 73, 0 );
n 76     const_str_plain_False = UNSTREAM_STRING( &constant_bin[ 82 ], 5, 1 ); n
77     const_int_pos_50000 = PyLong_FromUnsignedLong( 50000ul ); 68     const_int_pos_50000 = PyLong_FromUnsignedLong( 50000ul );
78     const_tuple_str_digest_5ed1392909ad16e6227b8230f4582352_tuple = PyTuple_New( 1 ); 69     const_tuple_str_digest_5ed1392909ad16e6227b8230f4582352_tuple = PyTuple_New( 1 );
n 79     const_str_digest_5ed1392909ad16e6227b8230f4582352 = UNSTREAM_STRING( &constant_bin[ 87 ], 3, 0 ); n 70     const_str_digest_5ed1392909ad16e6227b8230f4582352 = UNSTREAM_STRING( &constant_bin[ 82 ], 3, 0 );
80     PyTuple_SET_ITEM( const_tuple_str_digest_5ed1392909ad16e6227b8230f4582352_tuple, 0, const_str_digest_5ed1392909ad16e6227b8230f4582352 ); Py_INCREF( const_str_digest_5ed1392909ad16e6227b8230f4582352 ); 71     PyTuple_SET_ITEM( const_tuple_str_digest_5ed1392909ad16e6227b8230f4582352_tuple, 0, const_str_digest_5ed1392909ad16e6227b8230f4582352 ); Py_INCREF( const_str_digest_5ed1392909ad16e6227b8230f4582352 );
81     const_int_pos_1000 = PyLong_FromUnsignedLong( 1000ul ); 72     const_int_pos_1000 = PyLong_FromUnsignedLong( 1000ul );
n 82     const_str_plain_module_value1 = UNSTREAM_STRING( &constant_bin[ 90 ], 13, 1 ); n 73     const_str_plain_module_value1 = UNSTREAM_STRING( &constant_bin[ 85 ], 13, 1 );
83     const_str_plain_calledRepeatedly = UNSTREAM_STRING( &constant_bin[ 103 ], 16, 1 ); 74     const_str_plain_calledRepeatedly = UNSTREAM_STRING( &constant_bin[ 98 ], 16, 1 );
84     const_str_plain_True = UNSTREAM_STRING( &constant_bin[ 119 ], 4, 1 );
85     const_str_angle_module = UNSTREAM_STRING( &constant_bin[ 123 ], 8, 0 ); 75     const_str_angle_module = UNSTREAM_STRING( &constant_bin[ 114 ], 8, 0 );
86     const_str_plain_None = UNSTREAM_STRING( &constant_bin[ 131 ], 4, 1 ); 76     const_str_plain_None = UNSTREAM_STRING( &constant_bin[ 122 ], 4, 1 );
87     const_str_plain_x = UNSTREAM_STRING( &constant_bin[ 34 ], 1, 1 ); 77     const_str_plain_x = UNSTREAM_STRING( &constant_bin[ 34 ], 1, 1 );
n 88     const_str_angle_listcomp = UNSTREAM_STRING( &constant_bin[ 135 ], 10, 0 ); n
89     const_str_plain_repeat = UNSTREAM_STRING( &constant_bin[ 145 ], 6, 1 ); 78     const_str_plain_repeat = UNSTREAM_STRING( &constant_bin[ 126 ], 6, 1 );
90     const_tuple_none_int_pos_50000_tuple = PyTuple_New( 2 ); 79     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 ); 80     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 ); 81     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 82
96     constants_created = true; 83     constants_created = true;
97 } 84 }
98 85
99 #ifndef __NUITKA_NO_ASSERT__ 86 #ifndef __NUITKA_NO_ASSERT__
105 92
106 } 93 }
107 #endif 94 #endif
108 95
109 // The module code objects. 96 // The module code objects.
n 110 static PyCodeObject *codeobj_3070b7c2a46f0de4e8ef1a4568fc860f; n
111 static PyCodeObject *codeobj_417ea03adbf1b913104cc3fc14f36572; 97 static PyCodeObject *codeobj_417ea03adbf1b913104cc3fc14f36572;
112 static PyCodeObject *codeobj_3a9c321fa7da3de1e8cf2da3a12fdf10; 98 static PyCodeObject *codeobj_3a9c321fa7da3de1e8cf2da3a12fdf10;
113 /* For use in "MainProgram.c". */ 99 /* For use in "MainProgram.c". */
114 PyCodeObject *codeobj_main = NULL; 100 PyCodeObject *codeobj_main = NULL;
115 101
116 static void createModuleCodeObjects(void) 102 static void createModuleCodeObjects(void)
117 { 103 {
118     module_filename_obj = const_str_digest_215837e5ff7ab43ad853150ac65f9a73; 104     module_filename_obj = const_str_digest_215837e5ff7ab43ad853150ac65f9a73;
n 119     codeobj_3070b7c2a46f0de4e8ef1a4568fc860f = 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
120     codeobj_417ea03adbf1b913104cc3fc14f36572 = MAKE_CODEOBJ( module_filename_obj, const_str_angle_module, 1, const_tuple_empty, 0, 0, CO_NOFREE ); 105     codeobj_417ea03adbf1b913104cc3fc14f36572 = MAKE_CODEOBJ( module_filename_obj, const_str_angle_module, 1, const_tuple_empty, 0, 0, CO_NOFREE );
121     codeobj_main = codeobj_417ea03adbf1b913104cc3fc14f36572; 106     codeobj_main = codeobj_417ea03adbf1b913104cc3fc14f36572;
122     codeobj_3a9c321fa7da3de1e8cf2da3a12fdf10 = MAKE_CODEOBJ( module_filename_obj, const_str_plain_calledRepeatedly, 22, const_tuple_str_plain_l_tuple, 0, 0, CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE ); 107     codeobj_3a9c321fa7da3de1e8cf2da3a12fdf10 = 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 } 108 }
124 109
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_3a9c321fa7da3de1e8cf2da3a12fdf10; 123     struct Nuitka_FrameObject *frame_3a9c321fa7da3de1e8cf2da3a12fdf10;
144     NUITKA_MAY_BE_UNUSED char const *type_description_1 = NULL; 124     NUITKA_MAY_BE_UNUSED char const *type_description_1 = NULL;
145     NUITKA_MAY_BE_UNUSED PyObject *tmp_unused; 125     NUITKA_MAY_BE_UNUSED PyObject *tmp_unused;
146     PyObject *exception_type = NULL; 126     PyObject *exception_type = NULL;
147     PyObject *exception_value = NULL; 127     PyObject *exception_value = NULL;
148     PyTracebackObject *exception_tb = NULL; 128     PyTracebackObject *exception_tb = NULL;
149     NUITKA_MAY_BE_UNUSED int exception_lineno = 0; 129     NUITKA_MAY_BE_UNUSED int exception_lineno = 0;
n 150     struct Nuitka_FrameObject *frame_3070b7c2a46f0de4e8ef1a4568fc860f_2; n 130     PyObject *tmp_return_value = NULL;
151     NUITKA_MAY_BE_UNUSED char const *type_description_2 = NULL; 131     static struct Nuitka_FrameObject *cache_frame_3a9c321fa7da3de1e8cf2da3a12fdf10 = NULL;
152     PyObject *exception_keeper_type_1; 132     PyObject *exception_keeper_type_1;
153     PyObject *exception_keeper_value_1; 133     PyObject *exception_keeper_value_1;
154     PyTracebackObject *exception_keeper_tb_1; 134     PyTracebackObject *exception_keeper_tb_1;
155     NUITKA_MAY_BE_UNUSED int exception_keeper_lineno_1; 135     NUITKA_MAY_BE_UNUSED int exception_keeper_lineno_1;
n 156     int tmp_res; n
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     static struct Nuitka_FrameObject *cache_frame_3070b7c2a46f0de4e8ef1a4568fc860f_2 = NULL;
162     PyObject *exception_keeper_type_3;
163     PyObject *exception_keeper_value_3;
164     PyTracebackObject *exception_keeper_tb_3;
165     NUITKA_MAY_BE_UNUSED int exception_keeper_lineno_3;
166     PyObject *tmp_return_value = NULL;
167     static struct Nuitka_FrameObject *cache_frame_3a9c321fa7da3de1e8cf2da3a12fdf10 = NULL;
168     PyObject *exception_keeper_type_4;
169     PyObject *exception_keeper_value_4;
170     PyTracebackObject *exception_keeper_tb_4;
171     NUITKA_MAY_BE_UNUSED int exception_keeper_lineno_4;
172 136
173     // Actual function code. 137     // Actual function code.
174     { 138     {
175     // Tried code: 139     // Tried code:
176     MAKE_OR_REUSE_FRAME( cache_frame_3a9c321fa7da3de1e8cf2da3a12fdf10, codeobj_3a9c321fa7da3de1e8cf2da3a12fdf10, module___main__, sizeof(void *) ); 140     MAKE_OR_REUSE_FRAME( cache_frame_3a9c321fa7da3de1e8cf2da3a12fdf10, codeobj_3a9c321fa7da3de1e8cf2da3a12fdf10, module___main__, sizeof(void *) );
200         exception_tb = NULL; 164         exception_tb = NULL;
201         NORMALIZE_EXCEPTION( &exception_type, &exception_value, &exception_tb ); 165         NORMALIZE_EXCEPTION( &exception_type, &exception_value, &exception_tb );
202         CHAIN_EXCEPTION( exception_value ); 166         CHAIN_EXCEPTION( exception_value );
203 167
204         exception_lineno = 24; 168         exception_lineno = 24;
n 205         type_description_1 = "o"; n 169         type_description_1 = "N";
206         goto frame_exception_exit_1; 170         goto frame_exception_exit_1;
207     } 171     }
208 172
209     } 173     }
210     { 174     {
n 211     PyObject *tmp_assign_source_1; n
212     PyObject *tmp_outline_return_value_1;
213     {
214     PyObject *tmp_assign_source_2;
215     PyObject *tmp_iter_arg_1;
216     tmp_iter_arg_1 = const_xrange_0_7;
217     tmp_assign_source_2 = MAKE_ITERATOR( tmp_iter_arg_1 );
218     assert( !(tmp_assign_source_2 == NULL) );
219     assert( tmp_listcomp_1__$0 == NULL );
220     tmp_listcomp_1__$0 = tmp_assign_source_2;
221  
222     }
223     {
224     PyObject *tmp_assign_source_3;
225     tmp_assign_source_3 = PyList_New( 0 );
226     assert( tmp_listcomp_1__contraction == NULL );
227     tmp_listcomp_1__contraction = tmp_assign_source_3;
228  
229     }
230     {
231     // Tried code:
232     MAKE_OR_REUSE_FRAME( cache_frame_3070b7c2a46f0de4e8ef1a4568fc860f_2, codeobj_3070b7c2a46f0de4e8ef1a4568fc860f, module___main__, sizeof(void *) );
233     frame_3070b7c2a46f0de4e8ef1a4568fc860f_2 = cache_frame_3070b7c2a46f0de4e8ef1a4568fc860f_2;
234  
235     // Push the new frame as the currently active one.
236     pushFrameStack( frame_3070b7c2a46f0de4e8ef1a4568fc860f_2 );
237  
238     // Mark the frame object as in use, ref count 1 will be up for reuse.
239     assert( Py_REFCNT( frame_3070b7c2a46f0de4e8ef1a4568fc860f_2 ) == 2 ); // Frame stack
240  
241     // Framed code:
242     {
243     // Tried code:
244     {
245     loop_start_1:;
246     {
247     // Tried code:
248     {
249     PyObject *tmp_assign_source_4;
250     PyObject *tmp_value_name_1; 175     PyObject *tmp_tuple_element_1;
251     tmp_value_name_1 = tmp_listcomp_1__$0; 176     tmp_tuple_element_1 = const_int_pos_1;
177     tmp_return_value = PyTuple_New( 2 );
178     Py_INCREF( tmp_tuple_element_1 );
179     PyTuple_SET_ITEM( tmp_return_value, 0, tmp_tuple_element_1 );
180     tmp_tuple_element_1 = GET_STRING_DICT_VALUE( moduledict___main__, (Nuitka_StringObject *)const_str_plain_x );
252 181
n 253     CHECK_OBJECT( tmp_value_name_1 ); n 182     if (unlikely( tmp_tuple_element_1 == NULL ))
254     tmp_assign_source_4 = ITERATOR_NEXT( tmp_value_name_1 ); 183     {
255     if ( tmp_assign_source_4 == NULL ) 184         tmp_tuple_element_1 = GET_STRING_DICT_VALUE( dict_builtin, (Nuitka_StringObject *)const_str_plain_x );
256     { 185     }
257         if ( !ERROR_OCCURRED() ) 186  
258         { 187     if ( tmp_tuple_element_1 == NULL )
188     {
189         Py_DECREF( tmp_return_value );
259             exception_type = PyExc_StopIteration; 190         exception_type = PyExc_NameError;
260             Py_INCREF( exception_type ); 191         Py_INCREF( exception_type );
261             exception_value = NULL; 192         exception_value = PyUnicode_FromFormat( "name '%s' is not defined", "x" );
262             exception_tb = NULL; 193         exception_tb = NULL;
263         }
264         else
265         {
266             FETCH_ERROR_OCCURRED( &exception_type, &exception_value, &exception_tb ); 194         NORMALIZE_EXCEPTION( &exception_type, &exception_value, &exception_tb );
267         } 195         CHAIN_EXCEPTION( exception_value );
268 196
n 269   n 197         exception_lineno = 36;
270         type_description_2 = "o"; 198         type_description_1 = "N";
271         exception_lineno = 28; 199         goto frame_exception_exit_1;
200     }
201  
202     Py_INCREF( tmp_tuple_element_1 );
203     PyTuple_SET_ITEM( tmp_return_value, 1, tmp_tuple_element_1 );
204     goto frame_return_exit_1;
205     }
206  
207 #if 0
208     RESTORE_FRAME_EXCEPTION( frame_3a9c321fa7da3de1e8cf2da3a12fdf10 );
209 #endif
210  
211     // Put the previous frame back on top.
212     popFrameStack();
213  
214     goto frame_no_exception_1;
215  
216     frame_return_exit_1:;
217 #if 0
218     RESTORE_FRAME_EXCEPTION( frame_3a9c321fa7da3de1e8cf2da3a12fdf10 );
219 #endif
220  
221     // Put the previous frame back on top.
222     popFrameStack();
223  
224     goto function_return_exit;
225  
226     frame_exception_exit_1:;
227  
228 #if 0
229     RESTORE_FRAME_EXCEPTION( frame_3a9c321fa7da3de1e8cf2da3a12fdf10 );
230 #endif
231  
232     if ( exception_tb == NULL )
233     {
234         exception_tb = MAKE_TRACEBACK( frame_3a9c321fa7da3de1e8cf2da3a12fdf10, exception_lineno );
235     }
236     else if ( exception_tb->tb_frame != &frame_3a9c321fa7da3de1e8cf2da3a12fdf10->m_frame )
237     {
238         exception_tb = ADD_TRACEBACK( exception_tb, frame_3a9c321fa7da3de1e8cf2da3a12fdf10, exception_lineno );
239     }
240  
241     // Attachs locals to frame if any.
242     Nuitka_Frame_AttachLocals(
243         (struct Nuitka_FrameObject *)frame_3a9c321fa7da3de1e8cf2da3a12fdf10,
244         type_description_1,
245         NULL
246     );
247  
248  
249     // Release cached frame.
250     if ( frame_3a9c321fa7da3de1e8cf2da3a12fdf10 == cache_frame_3a9c321fa7da3de1e8cf2da3a12fdf10 )
251     {
252         Py_DECREF( frame_3a9c321fa7da3de1e8cf2da3a12fdf10 );
253     }
254     cache_frame_3a9c321fa7da3de1e8cf2da3a12fdf10 = NULL;
255  
256     assertFrameObject( frame_3a9c321fa7da3de1e8cf2da3a12fdf10 );
257  
258     // Put the previous frame back on top.
259     popFrameStack();
260  
261     // Return the error.
272         goto try_except_handler_4; 262     goto try_except_handler_1;
273     }
274     {
275         PyObject *old = tmp_listcomp_1__iter_value_0;
276         tmp_listcomp_1__iter_value_0 = tmp_assign_source_4;
277         Py_XDECREF( old );
278     }
279 263
n 280     } n 264     frame_no_exception_1:;
281     goto try_end_1; 265  
266     // tried codes exits in all cases
267     NUITKA_CANNOT_GET_HERE( __main__$$$function_1_calledRepeatedly );
268     return NULL;
282     // Exception handler code: 269     // Exception handler code:
n 283     try_except_handler_4:; n 270     try_except_handler_1:;
284     exception_keeper_type_1 = exception_type; 271     exception_keeper_type_1 = exception_type;
285     exception_keeper_value_1 = exception_value; 272     exception_keeper_value_1 = exception_value;
286     exception_keeper_tb_1 = exception_tb; 273     exception_keeper_tb_1 = exception_tb;
287     exception_keeper_lineno_1 = exception_lineno; 274     exception_keeper_lineno_1 = exception_lineno;
288     exception_type = NULL; 275     exception_type = NULL;
289     exception_value = NULL; 276     exception_value = NULL;
290     exception_tb = NULL; 277     exception_tb = NULL;
291     exception_lineno = 0; 278     exception_lineno = 0;
292 279
293     { 280     {
n 294     PyObject *tmp_compare_left_1; n
295     PyObject *tmp_compare_right_1;
296     int tmp_exc_match_exception_match_1;
297     tmp_compare_left_1 = exception_keeper_type_1;
298     tmp_compare_right_1 = PyExc_StopIteration;
299     tmp_exc_match_exception_match_1 = EXCEPTION_MATCH_BOOL( tmp_compare_left_1, tmp_compare_right_1 );
300     if ( tmp_exc_match_exception_match_1 == -1 )
301     {
302         assert( ERROR_OCCURRED() );
303  
304         FETCH_ERROR_OCCURRED( &exception_type, &exception_value, &exception_tb );
305  
306         Py_DECREF( exception_keeper_type_1 );
307         Py_XDECREF( exception_keeper_value_1 );
308         Py_XDECREF( exception_keeper_tb_1 );
309  
310         exception_lineno = 28;
311         type_description_2 = "o";
312         goto try_except_handler_3;
313     }
314     if ( tmp_exc_match_exception_match_1 == 1 )
315     {
316         goto branch_yes_1;
317     }
318     else
319     {
320         goto branch_no_1;
321     }
322     branch_yes_1:;
323     {
324     Py_DECREF( exception_keeper_type_1 );
325     Py_XDECREF( exception_keeper_value_1 );
326     Py_XDECREF( exception_keeper_tb_1 );
327     goto loop_end_1;
328     }
329     goto branch_end_1;
330     branch_no_1:;
331     {
332     // Re-raise. 281     // Re-raise.
333     exception_type = exception_keeper_type_1; 282     exception_type = exception_keeper_type_1;
334     exception_value = exception_keeper_value_1; 283     exception_value = exception_keeper_value_1;
335     exception_tb = exception_keeper_tb_1; 284     exception_tb = exception_keeper_tb_1;
336     exception_lineno = exception_keeper_lineno_1; 285     exception_lineno = exception_keeper_lineno_1;
t 337   t
338     goto try_except_handler_3;
339     }
340     branch_end_1:;
341     }
342     // End of try:
343     try_end_1:;
344     }
345     {
346     PyObject *tmp_assign_source_5;
347     tmp_assign_source_5 = tmp_listcomp_1__iter_value_0;
348  
349     CHECK_OBJECT( tmp_assign_source_5 );
350     {
351         PyObject *old = outline_0_var_x;
352         outline_0_var_x = tmp_assign_source_5;
353         Py_INCREF( outline_0_var_x );
354         Py_XDECREF( old );
355     }
356  
357     }
358     {
359     PyObject *tmp_append_list_1;
360     PyObject *tmp_append_value_1;
361     tmp_append_list_1 = tmp_listcomp_1__contraction;
362  
363     CHECK_OBJECT( tmp_append_list_1 );
364     tmp_append_value_1 = outline_0_var_x;
365  
366     CHECK_OBJECT( tmp_append_value_1 );
367     assert( PyList_Check( tmp_append_list_1 ) );
368     tmp_res = PyList_Append( tmp_append_list_1, tmp_append_value_1 );
369     if ( tmp_res == -1 )
370     {
371         assert( ERROR_OCCURRED() );
372  
373         FETCH_ERROR_OCCURRED( &exception_type, &exception_value, &exception_tb );
374  
375  
376         exception_lineno = 28;
377         type_description_2 = "o";
378         goto try_except_handler_3;
379     }
380     }
381     if ( CONSIDER_THREADING() == false )
382     {
383         assert( ERROR_OCCURRED() );
384  
385         FETCH_ERROR_OCCURRED( &exception_type, &exception_value, &exception_tb );
386  
387  
388         exception_lineno = 28;
389         type_description_2 = "o";
390         goto try_except_handler_3;
391     }
392     goto loop_start_1;
393     loop_end_1:;
394     }
395     {
396     tmp_outline_return_value_1 = tmp_listcomp_1__contraction;
397  
398     CHECK_OBJECT( tmp_outline_return_value_1 );
399     Py_INCREF( tmp_outline_return_value_1 );
400     goto try_return_handler_3;
401     }
402     // tried codes exits in all cases
403     NUITKA_CANNOT_GET_HERE( __main__$$$function_1_calledRepeatedly );
404     return NULL;
405     // Return handler code:
406     try_return_handler_3:;
407     {
408     CHECK_OBJECT( (PyObject *)tmp_listcomp_1__$0 );
409     Py_DECREF( tmp_listcomp_1__$0 );
410     tmp_listcomp_1__$0 = NULL;
411  
412     }
413     {
414     CHECK_OBJECT( (PyObject *)tmp_listcomp_1__contraction );
415     Py_DECREF( tmp_listcomp_1__contraction );
416     tmp_listcomp_1__contraction = NULL;
417  
418     }
419     {
420     Py_XDECREF( tmp_listcomp_1__iter_value_0 );
421     tmp_listcomp_1__iter_value_0 = NULL;
422  
423     }
424     {
425     goto frame_return_exit_2;
426     }
427     // Exception handler code:
428     try_except_handler_3:;
429     exception_keeper_type_2 = exception_type;
430     exception_keeper_value_2 = exception_value;
431     exception_keeper_tb_2 = exception_tb;
432     exception_keeper_lineno_2 = exception_lineno;
433     exception_type = NULL;
434     exception_value = NULL;
435     exception_tb = NULL;
436     exception_lineno = 0;
437  
438     {
439     CHECK_OBJECT( (PyObject *)tmp_listcomp_1__$0 );
440     Py_DECREF( tmp_listcomp_1__$0 );
441     tmp_listcomp_1__$0 = NULL;
442  
443     }
444     {
445     CHECK_OBJECT( (PyObject *)tmp_listcomp_1__contraction );
446     Py_DECREF( tmp_listcomp_1__contraction );
447     tmp_listcomp_1__contraction = NULL;
448  
449     }
450     {
451     Py_XDECREF( tmp_listcomp_1__iter_value_0 );
452     tmp_listcomp_1__iter_value_0 = NULL;
453  
454     }
455     {
456     // Re-raise.
457     exception_type = exception_keeper_type_2;
458     exception_value = exception_keeper_value_2;
459     exception_tb = exception_keeper_tb_2;
460     exception_lineno = exception_keeper_lineno_2;
461  
462     goto frame_exception_exit_2;
463     }
464     // End of try:
465     }
466  
467 #if 0
468     RESTORE_FRAME_EXCEPTION( frame_3070b7c2a46f0de4e8ef1a4568fc860f_2 );
469 #endif
470  
471     // Put the previous frame back on top.
472     popFrameStack();
473  
474     goto frame_no_exception_1;
475  
476     frame_return_exit_2:;
477 #if 0
478     RESTORE_FRAME_EXCEPTION( frame_3070b7c2a46f0de4e8ef1a4568fc860f_2 );
479 #endif
480  
481     // Put the previous frame back on top.
482     popFrameStack();
483  
484     goto try_return_handler_2;
485  
486     frame_exception_exit_2:;
487  
488 #if 0
489     RESTORE_FRAME_EXCEPTION( frame_3070b7c2a46f0de4e8ef1a4568fc860f_2 );
490 #endif
491  
492     if ( exception_tb == NULL )
493     {
494         exception_tb = MAKE_TRACEBACK( frame_3070b7c2a46f0de4e8ef1a4568fc860f_2, exception_lineno );
495     }
496     else if ( exception_tb->tb_frame != &frame_3070b7c2a46f0de4e8ef1a4568fc860f_2->m_frame )
497     {
498         exception_tb = ADD_TRACEBACK( exception_tb, frame_3070b7c2a46f0de4e8ef1a4568fc860f_2, exception_lineno );
499     }
500  
501     // Attachs locals to frame if any.
502     Nuitka_Frame_AttachLocals(
503         (struct Nuitka_FrameObject *)frame_3070b7c2a46f0de4e8ef1a4568fc860f_2,
504         type_description_2,
505         outline_0_var_x
506     );
507  
508  
509     // Release cached frame.
510     if ( frame_3070b7c2a46f0de4e8ef1a4568fc860f_2 == cache_frame_3070b7c2a46f0de4e8ef1a4568fc860f_2 )
511     {
512         Py_DECREF( frame_3070b7c2a46f0de4e8ef1a4568fc860f_2 );
513     }
514     cache_frame_3070b7c2a46f0de4e8ef1a4568fc860f_2 = NULL;
515  
516     assertFrameObject( frame_3070b7c2a46f0de4e8ef1a4568fc860f_2 );
517  
518     // Put the previous frame back on top.
519     popFrameStack();
520  
521     // Return the error.
522     goto nested_frame_exit_1;
523  
524     frame_no_exception_1:;
525  
526     goto skip_nested_handling_1;
527     nested_frame_exit_1:;
528     type_description_1 = "o";
529     goto try_except_handler_2;
530     skip_nested_handling_1:;
531     // tried codes exits in all cases
532     NUITKA_CANNOT_GET_HERE( __main__$$$function_1_calledRepeatedly );
533     return NULL;
534     // Return handler code:
535     try_return_handler_2:;
536     {
537     Py_XDECREF( outline_0_var_x );
538     outline_0_var_x = NULL;
539  
540     }
541     {
542     goto outline_result_1;
543     }
544     // Exception handler code:
545     try_except_handler_2:;
546     exception_keeper_type_3 = exception_type;
547     exception_keeper_value_3 = exception_value;
548     exception_keeper_tb_3 = exception_tb;
549     exception_keeper_lineno_3 = exception_lineno;
550     exception_type = NULL;
551     exception_value = NULL;
552     exception_tb = NULL;
553     exception_lineno = 0;
554  
555     {
556     Py_XDECREF( outline_0_var_x );
557     outline_0_var_x = NULL;
558  
559     }
560     {
561     // Re-raise.
562     exception_type = exception_keeper_type_3;
563     exception_value = exception_keeper_value_3;
564     exception_tb = exception_keeper_tb_3;
565     exception_lineno = exception_keeper_lineno_3;
566  
567     goto outline_exception_1;
568     }
569     // End of try:
570     }
571     // Return statement must have exited already.
572     NUITKA_CANNOT_GET_HERE( __main__$$$function_1_calledRepeatedly );
573     return NULL;
574     outline_exception_1:;
575     exception_lineno = 28;
576     goto frame_exception_exit_1;
577     outline_result_1:;
578     tmp_assign_source_1 = tmp_outline_return_value_1;
579     assert( var_l == NULL );
580     var_l = tmp_assign_source_1;
581  
582     }
583     {
584     PyObject *tmp_tuple_element_1;
585     tmp_tuple_element_1 = var_l;
586  
587     CHECK_OBJECT( tmp_tuple_element_1 );
588     tmp_return_value = PyTuple_New( 2 );
589     Py_INCREF( tmp_tuple_element_1 );
590     PyTuple_SET_ITEM( tmp_return_value, 0, tmp_tuple_element_1 );
591     tmp_tuple_element_1 = GET_STRING_DICT_VALUE( moduledict___main__, (Nuitka_StringObject *)const_str_plain_x );
592  
593     if (unlikely( tmp_tuple_element_1 == NULL ))
594     {
595         tmp_tuple_element_1 = GET_STRING_DICT_VALUE( dict_builtin, (Nuitka_StringObject *)const_str_plain_x );
596     }
597  
598     if ( tmp_tuple_element_1 == NULL )
599     {
600         Py_DECREF( tmp_return_value );
601         exception_type = PyExc_NameError;
602         Py_INCREF( exception_type );
603         exception_value = PyUnicode_FromFormat( "name '%s' is not defined", "x" );
604         exception_tb = NULL;
605         NORMALIZE_EXCEPTION( &exception_type, &exception_value, &exception_tb );
606         CHAIN_EXCEPTION( exception_value );
607  
608         exception_lineno = 36;
609         type_description_1 = "o";
610         goto frame_exception_exit_1;
611     }
612  
613     Py_INCREF( tmp_tuple_element_1 );
614     PyTuple_SET_ITEM( tmp_return_value, 1, tmp_tuple_element_1 );
615     goto frame_return_exit_1;
616     }
617  
618 #if 0
619     RESTORE_FRAME_EXCEPTION( frame_3a9c321fa7da3de1e8cf2da3a12fdf10 );
620 #endif
621  
622     // Put the previous frame back on top.
623     popFrameStack();
624  
625     goto frame_no_exception_2;
626  
627     frame_return_exit_1:;
628 #if 0
629     RESTORE_FRAME_EXCEPTION( frame_3a9c321fa7da3de1e8cf2da3a12fdf10 );
630 #endif
631  
632     // Put the previous frame back on top.
633     popFrameStack();
634  
635     goto try_return_handler_1;
636  
637     frame_exception_exit_1:;
638  
639 #if 0
640     RESTORE_FRAME_EXCEPTION( frame_3a9c321fa7da3de1e8cf2da3a12fdf10 );
641 #endif
642  
643     if ( exception_tb == NULL )
644     {
645         exception_tb = MAKE_TRACEBACK( frame_3a9c321fa7da3de1e8cf2da3a12fdf10, exception_lineno );
646     }
647     else if ( exception_tb->tb_frame != &frame_3a9c321fa7da3de1e8cf2da3a12fdf10->m_frame )
648     {
649         exception_tb = ADD_TRACEBACK( exception_tb, frame_3a9c321fa7da3de1e8cf2da3a12fdf10, exception_lineno );
650     }
651  
652     // Attachs locals to frame if any.
653     Nuitka_Frame_AttachLocals(
654         (struct Nuitka_FrameObject *)frame_3a9c321fa7da3de1e8cf2da3a12fdf10,
655         type_description_1,
656         var_l
657     );
658  
659  
660     // Release cached frame.
661     if ( frame_3a9c321fa7da3de1e8cf2da3a12fdf10 == cache_frame_3a9c321fa7da3de1e8cf2da3a12fdf10 )
662     {
663         Py_DECREF( frame_3a9c321fa7da3de1e8cf2da3a12fdf10 );
664     }
665     cache_frame_3a9c321fa7da3de1e8cf2da3a12fdf10 = NULL;
666  
667     assertFrameObject( frame_3a9c321fa7da3de1e8cf2da3a12fdf10 );
668  
669     // Put the previous frame back on top.
670     popFrameStack();
671  
672     // Return the error.
673     goto try_except_handler_1;
674  
675     frame_no_exception_2:;
676  
677     // tried codes exits in all cases
678     NUITKA_CANNOT_GET_HERE( __main__$$$function_1_calledRepeatedly );
679     return NULL;
680     // Return handler code:
681     try_return_handler_1:;
682     {
683     CHECK_OBJECT( (PyObject *)var_l );
684     Py_DECREF( var_l );
685     var_l = NULL;
686  
687     }
688     {
689     goto function_return_exit;
690     }
691     // Exception handler code:
692     try_except_handler_1:;
693     exception_keeper_type_4 = exception_type;
694     exception_keeper_value_4 = exception_value;
695     exception_keeper_tb_4 = exception_tb;
696     exception_keeper_lineno_4 = exception_lineno;
697     exception_type = NULL;
698     exception_value = NULL;
699     exception_tb = NULL;
700     exception_lineno = 0;
701  
702     {
703     Py_XDECREF( var_l );
704     var_l = NULL;
705  
706     }
707     {
708     // Re-raise.
709     exception_type = exception_keeper_type_4;
710     exception_value = exception_keeper_value_4;
711     exception_tb = exception_keeper_tb_4;
712     exception_lineno = exception_keeper_lineno_4;
713 286
714     goto function_exception_exit; 287     goto function_exception_exit;
715     } 288     }
716     // End of try: 289     // End of try:
717     } 290     }