Construct FunctionCreationClosure

Performance Diagrams

Construct FunctionCreationClosure 001000000010000000200000002000000030000000300000004000000040000000CPython 2.7Nuitka (historic)Nuitka (master)Nuitka (develop)Nuitka (factory)4496563973.61538461538461274.77618027248604CPython 2.748450945196.30769230769232257.0Nuitka (historic)12702413319.0000000000001439.3289975998484Nuitka (master)12702356441.69230769230774439.3292883181599Nuitka (develop)12702342564.3846153846155439.3293597226575Nuitka (factory)Construct FunctionCreationClosureTicks Construct FunctionCreationClosure 0010000000100000002000000020000000300000003000000040000000400000005000000050000000CPython 3.5Nuitka (historic)Nuitka (master)Nuitka (develop)Nuitka (factory)5639346673.61538461538461257.0CPython 3.50196.30769230769232504.11538461538464Nuitka (historic)15896747319.0000000000001434.4560600929575Nuitka (master)15914570441.69230769230774434.3779599545478Nuitka (develop)15920087564.3846153846155434.3537845371879Nuitka (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


for x in xrange(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


for x in xrange(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 for x in xrange(50000): 38 for x in xrange(50000):

Context Diff of Generated Code


Construct
Baseline
31 PyDictObject *moduledict___main__; 31 PyDictObject *moduledict___main__;
32 32
33 /* The module constants used, if any. */ 33 /* The module constants used, if any. */
34 static PyObject *const_str_plain___package__; 34 static PyObject *const_str_plain___package__;
35 static PyObject *const_str_digest_a1f69dad3de656fdb9b5e692d8a024ee; 35 static PyObject *const_str_digest_a1f69dad3de656fdb9b5e692d8a024ee;
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;
38 extern PyObject *const_int_pos_1; 37 extern PyObject *const_int_pos_1;
39 extern PyObject *const_dict_empty; 38 extern PyObject *const_dict_empty;
40 extern PyObject *const_str_plain___file__; 39 extern PyObject *const_str_plain___file__;
41 static PyObject *const_str_plain_closure_var; 40 static PyObject *const_str_plain_closure_var;
42 extern PyObject *const_int_0; 41 extern PyObject *const_int_0;
43 static PyObject *const_tuple_str_plain_closure_var_str_plain_empty_tuple; 42 static PyObject *const_tuple_str_plain_closure_var_str_plain_empty_tuple;
44 static PyObject *const_xrange_0_50000; 43 static PyObject *const_xrange_0_50000;
45 static PyObject *const_str_plain_empty; 44 static PyObject *const_str_plain_empty;
46 extern PyObject *const_str_plain_print; 45 extern PyObject *const_str_plain_print;
n 47 static PyObject *const_str_digest_30e4724e0d508bc0c811d26a46d4b6cd; n
48 static PyObject *const_int_pos_50000; 46 static PyObject *const_int_pos_50000;
49 static PyObject *const_tuple_str_digest_5ed1392909ad16e6227b8230f4582352_tuple; 47 static PyObject *const_tuple_str_digest_5ed1392909ad16e6227b8230f4582352_tuple;
50 static PyObject *const_str_plain_calledRepeatedly; 48 static PyObject *const_str_plain_calledRepeatedly;
51 static PyObject *const_str_angle_module; 49 static PyObject *const_str_angle_module;
52 static PyObject *const_str_plain_x; 50 static PyObject *const_str_plain_x;
62 60
63 static void createModuleConstants( void ) 61 static void createModuleConstants( void )
64 { 62 {
65     const_str_plain___package__ = UNSTREAM_STRING( &constant_bin[ 0 ], 11, 1 ); 63     const_str_plain___package__ = UNSTREAM_STRING( &constant_bin[ 0 ], 11, 1 );
66     const_str_digest_a1f69dad3de656fdb9b5e692d8a024ee = UNSTREAM_STRING( &constant_bin[ 11 ], 81, 0 ); 64     const_str_digest_a1f69dad3de656fdb9b5e692d8a024ee = UNSTREAM_STRING( &constant_bin[ 11 ], 81, 0 );
n 67     const_tuple_str_plain_closure_var_tuple = PyTuple_New( 1 ); n 65     const_str_plain_module_var = UNSTREAM_STRING( &constant_bin[ 92 ], 10, 1 );
68     const_str_plain_closure_var = UNSTREAM_STRING( &constant_bin[ 92 ], 11, 1 ); 66     const_str_plain_closure_var = UNSTREAM_STRING( &constant_bin[ 102 ], 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( &constant_bin[ 103 ], 10, 1 );
71     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 );
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 ); 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 );
73     const_str_plain_empty = UNSTREAM_STRING( &constant_bin[ 113 ], 5, 1 ); 69     const_str_plain_empty = UNSTREAM_STRING( &constant_bin[ 113 ], 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 ); 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 );
75     const_int_pos_50000 = PyLong_FromUnsignedLong( 50000ul ); 71     const_int_pos_50000 = PyLong_FromUnsignedLong( 50000ul );
76     const_xrange_0_50000 = BUILTIN_XRANGE3( const_int_0, const_int_pos_50000, const_int_pos_1 ); 72     const_xrange_0_50000 = BUILTIN_XRANGE3( const_int_0, const_int_pos_50000, const_int_pos_1 );
n 77     const_str_digest_30e4724e0d508bc0c811d26a46d4b6cd = UNSTREAM_STRING( &constant_bin[ 118 ], 31, 0 ); n
78     const_tuple_str_digest_5ed1392909ad16e6227b8230f4582352_tuple = PyTuple_New( 1 ); 73     const_tuple_str_digest_5ed1392909ad16e6227b8230f4582352_tuple = PyTuple_New( 1 );
n 79     const_str_digest_5ed1392909ad16e6227b8230f4582352 = UNSTREAM_STRING( &constant_bin[ 149 ], 3, 0 ); n 74     const_str_digest_5ed1392909ad16e6227b8230f4582352 = UNSTREAM_STRING( &constant_bin[ 118 ], 3, 0 );
80     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 81     const_str_plain_calledRepeatedly = UNSTREAM_STRING( &constant_bin[ 118 ], 16, 1 ); n 76     const_str_plain_calledRepeatedly = UNSTREAM_STRING( &constant_bin[ 121 ], 16, 1 );
82     const_str_angle_module = UNSTREAM_STRING( &constant_bin[ 152 ], 8, 0 ); 77     const_str_angle_module = UNSTREAM_STRING( &constant_bin[ 137 ], 8, 0 );
83     const_str_plain_x = UNSTREAM_STRING( &constant_bin[ 36 ], 1, 1 ); 78     const_str_plain_x = UNSTREAM_STRING( &constant_bin[ 36 ], 1, 1 );
84 79
85     constants_created = true; 80     constants_created = true;
86 } 81 }
87 82
96 #endif 91 #endif
97 92
98 // The module code objects. 93 // The module code objects.
99 static PyCodeObject *codeobj_3c3cf372c8a3ec71f6e872196c7f12d8; 94 static PyCodeObject *codeobj_3c3cf372c8a3ec71f6e872196c7f12d8;
100 static PyCodeObject *codeobj_0d224960319a91b6f75f882331312956; 95 static PyCodeObject *codeobj_0d224960319a91b6f75f882331312956;
n 101 static PyCodeObject *codeobj_a91b7d38ea594de4fb9471a9ccfe9e1c; n
102 /* For use in MainProgram.cpp. */ 96 /* For use in MainProgram.cpp. */
103 PyCodeObject *codeobj_main = NULL; 97 PyCodeObject *codeobj_main = NULL;
104 98
105 static void createModuleCodeObjects(void) 99 static void createModuleCodeObjects(void)
106 { 100 {
107     module_filename_obj = const_str_digest_a1f69dad3de656fdb9b5e692d8a024ee; 101     module_filename_obj = const_str_digest_a1f69dad3de656fdb9b5e692d8a024ee;
108     codeobj_3c3cf372c8a3ec71f6e872196c7f12d8 = MAKE_CODEOBJ( module_filename_obj, const_str_angle_module, 1, const_tuple_empty, 0, 0, CO_NOFREE ); 102     codeobj_3c3cf372c8a3ec71f6e872196c7f12d8 = MAKE_CODEOBJ( module_filename_obj, const_str_angle_module, 1, const_tuple_empty, 0, 0, CO_NOFREE );
109     codeobj_main = codeobj_3c3cf372c8a3ec71f6e872196c7f12d8; 103     codeobj_main = codeobj_3c3cf372c8a3ec71f6e872196c7f12d8;
110     codeobj_0d224960319a91b6f75f882331312956 = 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 ); 104     codeobj_0d224960319a91b6f75f882331312956 = 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 111     codeobj_a91b7d38ea594de4fb9471a9ccfe9e1c = MAKE_CODEOBJ( module_filename_obj, const_str_plain_empty, 28, const_tuple_str_plain_closure_var_tuple, 0, 0, CO_OPTIMIZED | CO_NEWLOCALS ); n
112 } 105 }
113 106
114 // The module function declarations. 107 // The module function declarations.
115 static PyObject *MAKE_FUNCTION___main__$$$function_1_calledRepeatedly(  ); 108 static PyObject *MAKE_FUNCTION___main__$$$function_1_calledRepeatedly(  );
n 116   n
117  
118 static PyObject *MAKE_FUNCTION___main__$$$function_1_calledRepeatedly$$$function_1_empty( struct Nuitka_CellObject *closure_closure_var );
119 109
120 110
121 // The module function definitions. 111 // The module function definitions.
122 static PyObject *impl___main__$$$function_1_calledRepeatedly( struct Nuitka_FunctionObject const *self, PyObject **python_pars ) 112 static PyObject *impl___main__$$$function_1_calledRepeatedly( struct Nuitka_FunctionObject const *self, PyObject **python_pars )
123 { 113 {
125 #ifndef __NUITKA_NO_ASSERT__ 115 #ifndef __NUITKA_NO_ASSERT__
126     NUITKA_MAY_BE_UNUSED bool had_error = ERROR_OCCURRED(); 116     NUITKA_MAY_BE_UNUSED bool had_error = ERROR_OCCURRED();
127 #endif 117 #endif
128 118
129     // Local variable declarations. 119     // Local variable declarations.
n 130     struct Nuitka_CellObject *var_closure_var = PyCell_EMPTY(); n
131     PyObject *var_empty = NULL; 120     PyObject *var_closure_var = NULL;
132     PyObject *exception_type = NULL, *exception_value = NULL; 121     PyObject *exception_type = NULL, *exception_value = NULL;
133     PyTracebackObject *exception_tb = NULL; 122     PyTracebackObject *exception_tb = NULL;
134     NUITKA_MAY_BE_UNUSED int exception_lineno = -1; 123     NUITKA_MAY_BE_UNUSED int exception_lineno = -1;
135     PyObject *exception_keeper_type_1; 124     PyObject *exception_keeper_type_1;
136     PyObject *exception_keeper_value_1; 125     PyObject *exception_keeper_value_1;
137     PyTracebackObject *exception_keeper_tb_1; 126     PyTracebackObject *exception_keeper_tb_1;
138     NUITKA_MAY_BE_UNUSED int exception_keeper_lineno_1; 127     NUITKA_MAY_BE_UNUSED int exception_keeper_lineno_1;
139     PyObject *tmp_assign_source_1; 128     PyObject *tmp_assign_source_1;
n 140     PyObject *tmp_assign_source_2; n
141     PyObject *tmp_frame_locals; 129     PyObject *tmp_frame_locals;
142     PyObject *tmp_return_value; 130     PyObject *tmp_return_value;
143     PyObject *tmp_tuple_element_1; 131     PyObject *tmp_tuple_element_1;
144     static PyFrameObject *cache_frame_function = NULL; 132     static PyFrameObject *cache_frame_function = NULL;
145 133
183 171
184         exception_lineno = 25; 172         exception_lineno = 25;
185         goto frame_exception_exit_1; 173         goto frame_exception_exit_1;
186     } 174     }
187 175
n 188     { n 176     assert( var_closure_var == NULL );
189         PyObject *old = PyCell_GET( var_closure_var );
190         PyCell_SET( var_closure_var, tmp_assign_source_1 );
191         Py_INCREF( tmp_assign_source_1 ); 177     Py_INCREF( tmp_assign_source_1 );
192         Py_XDECREF( old ); 178     var_closure_var = tmp_assign_source_1;
193     }
194 179
195 180
196 #if 0 181 #if 0
197     RESTORE_FRAME_EXCEPTION( frame_function ); 182     RESTORE_FRAME_EXCEPTION( frame_function );
198 #endif 183 #endif
228 213
229         if (needs_detach) 214         if (needs_detach)
230         { 215         {
231 216
232             tmp_frame_locals = PyDict_New(); 217             tmp_frame_locals = PyDict_New();
n 233             if ( var_closure_var->ob_ref ) n 218             if ( var_closure_var )
234             { 219             {
235                 int res = PyDict_SetItem( 220                 int res = PyDict_SetItem(
236                     tmp_frame_locals, 221                     tmp_frame_locals,
237                     const_str_plain_closure_var, 222                     const_str_plain_closure_var,
n 238                     var_closure_var->ob_ref n 223                     var_closure_var
239                 ); 224                 );
240 225
241                 assert( res == 0 ); 226                 assert( res == 0 );
242             } 227             }
243 228
n 244             if ( var_empty ) n
245             {
246                 int res = PyDict_SetItem(
247                     tmp_frame_locals,
248                     const_str_plain_empty,
249                     var_empty
250                 );
251  
252                 assert( res == 0 );
253             }
254  
255 229
256 230
257             detachFrame( exception_tb, tmp_frame_locals ); 231             detachFrame( exception_tb, tmp_frame_locals );
258         } 232         }
259     } 233     }
268     // Return the error. 242     // Return the error.
269     goto try_except_handler_1; 243     goto try_except_handler_1;
270 244
271     frame_no_exception_1:; 245     frame_no_exception_1:;
272 246
n 273     tmp_assign_source_2 = MAKE_FUNCTION___main__$$$function_1_calledRepeatedly$$$function_1_empty( var_closure_var ); n
274     assert( var_empty == NULL );
275     var_empty = tmp_assign_source_2;
276  
277     tmp_return_value = PyTuple_New( 2 ); 247     tmp_return_value = PyTuple_New( 2 );
n 278     tmp_tuple_element_1 = var_empty; n 248     tmp_tuple_element_1 = const_int_pos_1;
279  
280     Py_INCREF( tmp_tuple_element_1 ); 249     Py_INCREF( tmp_tuple_element_1 );
281     PyTuple_SET_ITEM( tmp_return_value, 0, tmp_tuple_element_1 ); 250     PyTuple_SET_ITEM( tmp_return_value, 0, tmp_tuple_element_1 );
n 282     tmp_tuple_element_1 = PyCell_GET( var_closure_var ); n 251     tmp_tuple_element_1 = var_closure_var;
283  
284     if ( tmp_tuple_element_1 == NULL )
285     {
286         Py_DECREF( tmp_return_value );
287         exception_type = PyExc_UnboundLocalError;
288         Py_INCREF( exception_type );
289         exception_value = PyUnicode_FromFormat( "local variable '%s' referenced before assignment", "closure_var" );
290         exception_tb = NULL;
291         NORMALIZE_EXCEPTION( &exception_type, &exception_value, &exception_tb );
292         CHAIN_EXCEPTION( exception_value );
293  
294  
295         goto try_except_handler_1;
296     }
297 252
298     Py_INCREF( tmp_tuple_element_1 ); 253     Py_INCREF( tmp_tuple_element_1 );
299     PyTuple_SET_ITEM( tmp_return_value, 1, tmp_tuple_element_1 ); 254     PyTuple_SET_ITEM( tmp_return_value, 1, tmp_tuple_element_1 );
300     goto try_return_handler_1; 255     goto try_return_handler_1;
301     // tried codes exits in all cases 256     // tried codes exits in all cases
305     try_return_handler_1:; 260     try_return_handler_1:;
306     CHECK_OBJECT( (PyObject *)var_closure_var ); 261     CHECK_OBJECT( (PyObject *)var_closure_var );
307     Py_DECREF( var_closure_var ); 262     Py_DECREF( var_closure_var );
308     var_closure_var = NULL; 263     var_closure_var = NULL;
309 264
n 310     Py_XDECREF( var_empty ); n
311     var_empty = NULL;
312  
313     goto function_return_exit; 265     goto function_return_exit;
314     // Exception handler code: 266     // Exception handler code:
315     try_except_handler_1:; 267     try_except_handler_1:;
316     exception_keeper_type_1 = exception_type; 268     exception_keeper_type_1 = exception_type;
317     exception_keeper_value_1 = exception_value; 269     exception_keeper_value_1 = exception_value;
347     return tmp_return_value; 299     return tmp_return_value;
348 300
349 } 301 }
350 302
351 303
n 352 static PyObject *impl___main__$$$function_1_calledRepeatedly$$$function_1_empty( struct Nuitka_FunctionObject const *self, PyObject **python_pars ) n
353 {
354     // Preserve error status for checks
355 #ifndef __NUITKA_NO_ASSERT__
356     NUITKA_MAY_BE_UNUSED bool had_error = ERROR_OCCURRED();
357 #endif
358  
359     // Local variable declarations.
360     PyObject *exception_type = NULL, *exception_value = NULL;
361     PyTracebackObject *exception_tb = NULL;
362     NUITKA_MAY_BE_UNUSED int exception_lineno = -1;
363     PyObject *tmp_frame_locals;
364     PyObject *tmp_return_value;
365     static PyFrameObject *cache_frame_function = NULL;
366  
367     PyFrameObject *frame_function;
368  
369     tmp_return_value = NULL;
370  
371     // Actual function code.
372     MAKE_OR_REUSE_FRAME( cache_frame_function, codeobj_a91b7d38ea594de4fb9471a9ccfe9e1c, module___main__ );
373     frame_function = cache_frame_function;
374  
375     // Push the new frame as the currently active one.
376     pushFrameStack( frame_function );
377  
378     // Mark the frame object as in use, ref count 1 will be up for reuse.
379     Py_INCREF( frame_function );
380     assert( Py_REFCNT( frame_function ) == 2 ); // Frame stack
381  
382 #if PYTHON_VERSION >= 340
383     frame_function->f_executing += 1;
384 #endif
385  
386     // Framed code:
387     tmp_return_value = PyCell_GET( self->m_closure[0] );
388  
389     if ( tmp_return_value == NULL )
390     {
391  
392         exception_type = PyExc_NameError;
393         Py_INCREF( exception_type );
394         exception_value = PyUnicode_FromFormat( "free variable '%s' referenced before assignment in enclosing scope", "closure_var" );
395         exception_tb = NULL;
396         NORMALIZE_EXCEPTION( &exception_type, &exception_value, &exception_tb );
397         CHAIN_EXCEPTION( exception_value );
398  
399         exception_lineno = 29;
400         goto frame_exception_exit_1;
401     }
402  
403     Py_INCREF( tmp_return_value );
404     goto frame_return_exit_1;
405  
406 #if 0
407     RESTORE_FRAME_EXCEPTION( frame_function );
408 #endif
409     // Put the previous frame back on top.
410     popFrameStack();
411 #if PYTHON_VERSION >= 340
412     frame_function->f_executing -= 1;
413 #endif
414     Py_DECREF( frame_function );
415     goto frame_no_exception_1;
416  
417     frame_return_exit_1:;
418 #if 0
419     RESTORE_FRAME_EXCEPTION( frame_function );
420 #endif
421     popFrameStack();
422 #if PYTHON_VERSION >= 340
423     frame_function->f_executing -= 1;
424 #endif
425     Py_DECREF( frame_function );
426     goto function_return_exit;
427  
428     frame_exception_exit_1:;
429 #if 0
430     RESTORE_FRAME_EXCEPTION( frame_function );
431 #endif
432  
433     {
434         bool needs_detach = false;
435  
436         if ( exception_tb == NULL )
437         {
438             exception_tb = MAKE_TRACEBACK( frame_function, exception_lineno );
439             needs_detach = true;
440         }
441         else if ( exception_lineno != -1 )
442         {
443             PyTracebackObject *traceback_new = MAKE_TRACEBACK( frame_function, exception_lineno );
444             traceback_new->tb_next = exception_tb;
445             exception_tb = traceback_new;
446  
447             needs_detach = true;
448         }
449  
450         if (needs_detach)
451         {
452  
453             tmp_frame_locals = PyDict_New();
454             if ( self->m_closure[0]->ob_ref )
455             {
456                 int res = PyDict_SetItem(
457                     tmp_frame_locals,
458                     const_str_plain_closure_var,
459                     self->m_closure[0]->ob_ref
460                 );
461  
462                 assert( res == 0 );
463             }
464  
465  
466  
467             detachFrame( exception_tb, tmp_frame_locals );
468         }
469     }
470  
471     popFrameStack();
472  
473 #if PYTHON_VERSION >= 340
474     frame_function->f_executing -= 1;
475 #endif
476     Py_DECREF( frame_function );
477  
478     // Return the error.
479     goto function_exception_exit;
480  
481     frame_no_exception_1:;
482  
483  
484     // Return statement must have exited already.
485     NUITKA_CANNOT_GET_HERE( __main__$$$function_1_calledRepeatedly$$$function_1_empty );
486     return NULL;
487  
488 function_exception_exit:
489     assert( exception_type );
490     RESTORE_ERROR_OCCURRED( exception_type, exception_value, exception_tb );
491  
492     return NULL;
493     function_return_exit:
494  
495     CHECK_OBJECT( tmp_return_value );
496     assert( had_error || !ERROR_OCCURRED() );
497     return tmp_return_value;
498  
499 }
500  
501  
502 304
503 static PyObject *MAKE_FUNCTION___main__$$$function_1_calledRepeatedly(  ) 305 static PyObject *MAKE_FUNCTION___main__$$$function_1_calledRepeatedly(  )
504 { 306 {
505     struct Nuitka_FunctionObject *result = Nuitka_Function_New( 307     struct Nuitka_FunctionObject *result = Nuitka_Function_New(
506         impl___main__$$$function_1_calledRepeatedly, 308         impl___main__$$$function_1_calledRepeatedly,
517         module___main__, 319         module___main__,
518         Py_None, 320         Py_None,
519         0 321         0
520     ); 322     );
521 323
t 522   t
523     return (PyObject *)result;
524 }
525  
526  
527  
528 static PyObject *MAKE_FUNCTION___main__$$$function_1_calledRepeatedly$$$function_1_empty( struct Nuitka_CellObject *closure_closure_var )
529 {
530     struct Nuitka_FunctionObject *result = Nuitka_Function_New(
531         impl___main__$$$function_1_calledRepeatedly$$$function_1_empty,
532         const_str_plain_empty,
533 #if PYTHON_VERSION >= 330
534         const_str_digest_30e4724e0d508bc0c811d26a46d4b6cd,
535 #endif
536         codeobj_a91b7d38ea594de4fb9471a9ccfe9e1c,
537         NULL,
538 #if PYTHON_VERSION >= 300
539         NULL,
540         const_dict_empty,
541 #endif
542         module___main__,
543         Py_None,
544         1
545     );
546  
547 result->m_closure[0] = closure_closure_var;
548 Py_INCREF( result->m_closure[0] );
549 324
550     return (PyObject *)result; 325     return (PyObject *)result;
551 } 326 }
552 327
553 328