Construct FunctionCreationClosure

Performance Diagrams

Construct FunctionCreationClosure 0010000000100000002000000020000000300000003000000040000000400000005000000050000000CPython 2.7Nuitka (master)Nuitka (develop)Nuitka (factory)5029945688.95192307692307257.0CPython 2.712501105242.31730769230768442.6989078607989Nuitka (master)12500677395.6826923076923442.70101057508305Nuitka (develop)12500612549.0480769230769442.70132991253274Nuitka (factory)Construct FunctionCreationClosureTicks Construct FunctionCreationClosure 0010000000100000002000000020000000300000003000000040000000400000005000000050000000CPython 3.5Nuitka (master)Nuitka (develop)Nuitka (factory)5683988888.95192307692307257.0CPython 3.514552922242.31730769230768440.84553937382304Nuitka (master)14551404395.6826923076923440.8521389848893Nuitka (develop)14553553549.0480769230769440.8427960572336Nuitka (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
30 PyObject *module___main__; 30 PyObject *module___main__;
31 PyDictObject *moduledict___main__; 31 PyDictObject *moduledict___main__;
32 32
33 /* The declarations of module constants used, if any. */ 33 /* The declarations of module constants used, if any. */
34 static PyObject *const_str_plain_itertools; 34 static PyObject *const_str_plain_itertools;
n 35 static PyObject *const_tuple_str_plain_closure_var_tuple; n
36 static PyObject *const_str_plain_module_var; 35 static PyObject *const_str_plain_module_var;
n n 36 extern PyObject *const_int_pos_1;
37 extern PyObject *const_str_plain___file__; 37 extern PyObject *const_str_plain___file__;
38 static PyObject *const_str_plain_closure_var; 38 static PyObject *const_str_plain_closure_var;
39 extern PyObject *const_int_0; 39 extern PyObject *const_int_0;
40 static PyObject *const_tuple_str_plain_closure_var_str_plain_empty_tuple; 40 static PyObject *const_tuple_str_plain_closure_var_str_plain_empty_tuple;
41 static PyObject *const_str_digest_72718e83b9339b845cf41aa23c7fde60; 41 static PyObject *const_str_digest_72718e83b9339b845cf41aa23c7fde60;
42 static PyObject *const_str_plain_empty; 42 static PyObject *const_str_plain_empty;
n 43 static PyObject *const_str_digest_30e4724e0d508bc0c811d26a46d4b6cd; n
44 extern PyObject *const_str_plain_print; 43 extern PyObject *const_str_plain_print;
45 static PyObject *const_int_pos_50000; 44 static PyObject *const_int_pos_50000;
46 static PyObject *const_tuple_str_digest_5ed1392909ad16e6227b8230f4582352_tuple; 45 static PyObject *const_tuple_str_digest_5ed1392909ad16e6227b8230f4582352_tuple;
47 static PyObject *const_str_plain_calledRepeatedly; 46 static PyObject *const_str_plain_calledRepeatedly;
48 static PyObject *const_str_angle_module; 47 static PyObject *const_str_angle_module;
62 61
63 /* Function to create module private constants. */ 62 /* Function to create module private constants. */
64 static void createModuleConstants( void ) 63 static void createModuleConstants( void )
65 { 64 {
66     const_str_plain_itertools = UNSTREAM_STRING_ASCII( &constant_bin[ 0 ], 9, 1 ); 65     const_str_plain_itertools = UNSTREAM_STRING_ASCII( &constant_bin[ 0 ], 9, 1 );
n 67     const_tuple_str_plain_closure_var_tuple = PyTuple_New( 1 ); n 66     const_str_plain_module_var = UNSTREAM_STRING_ASCII( &constant_bin[ 9 ], 10, 1 );
68     const_str_plain_closure_var = UNSTREAM_STRING_ASCII( &constant_bin[ 9 ], 11, 1 ); 67     const_str_plain_closure_var = UNSTREAM_STRING_ASCII( &constant_bin[ 19 ], 11, 1 );
69     PyTuple_SET_ITEM( const_tuple_str_plain_closure_var_tuple, 0, const_str_plain_closure_var ); Py_INCREF( const_str_plain_closure_var );
70     const_str_plain_module_var = UNSTREAM_STRING_ASCII( &constant_bin[ 20 ], 10, 1 );
71     const_tuple_str_plain_closure_var_str_plain_empty_tuple = PyTuple_New( 2 ); 68     const_tuple_str_plain_closure_var_str_plain_empty_tuple = PyTuple_New( 2 );
72     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 ); 69     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     const_str_plain_empty = UNSTREAM_STRING_ASCII( &constant_bin[ 30 ], 5, 1 ); 70     const_str_plain_empty = UNSTREAM_STRING_ASCII( &constant_bin[ 30 ], 5, 1 );
74     PyTuple_SET_ITEM( const_tuple_str_plain_closure_var_str_plain_empty_tuple, 1, const_str_plain_empty ); Py_INCREF( const_str_plain_empty ); 71     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     const_str_digest_72718e83b9339b845cf41aa23c7fde60 = UNSTREAM_STRING_ASCII( &constant_bin[ 35 ], 74, 0 ); 72     const_str_digest_72718e83b9339b845cf41aa23c7fde60 = UNSTREAM_STRING_ASCII( &constant_bin[ 35 ], 74, 0 );
n 76     const_str_digest_30e4724e0d508bc0c811d26a46d4b6cd = UNSTREAM_STRING_ASCII( &constant_bin[ 109 ], 31, 0 ); n
77     const_int_pos_50000 = PyLong_FromUnsignedLong( 50000ul ); 73     const_int_pos_50000 = PyLong_FromUnsignedLong( 50000ul );
78     const_tuple_str_digest_5ed1392909ad16e6227b8230f4582352_tuple = PyTuple_New( 1 ); 74     const_tuple_str_digest_5ed1392909ad16e6227b8230f4582352_tuple = PyTuple_New( 1 );
n 79     const_str_digest_5ed1392909ad16e6227b8230f4582352 = UNSTREAM_STRING_ASCII( &constant_bin[ 140 ], 3, 0 ); n 75     const_str_digest_5ed1392909ad16e6227b8230f4582352 = UNSTREAM_STRING_ASCII( &constant_bin[ 109 ], 3, 0 );
80     PyTuple_SET_ITEM( const_tuple_str_digest_5ed1392909ad16e6227b8230f4582352_tuple, 0, const_str_digest_5ed1392909ad16e6227b8230f4582352 ); Py_INCREF( const_str_digest_5ed1392909ad16e6227b8230f4582352 ); 76     PyTuple_SET_ITEM( const_tuple_str_digest_5ed1392909ad16e6227b8230f4582352_tuple, 0, const_str_digest_5ed1392909ad16e6227b8230f4582352 ); Py_INCREF( const_str_digest_5ed1392909ad16e6227b8230f4582352 );
n 81     const_str_plain_calledRepeatedly = UNSTREAM_STRING_ASCII( &constant_bin[ 109 ], 16, 1 ); n 77     const_str_plain_calledRepeatedly = UNSTREAM_STRING_ASCII( &constant_bin[ 112 ], 16, 1 );
82     const_str_angle_module = UNSTREAM_STRING_ASCII( &constant_bin[ 143 ], 8, 0 ); 78     const_str_angle_module = UNSTREAM_STRING_ASCII( &constant_bin[ 128 ], 8, 0 );
83     const_str_plain_None = UNSTREAM_STRING_ASCII( &constant_bin[ 151 ], 4, 1 ); 79     const_str_plain_None = UNSTREAM_STRING_ASCII( &constant_bin[ 136 ], 4, 1 );
84     const_str_plain_x = UNSTREAM_STRING_ASCII( &constant_bin[ 60 ], 1, 1 ); 80     const_str_plain_x = UNSTREAM_STRING_ASCII( &constant_bin[ 60 ], 1, 1 );
n 85     const_str_plain_repeat = UNSTREAM_STRING_ASCII( &constant_bin[ 155 ], 6, 1 ); n 81     const_str_plain_repeat = UNSTREAM_STRING_ASCII( &constant_bin[ 140 ], 6, 1 );
86     const_tuple_none_int_pos_50000_tuple = PyTuple_New( 2 ); 82     const_tuple_none_int_pos_50000_tuple = PyTuple_New( 2 );
87     PyTuple_SET_ITEM( const_tuple_none_int_pos_50000_tuple, 0, Py_None ); Py_INCREF( Py_None ); 83     PyTuple_SET_ITEM( const_tuple_none_int_pos_50000_tuple, 0, Py_None ); Py_INCREF( Py_None );
88     PyTuple_SET_ITEM( const_tuple_none_int_pos_50000_tuple, 1, const_int_pos_50000 ); Py_INCREF( const_int_pos_50000 ); 84     PyTuple_SET_ITEM( const_tuple_none_int_pos_50000_tuple, 1, const_int_pos_50000 ); Py_INCREF( const_int_pos_50000 );
89 85
90     constants_created = true; 86     constants_created = true;
102 #endif 98 #endif
103 99
104 // The module code objects. 100 // The module code objects.
105 static PyCodeObject *codeobj_a65ace0fbcb9d103459b38453f554aba; 101 static PyCodeObject *codeobj_a65ace0fbcb9d103459b38453f554aba;
106 static PyCodeObject *codeobj_52c58a710d43b40c9b262fd3efbc377e; 102 static PyCodeObject *codeobj_52c58a710d43b40c9b262fd3efbc377e;
n 107 static PyCodeObject *codeobj_7c91ca4300a7b4b7cb9a3b3985121c7f; n
108 /* For use in "MainProgram.c". */ 103 /* For use in "MainProgram.c". */
109 PyCodeObject *codeobj_main = NULL; 104 PyCodeObject *codeobj_main = NULL;
110 105
111 static void createModuleCodeObjects(void) 106 static void createModuleCodeObjects(void)
112 { 107 {
113     module_filename_obj = const_str_digest_72718e83b9339b845cf41aa23c7fde60; 108     module_filename_obj = const_str_digest_72718e83b9339b845cf41aa23c7fde60;
114     codeobj_a65ace0fbcb9d103459b38453f554aba = MAKE_CODEOBJ( module_filename_obj, const_str_angle_module, 1, const_tuple_empty, 0, 0, CO_NOFREE ); 109     codeobj_a65ace0fbcb9d103459b38453f554aba = MAKE_CODEOBJ( module_filename_obj, const_str_angle_module, 1, const_tuple_empty, 0, 0, CO_NOFREE );
115     codeobj_main = codeobj_a65ace0fbcb9d103459b38453f554aba; 110     codeobj_main = codeobj_a65ace0fbcb9d103459b38453f554aba;
116     codeobj_52c58a710d43b40c9b262fd3efbc377e = 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 ); 111     codeobj_52c58a710d43b40c9b262fd3efbc377e = 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 117     codeobj_7c91ca4300a7b4b7cb9a3b3985121c7f = MAKE_CODEOBJ( module_filename_obj, const_str_plain_empty, 28, const_tuple_str_plain_closure_var_tuple, 0, 0, CO_OPTIMIZED | CO_NEWLOCALS ); n
118 } 112 }
119 113
120 // The module function declarations. 114 // The module function declarations.
121 static PyObject *MAKE_FUNCTION___main__$$$function_1_calledRepeatedly(  ); 115 static PyObject *MAKE_FUNCTION___main__$$$function_1_calledRepeatedly(  );
n 122   n
123  
124 static PyObject *MAKE_FUNCTION___main__$$$function_1_calledRepeatedly$$$function_1_empty(  );
125 116
126 117
127 // The module function definitions. 118 // The module function definitions.
128 static PyObject *impl___main__$$$function_1_calledRepeatedly( struct Nuitka_FunctionObject const *self, PyObject **python_pars ) 119 static PyObject *impl___main__$$$function_1_calledRepeatedly( struct Nuitka_FunctionObject const *self, PyObject **python_pars )
129 { 120 {
131 #ifndef __NUITKA_NO_ASSERT__ 122 #ifndef __NUITKA_NO_ASSERT__
132     NUITKA_MAY_BE_UNUSED bool had_error = ERROR_OCCURRED(); 123     NUITKA_MAY_BE_UNUSED bool had_error = ERROR_OCCURRED();
133 #endif 124 #endif
134 125
135     // Local variable declarations. 126     // Local variable declarations.
n 136     struct Nuitka_CellObject *var_closure_var = PyCell_EMPTY(); n
137     PyObject *var_empty = NULL; 127     PyObject *var_closure_var = NULL;
138     struct Nuitka_FrameObject *frame_52c58a710d43b40c9b262fd3efbc377e; 128     struct Nuitka_FrameObject *frame_52c58a710d43b40c9b262fd3efbc377e;
139     NUITKA_MAY_BE_UNUSED char const *type_description_1 = NULL; 129     NUITKA_MAY_BE_UNUSED char const *type_description_1 = NULL;
140     PyObject *exception_type = NULL; 130     PyObject *exception_type = NULL;
141     PyObject *exception_value = NULL; 131     PyObject *exception_value = NULL;
142     PyTracebackObject *exception_tb = NULL; 132     PyTracebackObject *exception_tb = NULL;
179             exception_tb = NULL; 169             exception_tb = NULL;
180             NORMALIZE_EXCEPTION( &exception_type, &exception_value, &exception_tb ); 170             NORMALIZE_EXCEPTION( &exception_type, &exception_value, &exception_tb );
181             CHAIN_EXCEPTION( exception_value ); 171             CHAIN_EXCEPTION( exception_value );
182 172
183             exception_lineno = 25; 173             exception_lineno = 25;
n 184             type_description_1 = "co"; n 174             type_description_1 = "oN";
185             goto frame_exception_exit_1; 175             goto frame_exception_exit_1;
186         } 176         }
187 177
188         tmp_assign_source_1 = tmp_mvar_value_1; 178         tmp_assign_source_1 = tmp_mvar_value_1;
n 189         assert( PyCell_GET( var_closure_var == NULL ); n 179         assert( var_closure_var == NULL );
190         Py_INCREF( tmp_assign_source_1 ); 180         Py_INCREF( tmp_assign_source_1 );
n 191         PyCell_SET( var_closure_var, tmp_assign_source_1 ); n 181         var_closure_var = tmp_assign_source_1;
192  
193     } 182     }
194 183
195 #if 0 184 #if 0
196     RESTORE_FRAME_EXCEPTION( frame_52c58a710d43b40c9b262fd3efbc377e ); 185     RESTORE_FRAME_EXCEPTION( frame_52c58a710d43b40c9b262fd3efbc377e );
197 #endif 186 #endif
219     // Attachs locals to frame if any. 208     // Attachs locals to frame if any.
220     Nuitka_Frame_AttachLocals( 209     Nuitka_Frame_AttachLocals(
221         (struct Nuitka_FrameObject *)frame_52c58a710d43b40c9b262fd3efbc377e, 210         (struct Nuitka_FrameObject *)frame_52c58a710d43b40c9b262fd3efbc377e,
222         type_description_1, 211         type_description_1,
223         var_closure_var, 212         var_closure_var,
n 224         var_empty n 213         NULL
225     ); 214     );
226 215
227 216
228     // Release cached frame. 217     // Release cached frame.
229     if ( frame_52c58a710d43b40c9b262fd3efbc377e == cache_frame_52c58a710d43b40c9b262fd3efbc377e ) 218     if ( frame_52c58a710d43b40c9b262fd3efbc377e == cache_frame_52c58a710d43b40c9b262fd3efbc377e )
240     // Return the error. 229     // Return the error.
241     goto try_except_handler_1; 230     goto try_except_handler_1;
242 231
243     frame_no_exception_1:; 232     frame_no_exception_1:;
244     { 233     {
n 245         PyObject *tmp_assign_source_2; n
246         tmp_assign_source_2 = MAKE_FUNCTION___main__$$$function_1_calledRepeatedly$$$function_1_empty(  );
247  
248         ((struct Nuitka_FunctionObject *)tmp_assign_source_2)->m_closure[0] = var_closure_var;
249         Py_INCREF( ((struct Nuitka_FunctionObject *)tmp_assign_source_2)->m_closure[0] );
250  
251  
252         assert( var_empty == NULL );
253         var_empty = tmp_assign_source_2;
254     }
255     {
256         PyObject *tmp_tuple_element_1; 234         PyObject *tmp_tuple_element_1;
n 257         CHECK_OBJECT( var_empty ); n
258         tmp_tuple_element_1 = var_empty; 235         tmp_tuple_element_1 = const_int_pos_1;
259         tmp_return_value = PyTuple_New( 2 ); 236         tmp_return_value = PyTuple_New( 2 );
260         Py_INCREF( tmp_tuple_element_1 ); 237         Py_INCREF( tmp_tuple_element_1 );
261         PyTuple_SET_ITEM( tmp_return_value, 0, tmp_tuple_element_1 ); 238         PyTuple_SET_ITEM( tmp_return_value, 0, tmp_tuple_element_1 );
n 262         CHECK_OBJECT( PyCell_GET( var_closure_var ); n 239         CHECK_OBJECT( var_closure_var );
263         tmp_tuple_element_1 = PyCell_GET( var_closure_var ); 240         tmp_tuple_element_1 = var_closure_var;
264         Py_INCREF( tmp_tuple_element_1 ); 241         Py_INCREF( tmp_tuple_element_1 );
265         PyTuple_SET_ITEM( tmp_return_value, 1, tmp_tuple_element_1 ); 242         PyTuple_SET_ITEM( tmp_return_value, 1, tmp_tuple_element_1 );
266         goto try_return_handler_1; 243         goto try_return_handler_1;
267     } 244     }
268     // tried codes exits in all cases 245     // tried codes exits in all cases
271     // Return handler code: 248     // Return handler code:
272     try_return_handler_1:; 249     try_return_handler_1:;
273     CHECK_OBJECT( (PyObject *)var_closure_var ); 250     CHECK_OBJECT( (PyObject *)var_closure_var );
274     Py_DECREF( var_closure_var ); 251     Py_DECREF( var_closure_var );
275     var_closure_var = NULL; 252     var_closure_var = NULL;
n 276   n
277     CHECK_OBJECT( (PyObject *)var_empty );
278     Py_DECREF( var_empty );
279     var_empty = NULL;
280 253
281     goto function_return_exit; 254     goto function_return_exit;
282     // Exception handler code: 255     // Exception handler code:
283     try_except_handler_1:; 256     try_except_handler_1:;
284     exception_keeper_type_1 = exception_type; 257     exception_keeper_type_1 = exception_type;
319    assert( had_error || !ERROR_OCCURRED() ); 292    assert( had_error || !ERROR_OCCURRED() );
320    return tmp_return_value; 293    return tmp_return_value;
321 } 294 }
322 295
323 296
n 324 static PyObject *impl___main__$$$function_1_calledRepeatedly$$$function_1_empty( struct Nuitka_FunctionObject const *self, PyObject **python_pars ) n
325 {
326     // Preserve error status for checks
327 #ifndef __NUITKA_NO_ASSERT__
328     NUITKA_MAY_BE_UNUSED bool had_error = ERROR_OCCURRED();
329 #endif
330  
331     // Local variable declarations.
332     struct Nuitka_FrameObject *frame_7c91ca4300a7b4b7cb9a3b3985121c7f;
333     NUITKA_MAY_BE_UNUSED char const *type_description_1 = NULL;
334     PyObject *tmp_return_value = NULL;
335     PyObject *exception_type = NULL;
336     PyObject *exception_value = NULL;
337     PyTracebackObject *exception_tb = NULL;
338     NUITKA_MAY_BE_UNUSED int exception_lineno = 0;
339     static struct Nuitka_FrameObject *cache_frame_7c91ca4300a7b4b7cb9a3b3985121c7f = NULL;
340  
341     // Actual function body.
342     MAKE_OR_REUSE_FRAME( cache_frame_7c91ca4300a7b4b7cb9a3b3985121c7f, codeobj_7c91ca4300a7b4b7cb9a3b3985121c7f, module___main__, sizeof(void *) );
343     frame_7c91ca4300a7b4b7cb9a3b3985121c7f = cache_frame_7c91ca4300a7b4b7cb9a3b3985121c7f;
344  
345     // Push the new frame as the currently active one.
346     pushFrameStack( frame_7c91ca4300a7b4b7cb9a3b3985121c7f );
347  
348     // Mark the frame object as in use, ref count 1 will be up for reuse.
349     assert( Py_REFCNT( frame_7c91ca4300a7b4b7cb9a3b3985121c7f ) == 2 ); // Frame stack
350  
351     // Framed code:
352     if ( PyCell_GET( self->m_closure[0] ) == NULL )
353     {
354  
355         exception_type = PyExc_NameError;
356         Py_INCREF( exception_type );
357         exception_value = PyUnicode_FromFormat( "free variable '%s' referenced before assignment in enclosing scope", "closure_var" );
358         exception_tb = NULL;
359         NORMALIZE_EXCEPTION( &exception_type, &exception_value, &exception_tb );
360         CHAIN_EXCEPTION( exception_value );
361  
362         exception_lineno = 29;
363         type_description_1 = "c";
364         goto frame_exception_exit_1;
365     }
366  
367     tmp_return_value = PyCell_GET( self->m_closure[0] );
368     Py_INCREF( tmp_return_value );
369     goto frame_return_exit_1;
370  
371 #if 0
372     RESTORE_FRAME_EXCEPTION( frame_7c91ca4300a7b4b7cb9a3b3985121c7f );
373 #endif
374  
375     // Put the previous frame back on top.
376     popFrameStack();
377  
378     goto frame_no_exception_1;
379  
380     frame_return_exit_1:;
381 #if 0
382     RESTORE_FRAME_EXCEPTION( frame_7c91ca4300a7b4b7cb9a3b3985121c7f );
383 #endif
384  
385     // Put the previous frame back on top.
386     popFrameStack();
387  
388     goto function_return_exit;
389  
390     frame_exception_exit_1:;
391  
392 #if 0
393     RESTORE_FRAME_EXCEPTION( frame_7c91ca4300a7b4b7cb9a3b3985121c7f );
394 #endif
395  
396     if ( exception_tb == NULL )
397     {
398         exception_tb = MAKE_TRACEBACK( frame_7c91ca4300a7b4b7cb9a3b3985121c7f, exception_lineno );
399     }
400     else if ( exception_tb->tb_frame != &frame_7c91ca4300a7b4b7cb9a3b3985121c7f->m_frame )
401     {
402         exception_tb = ADD_TRACEBACK( exception_tb, frame_7c91ca4300a7b4b7cb9a3b3985121c7f, exception_lineno );
403     }
404  
405     // Attachs locals to frame if any.
406     Nuitka_Frame_AttachLocals(
407         (struct Nuitka_FrameObject *)frame_7c91ca4300a7b4b7cb9a3b3985121c7f,
408         type_description_1,
409         self->m_closure[0]
410     );
411  
412  
413     // Release cached frame.
414     if ( frame_7c91ca4300a7b4b7cb9a3b3985121c7f == cache_frame_7c91ca4300a7b4b7cb9a3b3985121c7f )
415     {
416         Py_DECREF( frame_7c91ca4300a7b4b7cb9a3b3985121c7f );
417     }
418     cache_frame_7c91ca4300a7b4b7cb9a3b3985121c7f = NULL;
419  
420     assertFrameObject( frame_7c91ca4300a7b4b7cb9a3b3985121c7f );
421  
422     // Put the previous frame back on top.
423     popFrameStack();
424  
425     // Return the error.
426     goto function_exception_exit;
427  
428     frame_no_exception_1:;
429  
430     // Return statement must have exited already.
431     NUITKA_CANNOT_GET_HERE( __main__$$$function_1_calledRepeatedly$$$function_1_empty );
432     return NULL;
433  
434 function_exception_exit:
435     assert( exception_type );
436     RESTORE_ERROR_OCCURRED( exception_type, exception_value, exception_tb );
437  
438     return NULL;
439  
440 function_return_exit:
441    // Function cleanup code if any.
442  
443  
444    // Actual function exit with return value, making sure we did not make
445    // the error status worse despite non-NULL return.
446    CHECK_OBJECT( tmp_return_value );
447    assert( had_error || !ERROR_OCCURRED() );
448    return tmp_return_value;
449 }
450  
451  
452 297
453 static PyObject *MAKE_FUNCTION___main__$$$function_1_calledRepeatedly(  ) 298 static PyObject *MAKE_FUNCTION___main__$$$function_1_calledRepeatedly(  )
454 { 299 {
455     struct Nuitka_FunctionObject *result = Nuitka_Function_New( 300     struct Nuitka_FunctionObject *result = Nuitka_Function_New(
456         impl___main__$$$function_1_calledRepeatedly, 301         impl___main__$$$function_1_calledRepeatedly,
465         NULL, 310         NULL,
466 #endif 311 #endif
467         module___main__, 312         module___main__,
468         NULL, 313         NULL,
469         0 314         0
t 470     ); t
471  
472     return (PyObject *)result;
473 }
474  
475  
476  
477 static PyObject *MAKE_FUNCTION___main__$$$function_1_calledRepeatedly$$$function_1_empty(  )
478 {
479     struct Nuitka_FunctionObject *result = Nuitka_Function_New(
480         impl___main__$$$function_1_calledRepeatedly$$$function_1_empty,
481         const_str_plain_empty,
482 #if PYTHON_VERSION >= 300
483         const_str_digest_30e4724e0d508bc0c811d26a46d4b6cd,
484 #endif
485         codeobj_7c91ca4300a7b4b7cb9a3b3985121c7f,
486         NULL,
487 #if PYTHON_VERSION >= 300
488         NULL,
489         NULL,
490 #endif
491         module___main__,
492         NULL,
493         1
494     ); 315     );
495 316
496     return (PyObject *)result; 317     return (PyObject *)result;
497 } 318 }
498 319