Construct FunctionCreationClosure

Performance Diagrams

Construct FunctionCreationClosure 001000000010000000200000002000000030000000300000004000000040000000CPython 2.7Nuitka (master)Nuitka (develop)Nuitka (factory)4496650088.95192307692307257.0CPython 2.712602392242.31730769230768434.8583833777111Nuitka (master)12602980395.6826923076923434.8551519977693Nuitka (develop)12603632549.0480769230769434.8515689030039Nuitka (factory)Construct FunctionCreationClosureTicks Construct FunctionCreationClosure 0010000000100000002000000020000000300000003000000040000000400000005000000050000000CPython 3.5Nuitka (master)Nuitka (develop)Nuitka (factory)5639230188.95192307692307257.0CPython 3.515848137242.31730769230768434.66763375676464Nuitka (master)15856593395.6826923076923434.63057891673765Nuitka (develop)15861221549.0480769230769434.6102986660701Nuitka (factory)Construct FunctionCreationClosureTicks

Source Code with Construct

module_var = None

def calledRepeatedly():
    # We measure making a local function that will remain unused.
    closure_var = module_var

# construct_begin
    def empty():
        return closure_var

# construct_alternative



    return empty, closure_var


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

print("OK.")

Source Code without Construct

module_var = None

def calledRepeatedly():
    # We measure making a local function that will remain unused.
    closure_var = module_var

# construct_begin



# construct_alternative
    empty = 1
# construct_end

    return empty, closure_var


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

print("OK.")

Context Diff of Source Code


Construct
Baseline
23 def calledRepeatedly(): 23 def calledRepeatedly():
24     # We measure making a local function that will remain unused. 24     # We measure making a local function that will remain unused.
25     closure_var = module_var 25     closure_var = module_var
26 26
27 # construct_begin 27 # construct_begin
n 28     def empty(): n 28  
29         return closure_var 29  
30 30
31 # construct_alternative 31 # construct_alternative
t 32   t 32     empty = 1
33   33 # construct_end
34 34
35     return empty, closure_var 35     return empty, closure_var
36 36
37 37
38 import itertools 38 import itertools

Context Diff of Generated Code


Construct
Baseline
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_str_plain___package__; 35 static PyObject *const_str_plain___package__;
36 static PyObject *const_str_plain___spec__; 36 static PyObject *const_str_plain___spec__;
n 37 static PyObject *const_tuple_str_plain_closure_var_tuple; n
38 static PyObject *const_str_plain_module_var; 37 static PyObject *const_str_plain_module_var;
39 static PyObject *const_str_digest_9c08bbe478cc6c6d6ab957b7e0a057c1; 38 static PyObject *const_str_digest_9c08bbe478cc6c6d6ab957b7e0a057c1;
n n 39 extern PyObject *const_int_pos_1;
40 extern PyObject *const_dict_empty; 40 extern PyObject *const_dict_empty;
41 extern PyObject *const_str_plain___file__; 41 extern PyObject *const_str_plain___file__;
42 static PyObject *const_str_plain_closure_var; 42 static PyObject *const_str_plain_closure_var;
43 extern PyObject *const_int_0; 43 extern PyObject *const_int_0;
44 static PyObject *const_tuple_str_plain_closure_var_str_plain_empty_tuple; 44 static PyObject *const_tuple_str_plain_closure_var_str_plain_empty_tuple;
45 static PyObject *const_str_plain_empty; 45 static PyObject *const_str_plain_empty;
46 extern PyObject *const_str_plain_print; 46 extern PyObject *const_str_plain_print;
n 47 static PyObject *const_str_digest_30e4724e0d508bc0c811d26a46d4b6cd; n
48 static PyObject *const_int_pos_50000; 47 static PyObject *const_int_pos_50000;
49 static PyObject *const_tuple_str_digest_5ed1392909ad16e6227b8230f4582352_tuple; 48 static PyObject *const_tuple_str_digest_5ed1392909ad16e6227b8230f4582352_tuple;
50 static PyObject *const_str_plain_calledRepeatedly; 49 static PyObject *const_str_plain_calledRepeatedly;
51 static PyObject *const_str_angle_module; 50 static PyObject *const_str_angle_module;
52 static PyObject *const_str_plain_x; 51 static PyObject *const_str_plain_x;
65 static void createModuleConstants( void ) 64 static void createModuleConstants( void )
66 { 65 {
67     const_str_plain_itertools = UNSTREAM_STRING( &constant_bin[ 0 ], 9, 1 ); 66     const_str_plain_itertools = UNSTREAM_STRING( &constant_bin[ 0 ], 9, 1 );
68     const_str_plain___package__ = UNSTREAM_STRING( &constant_bin[ 9 ], 11, 1 ); 67     const_str_plain___package__ = UNSTREAM_STRING( &constant_bin[ 9 ], 11, 1 );
69     const_str_plain___spec__ = UNSTREAM_STRING( &constant_bin[ 20 ], 8, 1 ); 68     const_str_plain___spec__ = UNSTREAM_STRING( &constant_bin[ 20 ], 8, 1 );
n 70     const_tuple_str_plain_closure_var_tuple = PyTuple_New( 1 ); n
71     const_str_plain_closure_var = UNSTREAM_STRING( &constant_bin[ 28 ], 11, 1 );
72     PyTuple_SET_ITEM( const_tuple_str_plain_closure_var_tuple, 0, const_str_plain_closure_var ); Py_INCREF( const_str_plain_closure_var );
73     const_str_plain_module_var = UNSTREAM_STRING( &constant_bin[ 39 ], 10, 1 ); 69     const_str_plain_module_var = UNSTREAM_STRING( &constant_bin[ 28 ], 10, 1 );
74     const_str_digest_9c08bbe478cc6c6d6ab957b7e0a057c1 = UNSTREAM_STRING( &constant_bin[ 49 ], 81, 0 ); 70     const_str_digest_9c08bbe478cc6c6d6ab957b7e0a057c1 = UNSTREAM_STRING( &constant_bin[ 38 ], 81, 0 );
71     const_str_plain_closure_var = UNSTREAM_STRING( &constant_bin[ 119 ], 11, 1 );
75     const_tuple_str_plain_closure_var_str_plain_empty_tuple = PyTuple_New( 2 ); 72     const_tuple_str_plain_closure_var_str_plain_empty_tuple = PyTuple_New( 2 );
76     PyTuple_SET_ITEM( const_tuple_str_plain_closure_var_str_plain_empty_tuple, 0, const_str_plain_closure_var ); Py_INCREF( const_str_plain_closure_var ); 73     PyTuple_SET_ITEM( const_tuple_str_plain_closure_var_str_plain_empty_tuple, 0, const_str_plain_closure_var ); Py_INCREF( const_str_plain_closure_var );
77     const_str_plain_empty = UNSTREAM_STRING( &constant_bin[ 130 ], 5, 1 ); 74     const_str_plain_empty = UNSTREAM_STRING( &constant_bin[ 130 ], 5, 1 );
78     PyTuple_SET_ITEM( const_tuple_str_plain_closure_var_str_plain_empty_tuple, 1, const_str_plain_empty ); Py_INCREF( const_str_plain_empty ); 75     PyTuple_SET_ITEM( const_tuple_str_plain_closure_var_str_plain_empty_tuple, 1, const_str_plain_empty ); Py_INCREF( const_str_plain_empty );
n 79     const_str_digest_30e4724e0d508bc0c811d26a46d4b6cd = UNSTREAM_STRING( &constant_bin[ 135 ], 31, 0 ); n
80     const_int_pos_50000 = PyLong_FromUnsignedLong( 50000ul ); 76     const_int_pos_50000 = PyLong_FromUnsignedLong( 50000ul );
81     const_tuple_str_digest_5ed1392909ad16e6227b8230f4582352_tuple = PyTuple_New( 1 ); 77     const_tuple_str_digest_5ed1392909ad16e6227b8230f4582352_tuple = PyTuple_New( 1 );
n 82     const_str_digest_5ed1392909ad16e6227b8230f4582352 = UNSTREAM_STRING( &constant_bin[ 166 ], 3, 0 ); n 78     const_str_digest_5ed1392909ad16e6227b8230f4582352 = UNSTREAM_STRING( &constant_bin[ 135 ], 3, 0 );
83     PyTuple_SET_ITEM( const_tuple_str_digest_5ed1392909ad16e6227b8230f4582352_tuple, 0, const_str_digest_5ed1392909ad16e6227b8230f4582352 ); Py_INCREF( const_str_digest_5ed1392909ad16e6227b8230f4582352 ); 79     PyTuple_SET_ITEM( const_tuple_str_digest_5ed1392909ad16e6227b8230f4582352_tuple, 0, const_str_digest_5ed1392909ad16e6227b8230f4582352 ); Py_INCREF( const_str_digest_5ed1392909ad16e6227b8230f4582352 );
n 84     const_str_plain_calledRepeatedly = UNSTREAM_STRING( &constant_bin[ 135 ], 16, 1 ); n 80     const_str_plain_calledRepeatedly = UNSTREAM_STRING( &constant_bin[ 138 ], 16, 1 );
85     const_str_angle_module = UNSTREAM_STRING( &constant_bin[ 169 ], 8, 0 ); 81     const_str_angle_module = UNSTREAM_STRING( &constant_bin[ 154 ], 8, 0 );
86     const_str_plain_x = UNSTREAM_STRING( &constant_bin[ 74 ], 1, 1 ); 82     const_str_plain_x = UNSTREAM_STRING( &constant_bin[ 63 ], 1, 1 );
87     const_str_plain_repeat = UNSTREAM_STRING( &constant_bin[ 177 ], 6, 1 ); 83     const_str_plain_repeat = UNSTREAM_STRING( &constant_bin[ 162 ], 6, 1 );
88     const_tuple_none_int_pos_50000_tuple = PyTuple_New( 2 ); 84     const_tuple_none_int_pos_50000_tuple = PyTuple_New( 2 );
89     PyTuple_SET_ITEM( const_tuple_none_int_pos_50000_tuple, 0, Py_None ); Py_INCREF( Py_None ); 85     PyTuple_SET_ITEM( const_tuple_none_int_pos_50000_tuple, 0, Py_None ); Py_INCREF( Py_None );
90     PyTuple_SET_ITEM( const_tuple_none_int_pos_50000_tuple, 1, const_int_pos_50000 ); Py_INCREF( const_int_pos_50000 ); 86     PyTuple_SET_ITEM( const_tuple_none_int_pos_50000_tuple, 1, const_int_pos_50000 ); Py_INCREF( const_int_pos_50000 );
91 87
92     constants_created = true; 88     constants_created = true;
103 #endif 99 #endif
104 100
105 // The module code objects. 101 // The module code objects.
106 static PyCodeObject *codeobj_d8327f617e17ca0bd59b81d89b4a8dd1; 102 static PyCodeObject *codeobj_d8327f617e17ca0bd59b81d89b4a8dd1;
107 static PyCodeObject *codeobj_c0b48432825b97f53d8517def9f9caf4; 103 static PyCodeObject *codeobj_c0b48432825b97f53d8517def9f9caf4;
n 108 static PyCodeObject *codeobj_5503bbb38ab6ccbed06c2e00a3d35703; n
109 /* For use in "MainProgram.c". */ 104 /* For use in "MainProgram.c". */
110 PyCodeObject *codeobj_main = NULL; 105 PyCodeObject *codeobj_main = NULL;
111 106
112 static void createModuleCodeObjects(void) 107 static void createModuleCodeObjects(void)
113 { 108 {
114     module_filename_obj = const_str_digest_9c08bbe478cc6c6d6ab957b7e0a057c1; 109     module_filename_obj = const_str_digest_9c08bbe478cc6c6d6ab957b7e0a057c1;
115     codeobj_d8327f617e17ca0bd59b81d89b4a8dd1 = MAKE_CODEOBJ( module_filename_obj, const_str_angle_module, 1, const_tuple_empty, 0, 0, CO_NOFREE ); 110     codeobj_d8327f617e17ca0bd59b81d89b4a8dd1 = MAKE_CODEOBJ( module_filename_obj, const_str_angle_module, 1, const_tuple_empty, 0, 0, CO_NOFREE );
116     codeobj_main = codeobj_d8327f617e17ca0bd59b81d89b4a8dd1; 111     codeobj_main = codeobj_d8327f617e17ca0bd59b81d89b4a8dd1;
117     codeobj_c0b48432825b97f53d8517def9f9caf4 = MAKE_CODEOBJ( module_filename_obj, const_str_plain_calledRepeatedly, 23, const_tuple_str_plain_closure_var_str_plain_empty_tuple, 0, 0, CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE ); 112     codeobj_c0b48432825b97f53d8517def9f9caf4 = MAKE_CODEOBJ( module_filename_obj, const_str_plain_calledRepeatedly, 23, const_tuple_str_plain_closure_var_str_plain_empty_tuple, 0, 0, CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE );
n 118     codeobj_5503bbb38ab6ccbed06c2e00a3d35703 = MAKE_CODEOBJ( module_filename_obj, const_str_plain_empty, 28, const_tuple_str_plain_closure_var_tuple, 0, 0, CO_OPTIMIZED | CO_NEWLOCALS ); n
119 } 113 }
120 114
121 // The module function declarations. 115 // The module function declarations.
122 static PyObject *MAKE_FUNCTION___main__$$$function_1_calledRepeatedly(  ); 116 static PyObject *MAKE_FUNCTION___main__$$$function_1_calledRepeatedly(  );
n 123   n
124  
125 static PyObject *MAKE_FUNCTION___main__$$$function_1_calledRepeatedly$$$function_1_empty( struct Nuitka_CellObject *closure_closure_var );
126 117
127 118
128 // The module function definitions. 119 // The module function definitions.
129 static PyObject *impl___main__$$$function_1_calledRepeatedly( struct Nuitka_FunctionObject const *self, PyObject **python_pars ) 120 static PyObject *impl___main__$$$function_1_calledRepeatedly( struct Nuitka_FunctionObject const *self, PyObject **python_pars )
130 { 121 {
132 #ifndef __NUITKA_NO_ASSERT__ 123 #ifndef __NUITKA_NO_ASSERT__
133     NUITKA_MAY_BE_UNUSED bool had_error = ERROR_OCCURRED(); 124     NUITKA_MAY_BE_UNUSED bool had_error = ERROR_OCCURRED();
134 #endif 125 #endif
135 126
136     // Local variable declarations. 127     // Local variable declarations.
n 137     struct Nuitka_CellObject *var_closure_var = PyCell_EMPTY(); n
138     PyObject *var_empty = NULL; 128     PyObject *var_closure_var = NULL;
139     PyObject *exception_type = NULL; 129     PyObject *exception_type = NULL;
140     PyObject *exception_value = NULL; 130     PyObject *exception_value = NULL;
141     PyTracebackObject *exception_tb = NULL; 131     PyTracebackObject *exception_tb = NULL;
142     NUITKA_MAY_BE_UNUSED int exception_lineno = 0; 132     NUITKA_MAY_BE_UNUSED int exception_lineno = 0;
143     PyObject *exception_keeper_type_1; 133     PyObject *exception_keeper_type_1;
144     PyObject *exception_keeper_value_1; 134     PyObject *exception_keeper_value_1;
145     PyTracebackObject *exception_keeper_tb_1; 135     PyTracebackObject *exception_keeper_tb_1;
146     NUITKA_MAY_BE_UNUSED int exception_keeper_lineno_1; 136     NUITKA_MAY_BE_UNUSED int exception_keeper_lineno_1;
147     PyObject *tmp_assign_source_1; 137     PyObject *tmp_assign_source_1;
n 148     PyObject *tmp_assign_source_2; n
149     PyObject *tmp_return_value; 138     PyObject *tmp_return_value;
150     PyObject *tmp_tuple_element_1; 139     PyObject *tmp_tuple_element_1;
151     static struct Nuitka_FrameObject *cache_frame_c0b48432825b97f53d8517def9f9caf4 = NULL; 140     static struct Nuitka_FrameObject *cache_frame_c0b48432825b97f53d8517def9f9caf4 = NULL;
152 141
153     struct Nuitka_FrameObject *frame_c0b48432825b97f53d8517def9f9caf4; 142     struct Nuitka_FrameObject *frame_c0b48432825b97f53d8517def9f9caf4;
183         exception_tb = NULL; 172         exception_tb = NULL;
184         NORMALIZE_EXCEPTION( &exception_type, &exception_value, &exception_tb ); 173         NORMALIZE_EXCEPTION( &exception_type, &exception_value, &exception_tb );
185         CHAIN_EXCEPTION( exception_value ); 174         CHAIN_EXCEPTION( exception_value );
186 175
187         exception_lineno = 25; 176         exception_lineno = 25;
n 188         type_description_1 = "co"; n 177         type_description_1 = "oN";
189         goto frame_exception_exit_1; 178         goto frame_exception_exit_1;
190     } 179     }
191 180
n 192     { n 181     assert( var_closure_var == NULL );
193         PyObject *old = PyCell_GET( var_closure_var );
194         PyCell_SET( var_closure_var, tmp_assign_source_1 );
195         Py_INCREF( tmp_assign_source_1 ); 182     Py_INCREF( tmp_assign_source_1 );
196         Py_XDECREF( old ); 183     var_closure_var = tmp_assign_source_1;
197     }
198 184
199 185
200 #if 0 186 #if 0
201     RESTORE_FRAME_EXCEPTION( frame_c0b48432825b97f53d8517def9f9caf4 ); 187     RESTORE_FRAME_EXCEPTION( frame_c0b48432825b97f53d8517def9f9caf4 );
202 #endif 188 #endif
224     // Attachs locals to frame if any. 210     // Attachs locals to frame if any.
225     Nuitka_Frame_AttachLocals( 211     Nuitka_Frame_AttachLocals(
226         (struct Nuitka_FrameObject *)frame_c0b48432825b97f53d8517def9f9caf4, 212         (struct Nuitka_FrameObject *)frame_c0b48432825b97f53d8517def9f9caf4,
227         type_description_1, 213         type_description_1,
228         var_closure_var, 214         var_closure_var,
n 229         var_empty n 215         NULL
230     ); 216     );
231 217
232 218
233     // Release cached frame. 219     // Release cached frame.
234     if ( frame_c0b48432825b97f53d8517def9f9caf4 == cache_frame_c0b48432825b97f53d8517def9f9caf4 ) 220     if ( frame_c0b48432825b97f53d8517def9f9caf4 == cache_frame_c0b48432825b97f53d8517def9f9caf4 )
245     // Return the error. 231     // Return the error.
246     goto try_except_handler_1; 232     goto try_except_handler_1;
247 233
248     frame_no_exception_1:; 234     frame_no_exception_1:;
249 235
n 250     tmp_assign_source_2 = MAKE_FUNCTION___main__$$$function_1_calledRepeatedly$$$function_1_empty( var_closure_var ); n
251     assert( var_empty == NULL );
252     var_empty = tmp_assign_source_2;
253  
254     tmp_return_value = PyTuple_New( 2 ); 236     tmp_return_value = PyTuple_New( 2 );
n 255     tmp_tuple_element_1 = var_empty; n 237     tmp_tuple_element_1 = const_int_pos_1;
256  
257     CHECK_OBJECT( tmp_tuple_element_1 );
258     Py_INCREF( tmp_tuple_element_1 ); 238     Py_INCREF( tmp_tuple_element_1 );
259     PyTuple_SET_ITEM( tmp_return_value, 0, tmp_tuple_element_1 ); 239     PyTuple_SET_ITEM( tmp_return_value, 0, tmp_tuple_element_1 );
n 260     if ( var_closure_var == NULL ) n
261     {
262         tmp_tuple_element_1 = NULL;
263     }
264     else
265     {
266         tmp_tuple_element_1 = PyCell_GET( var_closure_var ); 240     tmp_tuple_element_1 = var_closure_var;
267     }
268 241
n 269     if ( tmp_tuple_element_1 == NULL ) n 242     CHECK_OBJECT( tmp_tuple_element_1 );
270     {
271         Py_DECREF( tmp_return_value );
272         exception_type = PyExc_UnboundLocalError;
273         Py_INCREF( exception_type );
274         exception_value = PyUnicode_FromFormat( "local variable '%s' referenced before assignment", "closure_var" );
275         exception_tb = NULL;
276         NORMALIZE_EXCEPTION( &exception_type, &exception_value, &exception_tb );
277         CHAIN_EXCEPTION( exception_value );
278  
279  
280  
281         goto try_except_handler_1;
282     }
283  
284     Py_INCREF( tmp_tuple_element_1 ); 243     Py_INCREF( tmp_tuple_element_1 );
285     PyTuple_SET_ITEM( tmp_return_value, 1, tmp_tuple_element_1 ); 244     PyTuple_SET_ITEM( tmp_return_value, 1, tmp_tuple_element_1 );
286     goto try_return_handler_1; 245     goto try_return_handler_1;
287     // tried codes exits in all cases 246     // tried codes exits in all cases
288     NUITKA_CANNOT_GET_HERE( __main__$$$function_1_calledRepeatedly ); 247     NUITKA_CANNOT_GET_HERE( __main__$$$function_1_calledRepeatedly );
291     try_return_handler_1:; 250     try_return_handler_1:;
292     CHECK_OBJECT( (PyObject *)var_closure_var ); 251     CHECK_OBJECT( (PyObject *)var_closure_var );
293     Py_DECREF( var_closure_var ); 252     Py_DECREF( var_closure_var );
294     var_closure_var = NULL; 253     var_closure_var = NULL;
295 254
n 296     Py_XDECREF( var_empty ); n
297     var_empty = NULL;
298  
299     goto function_return_exit; 255     goto function_return_exit;
300     // Exception handler code: 256     // Exception handler code:
301     try_except_handler_1:; 257     try_except_handler_1:;
302     exception_keeper_type_1 = exception_type; 258     exception_keeper_type_1 = exception_type;
303     exception_keeper_value_1 = exception_value; 259     exception_keeper_value_1 = exception_value;
333     return tmp_return_value; 289     return tmp_return_value;
334 290
335 } 291 }
336 292
337 293
n 338 static PyObject *impl___main__$$$function_1_calledRepeatedly$$$function_1_empty( struct Nuitka_FunctionObject const *self, PyObject **python_pars ) n
339 {
340     // Preserve error status for checks
341 #ifndef __NUITKA_NO_ASSERT__
342     NUITKA_MAY_BE_UNUSED bool had_error = ERROR_OCCURRED();
343 #endif
344  
345     // Local variable declarations.
346     PyObject *exception_type = NULL;
347     PyObject *exception_value = NULL;
348     PyTracebackObject *exception_tb = NULL;
349     NUITKA_MAY_BE_UNUSED int exception_lineno = 0;
350     PyObject *tmp_return_value;
351     static struct Nuitka_FrameObject *cache_frame_5503bbb38ab6ccbed06c2e00a3d35703 = NULL;
352  
353     struct Nuitka_FrameObject *frame_5503bbb38ab6ccbed06c2e00a3d35703;
354  
355     NUITKA_MAY_BE_UNUSED char const *type_description_1 = NULL;
356     tmp_return_value = NULL;
357  
358     // Actual function code.
359     MAKE_OR_REUSE_FRAME( cache_frame_5503bbb38ab6ccbed06c2e00a3d35703, codeobj_5503bbb38ab6ccbed06c2e00a3d35703, module___main__, sizeof(void *) );
360     frame_5503bbb38ab6ccbed06c2e00a3d35703 = cache_frame_5503bbb38ab6ccbed06c2e00a3d35703;
361  
362     // Push the new frame as the currently active one.
363     pushFrameStack( frame_5503bbb38ab6ccbed06c2e00a3d35703 );
364  
365     // Mark the frame object as in use, ref count 1 will be up for reuse.
366     assert( Py_REFCNT( frame_5503bbb38ab6ccbed06c2e00a3d35703 ) == 2 ); // Frame stack
367  
368     // Framed code:
369     if ( self->m_closure[0] == NULL )
370     {
371         tmp_return_value = NULL;
372     }
373     else
374     {
375         tmp_return_value = PyCell_GET( self->m_closure[0] );
376     }
377  
378     if ( tmp_return_value == NULL )
379     {
380  
381         exception_type = PyExc_NameError;
382         Py_INCREF( exception_type );
383         exception_value = PyUnicode_FromFormat( "free variable '%s' referenced before assignment in enclosing scope", "closure_var" );
384         exception_tb = NULL;
385         NORMALIZE_EXCEPTION( &exception_type, &exception_value, &exception_tb );
386         CHAIN_EXCEPTION( exception_value );
387  
388         exception_lineno = 29;
389         type_description_1 = "c";
390         goto frame_exception_exit_1;
391     }
392  
393     Py_INCREF( tmp_return_value );
394     goto frame_return_exit_1;
395  
396 #if 0
397     RESTORE_FRAME_EXCEPTION( frame_5503bbb38ab6ccbed06c2e00a3d35703 );
398 #endif
399  
400     // Put the previous frame back on top.
401     popFrameStack();
402  
403     goto frame_no_exception_1;
404  
405     frame_return_exit_1:;
406 #if 0
407     RESTORE_FRAME_EXCEPTION( frame_5503bbb38ab6ccbed06c2e00a3d35703 );
408 #endif
409  
410     // Put the previous frame back on top.
411     popFrameStack();
412  
413     goto function_return_exit;
414  
415     frame_exception_exit_1:;
416  
417 #if 0
418     RESTORE_FRAME_EXCEPTION( frame_5503bbb38ab6ccbed06c2e00a3d35703 );
419 #endif
420  
421     if ( exception_tb == NULL )
422     {
423         exception_tb = MAKE_TRACEBACK( frame_5503bbb38ab6ccbed06c2e00a3d35703, exception_lineno );
424     }
425     else if ( exception_tb->tb_frame != &frame_5503bbb38ab6ccbed06c2e00a3d35703->m_frame )
426     {
427         exception_tb = ADD_TRACEBACK( exception_tb, frame_5503bbb38ab6ccbed06c2e00a3d35703, exception_lineno );
428     }
429  
430     // Attachs locals to frame if any.
431     Nuitka_Frame_AttachLocals(
432         (struct Nuitka_FrameObject *)frame_5503bbb38ab6ccbed06c2e00a3d35703,
433         type_description_1,
434         self->m_closure[0]
435     );
436  
437  
438     // Release cached frame.
439     if ( frame_5503bbb38ab6ccbed06c2e00a3d35703 == cache_frame_5503bbb38ab6ccbed06c2e00a3d35703 )
440     {
441         Py_DECREF( frame_5503bbb38ab6ccbed06c2e00a3d35703 );
442     }
443     cache_frame_5503bbb38ab6ccbed06c2e00a3d35703 = NULL;
444  
445     assertFrameObject( frame_5503bbb38ab6ccbed06c2e00a3d35703 );
446  
447     // Put the previous frame back on top.
448     popFrameStack();
449  
450     // Return the error.
451     goto function_exception_exit;
452  
453     frame_no_exception_1:;
454  
455  
456     // Return statement must have exited already.
457     NUITKA_CANNOT_GET_HERE( __main__$$$function_1_calledRepeatedly$$$function_1_empty );
458     return NULL;
459  
460 function_exception_exit:
461     assert( exception_type );
462     RESTORE_ERROR_OCCURRED( exception_type, exception_value, exception_tb );
463  
464     return NULL;
465     function_return_exit:
466  
467     CHECK_OBJECT( tmp_return_value );
468     assert( had_error || !ERROR_OCCURRED() );
469     return tmp_return_value;
470  
471 }
472  
473  
474 294
475 static PyObject *MAKE_FUNCTION___main__$$$function_1_calledRepeatedly(  ) 295 static PyObject *MAKE_FUNCTION___main__$$$function_1_calledRepeatedly(  )
476 { 296 {
477     struct Nuitka_FunctionObject *result = Nuitka_Function_New( 297     struct Nuitka_FunctionObject *result = Nuitka_Function_New(
478         impl___main__$$$function_1_calledRepeatedly, 298         impl___main__$$$function_1_calledRepeatedly,
489         module___main__, 309         module___main__,
490         Py_None, 310         Py_None,
491         0 311         0
492     ); 312     );
493 313
t 494   t
495     return (PyObject *)result;
496 }
497  
498  
499  
500 static PyObject *MAKE_FUNCTION___main__$$$function_1_calledRepeatedly$$$function_1_empty( struct Nuitka_CellObject *closure_closure_var )
501 {
502     struct Nuitka_FunctionObject *result = Nuitka_Function_New(
503         impl___main__$$$function_1_calledRepeatedly$$$function_1_empty,
504         const_str_plain_empty,
505 #if PYTHON_VERSION >= 330
506         const_str_digest_30e4724e0d508bc0c811d26a46d4b6cd,
507 #endif
508         codeobj_5503bbb38ab6ccbed06c2e00a3d35703,
509         NULL,
510 #if PYTHON_VERSION >= 300
511         NULL,
512         const_dict_empty,
513 #endif
514         module___main__,
515         Py_None,
516         1
517     );
518  
519 result->m_closure[0] = closure_closure_var;
520 Py_INCREF( result->m_closure[0] );
521 314
522     return (PyObject *)result; 315     return (PyObject *)result;
523 } 316 }
524 317
525 318