Construct FunctionCreationClosure

Performance Diagrams

Construct FunctionCreationClosure 0010000000100000002000000020000000300000003000000040000000400000005000000050000000CPython 2.7Nuitka (master)Nuitka (develop)Nuitka (factory)5074803388.95192307692307257.0CPython 2.712799927242.31730769230768441.7866854192237Nuitka (master)12450504395.6826923076923443.4881858308448Nuitka (develop)12449910549.0480769230769443.49107828853795Nuitka (factory)Construct FunctionCreationClosureTicks Construct FunctionCreationClosure 0010000000100000002000000020000000300000003000000040000000400000005000000050000000CPython 3.5Nuitka (master)Nuitka (develop)Nuitka (factory)5658949988.95192307692307257.0CPython 3.515102436242.31730769230768438.16597091286656Nuitka (master)14554525395.6826923076923440.55859215695995Nuitka (develop)14552300549.0480769230769440.56830830112955Nuitka (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
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_str_digest_f6ad0a778d33ac109b7dbe7a352dc123; 35 static PyObject *const_str_digest_f6ad0a778d33ac109b7dbe7a352dc123;
n 36 static PyObject *const_tuple_str_plain_closure_var_tuple; n
37 static PyObject *const_str_plain_module_var; 36 static PyObject *const_str_plain_module_var;
n n 37 extern PyObject *const_int_pos_1;
38 extern PyObject *const_str_plain___file__; 38 extern PyObject *const_str_plain___file__;
39 static PyObject *const_str_plain_closure_var; 39 static PyObject *const_str_plain_closure_var;
40 extern PyObject *const_int_0; 40 extern PyObject *const_int_0;
41 static PyObject *const_tuple_str_plain_closure_var_str_plain_empty_tuple; 41 static PyObject *const_tuple_str_plain_closure_var_str_plain_empty_tuple;
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;
61 60
62 static void createModuleConstants( void ) 61 static void createModuleConstants( void )
63 { 62 {
64     const_str_plain_itertools = UNSTREAM_STRING( &constant_bin[ 0 ], 9, 1 ); 63     const_str_plain_itertools = UNSTREAM_STRING( &constant_bin[ 0 ], 9, 1 );
65     const_str_digest_f6ad0a778d33ac109b7dbe7a352dc123 = UNSTREAM_STRING( &constant_bin[ 9 ], 81, 0 ); 64     const_str_digest_f6ad0a778d33ac109b7dbe7a352dc123 = UNSTREAM_STRING( &constant_bin[ 9 ], 81, 0 );
n 66     const_tuple_str_plain_closure_var_tuple = PyTuple_New( 1 ); n 65     const_str_plain_module_var = UNSTREAM_STRING( &constant_bin[ 90 ], 10, 1 );
67     const_str_plain_closure_var = UNSTREAM_STRING( &constant_bin[ 90 ], 11, 1 ); 66     const_str_plain_closure_var = UNSTREAM_STRING( &constant_bin[ 100 ], 11, 1 );
68     PyTuple_SET_ITEM( const_tuple_str_plain_closure_var_tuple, 0, const_str_plain_closure_var ); Py_INCREF( const_str_plain_closure_var );
69     const_str_plain_module_var = UNSTREAM_STRING( &constant_bin[ 101 ], 10, 1 );
70     const_tuple_str_plain_closure_var_str_plain_empty_tuple = PyTuple_New( 2 ); 67     const_tuple_str_plain_closure_var_str_plain_empty_tuple = PyTuple_New( 2 );
71     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 ); 68     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 );
72     const_str_plain_empty = UNSTREAM_STRING( &constant_bin[ 111 ], 5, 1 ); 69     const_str_plain_empty = UNSTREAM_STRING( &constant_bin[ 111 ], 5, 1 );
73     PyTuple_SET_ITEM( const_tuple_str_plain_closure_var_str_plain_empty_tuple, 1, const_str_plain_empty ); Py_INCREF( const_str_plain_empty ); 70     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 74     const_str_digest_30e4724e0d508bc0c811d26a46d4b6cd = UNSTREAM_STRING( &constant_bin[ 116 ], 31, 0 ); n
75     const_int_pos_50000 = PyLong_FromUnsignedLong( 50000ul ); 71     const_int_pos_50000 = PyLong_FromUnsignedLong( 50000ul );
76     const_tuple_str_digest_5ed1392909ad16e6227b8230f4582352_tuple = PyTuple_New( 1 ); 72     const_tuple_str_digest_5ed1392909ad16e6227b8230f4582352_tuple = PyTuple_New( 1 );
n 77     const_str_digest_5ed1392909ad16e6227b8230f4582352 = UNSTREAM_STRING( &constant_bin[ 147 ], 3, 0 ); n 73     const_str_digest_5ed1392909ad16e6227b8230f4582352 = UNSTREAM_STRING( &constant_bin[ 116 ], 3, 0 );
78     PyTuple_SET_ITEM( const_tuple_str_digest_5ed1392909ad16e6227b8230f4582352_tuple, 0, const_str_digest_5ed1392909ad16e6227b8230f4582352 ); Py_INCREF( const_str_digest_5ed1392909ad16e6227b8230f4582352 ); 74     PyTuple_SET_ITEM( const_tuple_str_digest_5ed1392909ad16e6227b8230f4582352_tuple, 0, const_str_digest_5ed1392909ad16e6227b8230f4582352 ); Py_INCREF( const_str_digest_5ed1392909ad16e6227b8230f4582352 );
n 79     const_str_plain_calledRepeatedly = UNSTREAM_STRING( &constant_bin[ 116 ], 16, 1 ); n 75     const_str_plain_calledRepeatedly = UNSTREAM_STRING( &constant_bin[ 119 ], 16, 1 );
80     const_str_angle_module = UNSTREAM_STRING( &constant_bin[ 150 ], 8, 0 ); 76     const_str_angle_module = UNSTREAM_STRING( &constant_bin[ 135 ], 8, 0 );
81     const_str_plain_None = UNSTREAM_STRING( &constant_bin[ 158 ], 4, 1 ); 77     const_str_plain_None = UNSTREAM_STRING( &constant_bin[ 143 ], 4, 1 );
82     const_str_plain_x = UNSTREAM_STRING( &constant_bin[ 34 ], 1, 1 ); 78     const_str_plain_x = UNSTREAM_STRING( &constant_bin[ 34 ], 1, 1 );
n 83     const_str_plain_repeat = UNSTREAM_STRING( &constant_bin[ 162 ], 6, 1 ); n 79     const_str_plain_repeat = UNSTREAM_STRING( &constant_bin[ 147 ], 6, 1 );
84     const_tuple_none_int_pos_50000_tuple = PyTuple_New( 2 ); 80     const_tuple_none_int_pos_50000_tuple = PyTuple_New( 2 );
85     PyTuple_SET_ITEM( const_tuple_none_int_pos_50000_tuple, 0, Py_None ); Py_INCREF( Py_None ); 81     PyTuple_SET_ITEM( const_tuple_none_int_pos_50000_tuple, 0, Py_None ); Py_INCREF( Py_None );
86     PyTuple_SET_ITEM( const_tuple_none_int_pos_50000_tuple, 1, const_int_pos_50000 ); Py_INCREF( const_int_pos_50000 ); 82     PyTuple_SET_ITEM( const_tuple_none_int_pos_50000_tuple, 1, const_int_pos_50000 ); Py_INCREF( const_int_pos_50000 );
87 83
88     constants_created = true; 84     constants_created = true;
99 #endif 95 #endif
100 96
101 // The module code objects. 97 // The module code objects.
102 static PyCodeObject *codeobj_f7a0e6cfa7137be6907b186d33dd6b68; 98 static PyCodeObject *codeobj_f7a0e6cfa7137be6907b186d33dd6b68;
103 static PyCodeObject *codeobj_5c2182c64326de5fc82aa3cdffc30ec6; 99 static PyCodeObject *codeobj_5c2182c64326de5fc82aa3cdffc30ec6;
n 104 static PyCodeObject *codeobj_333ac64c3ce03859c9659b15c003dcc5; n
105 /* For use in "MainProgram.c". */ 100 /* For use in "MainProgram.c". */
106 PyCodeObject *codeobj_main = NULL; 101 PyCodeObject *codeobj_main = NULL;
107 102
108 static void createModuleCodeObjects(void) 103 static void createModuleCodeObjects(void)
109 { 104 {
110     module_filename_obj = const_str_digest_f6ad0a778d33ac109b7dbe7a352dc123; 105     module_filename_obj = const_str_digest_f6ad0a778d33ac109b7dbe7a352dc123;
111     codeobj_f7a0e6cfa7137be6907b186d33dd6b68 = MAKE_CODEOBJ( module_filename_obj, const_str_angle_module, 1, const_tuple_empty, 0, 0, CO_NOFREE ); 106     codeobj_f7a0e6cfa7137be6907b186d33dd6b68 = MAKE_CODEOBJ( module_filename_obj, const_str_angle_module, 1, const_tuple_empty, 0, 0, CO_NOFREE );
112     codeobj_main = codeobj_f7a0e6cfa7137be6907b186d33dd6b68; 107     codeobj_main = codeobj_f7a0e6cfa7137be6907b186d33dd6b68;
113     codeobj_5c2182c64326de5fc82aa3cdffc30ec6 = 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 ); 108     codeobj_5c2182c64326de5fc82aa3cdffc30ec6 = 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 114     codeobj_333ac64c3ce03859c9659b15c003dcc5 = MAKE_CODEOBJ( module_filename_obj, const_str_plain_empty, 28, const_tuple_str_plain_closure_var_tuple, 0, 0, CO_OPTIMIZED | CO_NEWLOCALS ); n
115 } 109 }
116 110
117 // The module function declarations. 111 // The module function declarations.
118 static PyObject *MAKE_FUNCTION___main__$$$function_1_calledRepeatedly(  ); 112 static PyObject *MAKE_FUNCTION___main__$$$function_1_calledRepeatedly(  );
n 119   n
120  
121 static PyObject *MAKE_FUNCTION___main__$$$function_1_calledRepeatedly$$$function_1_empty(  );
122 113
123 114
124 // The module function definitions. 115 // The module function definitions.
125 static PyObject *impl___main__$$$function_1_calledRepeatedly( struct Nuitka_FunctionObject const *self, PyObject **python_pars ) 116 static PyObject *impl___main__$$$function_1_calledRepeatedly( struct Nuitka_FunctionObject const *self, PyObject **python_pars )
126 { 117 {
128 #ifndef __NUITKA_NO_ASSERT__ 119 #ifndef __NUITKA_NO_ASSERT__
129     NUITKA_MAY_BE_UNUSED bool had_error = ERROR_OCCURRED(); 120     NUITKA_MAY_BE_UNUSED bool had_error = ERROR_OCCURRED();
130 #endif 121 #endif
131 122
132     // Local variable declarations. 123     // Local variable declarations.
n 133     struct Nuitka_CellObject *var_closure_var = PyCell_EMPTY(); n
134     PyObject *var_empty = NULL; 124     PyObject *var_closure_var = NULL;
135     struct Nuitka_FrameObject *frame_5c2182c64326de5fc82aa3cdffc30ec6; 125     struct Nuitka_FrameObject *frame_5c2182c64326de5fc82aa3cdffc30ec6;
136     NUITKA_MAY_BE_UNUSED char const *type_description_1 = NULL; 126     NUITKA_MAY_BE_UNUSED char const *type_description_1 = NULL;
137     PyObject *exception_type = NULL; 127     PyObject *exception_type = NULL;
138     PyObject *exception_value = NULL; 128     PyObject *exception_value = NULL;
139     PyTracebackObject *exception_tb = NULL; 129     PyTracebackObject *exception_tb = NULL;
176         exception_tb = NULL; 166         exception_tb = NULL;
177         NORMALIZE_EXCEPTION( &exception_type, &exception_value, &exception_tb ); 167         NORMALIZE_EXCEPTION( &exception_type, &exception_value, &exception_tb );
178         CHAIN_EXCEPTION( exception_value ); 168         CHAIN_EXCEPTION( exception_value );
179 169
180         exception_lineno = 25; 170         exception_lineno = 25;
n 181         type_description_1 = "co"; n 171         type_description_1 = "oN";
182         goto frame_exception_exit_1; 172         goto frame_exception_exit_1;
183     } 173     }
184 174
n 185     assert( PyCell_GET( var_closure_var == NULL ); n 175     assert( var_closure_var == NULL );
186     Py_INCREF( tmp_assign_source_1 ); 176     Py_INCREF( tmp_assign_source_1 );
n 187     PyCell_SET( var_closure_var, tmp_assign_source_1 ); n 177     var_closure_var = tmp_assign_source_1;
188 178
189     } 179     }
190 180
191 #if 0 181 #if 0
192     RESTORE_FRAME_EXCEPTION( frame_5c2182c64326de5fc82aa3cdffc30ec6 ); 182     RESTORE_FRAME_EXCEPTION( frame_5c2182c64326de5fc82aa3cdffc30ec6 );
215     // Attachs locals to frame if any. 205     // Attachs locals to frame if any.
216     Nuitka_Frame_AttachLocals( 206     Nuitka_Frame_AttachLocals(
217         (struct Nuitka_FrameObject *)frame_5c2182c64326de5fc82aa3cdffc30ec6, 207         (struct Nuitka_FrameObject *)frame_5c2182c64326de5fc82aa3cdffc30ec6,
218         type_description_1, 208         type_description_1,
219         var_closure_var, 209         var_closure_var,
n 220         var_empty n 210         NULL
221     ); 211     );
222 212
223 213
224     // Release cached frame. 214     // Release cached frame.
225     if ( frame_5c2182c64326de5fc82aa3cdffc30ec6 == cache_frame_5c2182c64326de5fc82aa3cdffc30ec6 ) 215     if ( frame_5c2182c64326de5fc82aa3cdffc30ec6 == cache_frame_5c2182c64326de5fc82aa3cdffc30ec6 )
237     goto try_except_handler_1; 227     goto try_except_handler_1;
238 228
239     frame_no_exception_1:; 229     frame_no_exception_1:;
240 230
241     { 231     {
n 242     PyObject *tmp_assign_source_2; n
243     tmp_assign_source_2 = MAKE_FUNCTION___main__$$$function_1_calledRepeatedly$$$function_1_empty(  );
244  
245     ((struct Nuitka_FunctionObject *)tmp_assign_source_2)->m_closure[0] = var_closure_var;
246     Py_INCREF( ((struct Nuitka_FunctionObject *)tmp_assign_source_2)->m_closure[0] );
247  
248  
249     assert( var_empty == NULL );
250     var_empty = tmp_assign_source_2;
251  
252     }
253     {
254     PyObject *tmp_tuple_element_1; 232     PyObject *tmp_tuple_element_1;
n 255     tmp_tuple_element_1 = var_empty; n 233     tmp_tuple_element_1 = const_int_pos_1;
256  
257     CHECK_OBJECT( tmp_tuple_element_1 );
258     tmp_return_value = PyTuple_New( 2 ); 234     tmp_return_value = PyTuple_New( 2 );
259     Py_INCREF( tmp_tuple_element_1 ); 235     Py_INCREF( tmp_tuple_element_1 );
260     PyTuple_SET_ITEM( tmp_return_value, 0, tmp_tuple_element_1 ); 236     PyTuple_SET_ITEM( tmp_return_value, 0, tmp_tuple_element_1 );
n 261     if ( var_closure_var == NULL ) n
262     {
263         tmp_tuple_element_1 = NULL;
264     }
265     else
266     {
267         tmp_tuple_element_1 = PyCell_GET( var_closure_var ); 237     tmp_tuple_element_1 = var_closure_var;
268     }
269 238
270     CHECK_OBJECT( tmp_tuple_element_1 ); 239     CHECK_OBJECT( tmp_tuple_element_1 );
271     Py_INCREF( tmp_tuple_element_1 ); 240     Py_INCREF( tmp_tuple_element_1 );
272     PyTuple_SET_ITEM( tmp_return_value, 1, tmp_tuple_element_1 ); 241     PyTuple_SET_ITEM( tmp_return_value, 1, tmp_tuple_element_1 );
273     goto try_return_handler_1; 242     goto try_return_handler_1;
279     try_return_handler_1:; 248     try_return_handler_1:;
280     { 249     {
281     CHECK_OBJECT( (PyObject *)var_closure_var ); 250     CHECK_OBJECT( (PyObject *)var_closure_var );
282     Py_DECREF( var_closure_var ); 251     Py_DECREF( var_closure_var );
283     var_closure_var = NULL; 252     var_closure_var = NULL;
n 284   n
285     }
286     {
287     Py_XDECREF( var_empty );
288     var_empty = NULL;
289 253
290     } 254     }
291     { 255     {
292     goto function_return_exit; 256     goto function_return_exit;
293     } 257     }
330 return tmp_return_value; 294 return tmp_return_value;
331 295
332 } 296 }
333 297
334 298
n 335 static PyObject *impl___main__$$$function_1_calledRepeatedly$$$function_1_empty( struct Nuitka_FunctionObject const *self, PyObject **python_pars ) n
336 {
337     // Preserve error status for checks
338 #ifndef __NUITKA_NO_ASSERT__
339     NUITKA_MAY_BE_UNUSED bool had_error = ERROR_OCCURRED();
340 #endif
341  
342     // Local variable declarations.
343     struct Nuitka_FrameObject *frame_333ac64c3ce03859c9659b15c003dcc5;
344     NUITKA_MAY_BE_UNUSED char const *type_description_1 = NULL;
345     PyObject *tmp_return_value = NULL;
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     static struct Nuitka_FrameObject *cache_frame_333ac64c3ce03859c9659b15c003dcc5 = NULL;
351  
352     // Actual function code.
353     MAKE_OR_REUSE_FRAME( cache_frame_333ac64c3ce03859c9659b15c003dcc5, codeobj_333ac64c3ce03859c9659b15c003dcc5, module___main__, sizeof(void *) );
354     frame_333ac64c3ce03859c9659b15c003dcc5 = cache_frame_333ac64c3ce03859c9659b15c003dcc5;
355  
356     // Push the new frame as the currently active one.
357     pushFrameStack( frame_333ac64c3ce03859c9659b15c003dcc5 );
358  
359     // Mark the frame object as in use, ref count 1 will be up for reuse.
360     assert( Py_REFCNT( frame_333ac64c3ce03859c9659b15c003dcc5 ) == 2 ); // Frame stack
361  
362     // Framed code:
363     {
364     if ( self->m_closure[0] == NULL )
365     {
366         tmp_return_value = NULL;
367     }
368     else
369     {
370         tmp_return_value = PyCell_GET( self->m_closure[0] );
371     }
372  
373     if ( tmp_return_value == NULL )
374     {
375  
376         exception_type = PyExc_NameError;
377         Py_INCREF( exception_type );
378         exception_value = PyUnicode_FromFormat( "free variable '%s' referenced before assignment in enclosing scope", "closure_var" );
379         exception_tb = NULL;
380         NORMALIZE_EXCEPTION( &exception_type, &exception_value, &exception_tb );
381         CHAIN_EXCEPTION( exception_value );
382  
383         exception_lineno = 29;
384         type_description_1 = "c";
385         goto frame_exception_exit_1;
386     }
387  
388     Py_INCREF( tmp_return_value );
389     goto frame_return_exit_1;
390     }
391  
392 #if 0
393     RESTORE_FRAME_EXCEPTION( frame_333ac64c3ce03859c9659b15c003dcc5 );
394 #endif
395  
396     // Put the previous frame back on top.
397     popFrameStack();
398  
399     goto frame_no_exception_1;
400  
401     frame_return_exit_1:;
402 #if 0
403     RESTORE_FRAME_EXCEPTION( frame_333ac64c3ce03859c9659b15c003dcc5 );
404 #endif
405  
406     // Put the previous frame back on top.
407     popFrameStack();
408  
409     goto function_return_exit;
410  
411     frame_exception_exit_1:;
412  
413 #if 0
414     RESTORE_FRAME_EXCEPTION( frame_333ac64c3ce03859c9659b15c003dcc5 );
415 #endif
416  
417     if ( exception_tb == NULL )
418     {
419         exception_tb = MAKE_TRACEBACK( frame_333ac64c3ce03859c9659b15c003dcc5, exception_lineno );
420     }
421     else if ( exception_tb->tb_frame != &frame_333ac64c3ce03859c9659b15c003dcc5->m_frame )
422     {
423         exception_tb = ADD_TRACEBACK( exception_tb, frame_333ac64c3ce03859c9659b15c003dcc5, exception_lineno );
424     }
425  
426     // Attachs locals to frame if any.
427     Nuitka_Frame_AttachLocals(
428         (struct Nuitka_FrameObject *)frame_333ac64c3ce03859c9659b15c003dcc5,
429         type_description_1,
430         self->m_closure[0]
431     );
432  
433  
434     // Release cached frame.
435     if ( frame_333ac64c3ce03859c9659b15c003dcc5 == cache_frame_333ac64c3ce03859c9659b15c003dcc5 )
436     {
437         Py_DECREF( frame_333ac64c3ce03859c9659b15c003dcc5 );
438     }
439     cache_frame_333ac64c3ce03859c9659b15c003dcc5 = NULL;
440  
441     assertFrameObject( frame_333ac64c3ce03859c9659b15c003dcc5 );
442  
443     // Put the previous frame back on top.
444     popFrameStack();
445  
446     // Return the error.
447     goto function_exception_exit;
448  
449     frame_no_exception_1:;
450  
451  
452     // Return statement must have exited already.
453     NUITKA_CANNOT_GET_HERE( __main__$$$function_1_calledRepeatedly$$$function_1_empty );
454     return NULL;
455  
456 function_exception_exit:
457     assert( exception_type );
458     RESTORE_ERROR_OCCURRED( exception_type, exception_value, exception_tb );
459  
460     return NULL;
461 function_return_exit:
462  
463 CHECK_OBJECT( tmp_return_value );
464 assert( had_error || !ERROR_OCCURRED() );
465 return tmp_return_value;
466  
467 }
468  
469  
470 299
471 static PyObject *MAKE_FUNCTION___main__$$$function_1_calledRepeatedly(  ) 300 static PyObject *MAKE_FUNCTION___main__$$$function_1_calledRepeatedly(  )
472 { 301 {
473     struct Nuitka_FunctionObject *result = Nuitka_Function_New( 302     struct Nuitka_FunctionObject *result = Nuitka_Function_New(
474         impl___main__$$$function_1_calledRepeatedly, 303         impl___main__$$$function_1_calledRepeatedly,
483         NULL, 312         NULL,
484 #endif 313 #endif
485         module___main__, 314         module___main__,
486         NULL, 315         NULL,
487         0 316         0
t 488     ); t
489  
490     return (PyObject *)result;
491 }
492  
493  
494  
495 static PyObject *MAKE_FUNCTION___main__$$$function_1_calledRepeatedly$$$function_1_empty(  )
496 {
497     struct Nuitka_FunctionObject *result = Nuitka_Function_New(
498         impl___main__$$$function_1_calledRepeatedly$$$function_1_empty,
499         const_str_plain_empty,
500 #if PYTHON_VERSION >= 300
501         const_str_digest_30e4724e0d508bc0c811d26a46d4b6cd,
502 #endif
503         codeobj_333ac64c3ce03859c9659b15c003dcc5,
504         NULL,
505 #if PYTHON_VERSION >= 300
506         NULL,
507         NULL,
508 #endif
509         module___main__,
510         NULL,
511         1
512     ); 317     );
513 318
514     return (PyObject *)result; 319     return (PyObject *)result;
515 } 320 }
516 321