Construct FunctionCreationClosure

Performance Diagrams

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