Construct FunctionCreationClosure

Performance Diagrams

Construct FunctionCreationClosure 001000000010000000200000002000000030000000300000004000000040000000CPython 2.7Nuitka (historic)Nuitka (master)Nuitka (develop)Nuitka (factory)4496563973.61538461538461274.77618027248604CPython 2.748450945196.30769230769232257.0Nuitka (historic)12702348319.0000000000001439.32932912072994Nuitka (master)12702355441.69230769230774439.32929341848114Nuitka (develop)12652522564.3846153846155439.58345772758884Nuitka (factory)Construct FunctionCreationClosureTicks Construct FunctionCreationClosure 0010000000100000002000000020000000300000003000000040000000400000005000000050000000CPython 3.5Nuitka (historic)Nuitka (master)Nuitka (develop)Nuitka (factory)5639346673.61538461538461257.0CPython 3.50196.30769230769232504.11538461538464Nuitka (historic)15921549319.0000000000001434.34737807349745Nuitka (master)15908066441.69230769230774434.4064603921967Nuitka (develop)15846262564.3846153846155434.677284661639Nuitka (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
30 PyObject *module___main__; 30 PyObject *module___main__;
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__;
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;
37 static PyObject *const_str_digest_f6f028a91035854e90a5c22ffdd5b498; 36 static PyObject *const_str_digest_f6f028a91035854e90a5c22ffdd5b498;
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__;
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;
61 static bool constants_created = false; 59 static bool constants_created = false;
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 );
n 66     const_tuple_str_plain_closure_var_tuple = PyTuple_New( 1 ); n
67     const_str_plain_closure_var = UNSTREAM_STRING( &constant_bin[ 11 ], 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[ 22 ], 10, 1 ); 64     const_str_plain_module_var = UNSTREAM_STRING( &constant_bin[ 11 ], 10, 1 );
70     const_str_digest_f6f028a91035854e90a5c22ffdd5b498 = UNSTREAM_STRING( &constant_bin[ 32 ], 81, 0 ); 65     const_str_digest_f6f028a91035854e90a5c22ffdd5b498 = UNSTREAM_STRING( &constant_bin[ 21 ], 81, 0 );
66     const_str_plain_closure_var = UNSTREAM_STRING( &constant_bin[ 102 ], 11, 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[ 57 ], 1, 1 ); 78     const_str_plain_x = UNSTREAM_STRING( &constant_bin[ 46 ], 1, 1 );
84 79
85     constants_created = true; 80     constants_created = true;
86 } 81 }
87 82
88 #ifndef __NUITKA_NO_ASSERT__ 83 #ifndef __NUITKA_NO_ASSERT__
96 #endif 91 #endif
97 92
98 // The module code objects. 93 // The module code objects.
99 static PyCodeObject *codeobj_fc9466828fa22ba16935686fe1532224; 94 static PyCodeObject *codeobj_fc9466828fa22ba16935686fe1532224;
100 static PyCodeObject *codeobj_d9ec18a14fb8a15caf3729f42b9589aa; 95 static PyCodeObject *codeobj_d9ec18a14fb8a15caf3729f42b9589aa;
n 101 static PyCodeObject *codeobj_4052fbbf7dbf9dc5054733741283abaf; n
102 /* For use in "MainProgram.c". */ 96 /* For use in "MainProgram.c". */
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_f6f028a91035854e90a5c22ffdd5b498; 101     module_filename_obj = const_str_digest_f6f028a91035854e90a5c22ffdd5b498;
108     codeobj_fc9466828fa22ba16935686fe1532224 = MAKE_CODEOBJ( module_filename_obj, const_str_angle_module, 1, const_tuple_empty, 0, 0, CO_NOFREE ); 102     codeobj_fc9466828fa22ba16935686fe1532224 = MAKE_CODEOBJ( module_filename_obj, const_str_angle_module, 1, const_tuple_empty, 0, 0, CO_NOFREE );
109     codeobj_main = codeobj_fc9466828fa22ba16935686fe1532224; 103     codeobj_main = codeobj_fc9466828fa22ba16935686fe1532224;
110     codeobj_d9ec18a14fb8a15caf3729f42b9589aa = 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_d9ec18a14fb8a15caf3729f42b9589aa = 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_4052fbbf7dbf9dc5054733741283abaf = 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_return_value; 129     PyObject *tmp_return_value;
142     PyObject *tmp_tuple_element_1; 130     PyObject *tmp_tuple_element_1;
143     static struct Nuitka_FrameObject *cache_frame_function = NULL; 131     static struct Nuitka_FrameObject *cache_frame_function = NULL;
144 132
145     struct Nuitka_FrameObject *frame_function; 133     struct Nuitka_FrameObject *frame_function;
147     char const *type_description; 135     char const *type_description;
148     tmp_return_value = NULL; 136     tmp_return_value = NULL;
149 137
150     // Actual function code. 138     // Actual function code.
151     // Tried code: 139     // Tried code:
n 152     MAKE_OR_REUSE_FRAME( cache_frame_function, codeobj_d9ec18a14fb8a15caf3729f42b9589aa, module___main__, sizeof(struct Nuitka_CellObject *)+sizeof(PyObject *) ); n 140     MAKE_OR_REUSE_FRAME( cache_frame_function, codeobj_d9ec18a14fb8a15caf3729f42b9589aa, module___main__, sizeof(void *)+sizeof(PyObject *) );
153     frame_function = cache_frame_function; 141     frame_function = cache_frame_function;
154 142
155     // Push the new frame as the currently active one. 143     // Push the new frame as the currently active one.
156     pushFrameStack( frame_function ); 144     pushFrameStack( frame_function );
157 145
175         exception_tb = NULL; 163         exception_tb = NULL;
176         NORMALIZE_EXCEPTION( &exception_type, &exception_value, &exception_tb ); 164         NORMALIZE_EXCEPTION( &exception_type, &exception_value, &exception_tb );
177         CHAIN_EXCEPTION( exception_value ); 165         CHAIN_EXCEPTION( exception_value );
178 166
179         exception_lineno = 25; 167         exception_lineno = 25;
n 180         type_description = "co"; n 168         type_description = "oN";
181         goto frame_exception_exit_1; 169         goto frame_exception_exit_1;
182     } 170     }
183 171
n 184     { n 172     assert( var_closure_var == NULL );
185         PyObject *old = PyCell_GET( var_closure_var );
186         PyCell_SET( var_closure_var, tmp_assign_source_1 );
187         Py_INCREF( tmp_assign_source_1 ); 173     Py_INCREF( tmp_assign_source_1 );
188         Py_XDECREF( old ); 174     var_closure_var = tmp_assign_source_1;
189     }
190 175
191 176
192 #if 0 177 #if 0
193     RESTORE_FRAME_EXCEPTION( frame_function ); 178     RESTORE_FRAME_EXCEPTION( frame_function );
194 #endif 179 #endif
211     else if ( exception_tb->tb_frame != &frame_function->m_frame ) 196     else if ( exception_tb->tb_frame != &frame_function->m_frame )
212     { 197     {
213         exception_tb = ADD_TRACEBACK( exception_tb, frame_function, exception_lineno ); 198         exception_tb = ADD_TRACEBACK( exception_tb, frame_function, exception_lineno );
214     } 199     }
215 200
n 216     Nuitka_Frame_AttachLocals( (struct Nuitka_FrameObject *)frame_function, type_description ,var_closure_var, var_empty ); n 201     Nuitka_Frame_AttachLocals( (struct Nuitka_FrameObject *)frame_function, type_description ,var_closure_var, NULL );
217 202
218     // Release cached frame. 203     // Release cached frame.
219     if ( frame_function == cache_frame_function ) 204     if ( frame_function == cache_frame_function )
220     { 205     {
221         Py_DECREF( frame_function ); 206         Py_DECREF( frame_function );
231     // Return the error. 216     // Return the error.
232     goto try_except_handler_1; 217     goto try_except_handler_1;
233 218
234     frame_no_exception_1:; 219     frame_no_exception_1:;
235 220
n 236     tmp_assign_source_2 = MAKE_FUNCTION___main__$$$function_1_calledRepeatedly$$$function_1_empty( var_closure_var ); n
237     assert( var_empty == NULL );
238     var_empty = tmp_assign_source_2;
239  
240     tmp_return_value = PyTuple_New( 2 ); 221     tmp_return_value = PyTuple_New( 2 );
n 241     tmp_tuple_element_1 = var_empty; n 222     tmp_tuple_element_1 = const_int_pos_1;
242  
243     Py_INCREF( tmp_tuple_element_1 ); 223     Py_INCREF( tmp_tuple_element_1 );
244     PyTuple_SET_ITEM( tmp_return_value, 0, tmp_tuple_element_1 ); 224     PyTuple_SET_ITEM( tmp_return_value, 0, tmp_tuple_element_1 );
n 245     tmp_tuple_element_1 = PyCell_GET( var_closure_var ); n 225     tmp_tuple_element_1 = var_closure_var;
246  
247     if ( tmp_tuple_element_1 == NULL )
248     {
249         Py_DECREF( tmp_return_value );
250         exception_type = PyExc_UnboundLocalError;
251         Py_INCREF( exception_type );
252         exception_value = PyUnicode_FromFormat( "local variable '%s' referenced before assignment", "closure_var" );
253         exception_tb = NULL;
254         NORMALIZE_EXCEPTION( &exception_type, &exception_value, &exception_tb );
255         CHAIN_EXCEPTION( exception_value );
256  
257  
258  
259         goto try_except_handler_1;
260     }
261 226
262     Py_INCREF( tmp_tuple_element_1 ); 227     Py_INCREF( tmp_tuple_element_1 );
263     PyTuple_SET_ITEM( tmp_return_value, 1, tmp_tuple_element_1 ); 228     PyTuple_SET_ITEM( tmp_return_value, 1, tmp_tuple_element_1 );
264     goto try_return_handler_1; 229     goto try_return_handler_1;
265     // tried codes exits in all cases 230     // tried codes exits in all cases
269     try_return_handler_1:; 234     try_return_handler_1:;
270     CHECK_OBJECT( (PyObject *)var_closure_var ); 235     CHECK_OBJECT( (PyObject *)var_closure_var );
271     Py_DECREF( var_closure_var ); 236     Py_DECREF( var_closure_var );
272     var_closure_var = NULL; 237     var_closure_var = NULL;
273 238
n 274     Py_XDECREF( var_empty ); n
275     var_empty = NULL;
276  
277     goto function_return_exit; 239     goto function_return_exit;
278     // Exception handler code: 240     // Exception handler code:
279     try_except_handler_1:; 241     try_except_handler_1:;
280     exception_keeper_type_1 = exception_type; 242     exception_keeper_type_1 = exception_type;
281     exception_keeper_value_1 = exception_value; 243     exception_keeper_value_1 = exception_value;
311     return tmp_return_value; 273     return tmp_return_value;
312 274
313 } 275 }
314 276
315 277
n 316 static PyObject *impl___main__$$$function_1_calledRepeatedly$$$function_1_empty( struct Nuitka_FunctionObject const *self, PyObject **python_pars ) n
317 {
318     // Preserve error status for checks
319 #ifndef __NUITKA_NO_ASSERT__
320     NUITKA_MAY_BE_UNUSED bool had_error = ERROR_OCCURRED();
321 #endif
322  
323     // Local variable declarations.
324     PyObject *exception_type = NULL, *exception_value = NULL;
325     PyTracebackObject *exception_tb = NULL;
326     NUITKA_MAY_BE_UNUSED int exception_lineno = -1;
327     PyObject *tmp_return_value;
328     static struct Nuitka_FrameObject *cache_frame_function = NULL;
329  
330     struct Nuitka_FrameObject *frame_function;
331  
332     char const *type_description;
333     tmp_return_value = NULL;
334  
335     // Actual function code.
336     MAKE_OR_REUSE_FRAME( cache_frame_function, codeobj_4052fbbf7dbf9dc5054733741283abaf, module___main__, sizeof(struct Nuitka_CellObject *) );
337     frame_function = cache_frame_function;
338  
339     // Push the new frame as the currently active one.
340     pushFrameStack( frame_function );
341  
342     // Mark the frame object as in use, ref count 1 will be up for reuse.
343     assert( Py_REFCNT( frame_function ) == 2 ); // Frame stack
344  
345     // Framed code:
346     tmp_return_value = PyCell_GET( self->m_closure[0] );
347  
348     if ( tmp_return_value == NULL )
349     {
350  
351         exception_type = PyExc_NameError;
352         Py_INCREF( exception_type );
353         exception_value = PyUnicode_FromFormat( "free variable '%s' referenced before assignment in enclosing scope", "closure_var" );
354         exception_tb = NULL;
355         NORMALIZE_EXCEPTION( &exception_type, &exception_value, &exception_tb );
356         CHAIN_EXCEPTION( exception_value );
357  
358         exception_lineno = 29;
359         type_description = "c";
360         goto frame_exception_exit_1;
361     }
362  
363     Py_INCREF( tmp_return_value );
364     goto frame_return_exit_1;
365  
366 #if 0
367     RESTORE_FRAME_EXCEPTION( frame_function );
368 #endif
369  
370     // Put the previous frame back on top.
371     popFrameStack();
372  
373     goto frame_no_exception_1;
374  
375     frame_return_exit_1:;
376 #if 0
377     RESTORE_FRAME_EXCEPTION( frame_function );
378 #endif
379  
380     // Put the previous frame back on top.
381     popFrameStack();
382  
383     goto function_return_exit;
384  
385     frame_exception_exit_1:;
386  
387 #if 0
388     RESTORE_FRAME_EXCEPTION( frame_function );
389 #endif
390  
391     if ( exception_tb == NULL )
392     {
393         exception_tb = MAKE_TRACEBACK( frame_function, exception_lineno );
394     }
395     else if ( exception_tb->tb_frame != &frame_function->m_frame )
396     {
397         exception_tb = ADD_TRACEBACK( exception_tb, frame_function, exception_lineno );
398     }
399  
400     Nuitka_Frame_AttachLocals( (struct Nuitka_FrameObject *)frame_function, type_description ,self->m_closure[0] );
401  
402     // Release cached frame.
403     if ( frame_function == cache_frame_function )
404     {
405         Py_DECREF( frame_function );
406     }
407     cache_frame_function = NULL;
408  
409     assertFrameObject( frame_function );
410  
411  
412     // Put the previous frame back on top.
413     popFrameStack();
414  
415     // Return the error.
416     goto function_exception_exit;
417  
418     frame_no_exception_1:;
419  
420  
421     // Return statement must have exited already.
422     NUITKA_CANNOT_GET_HERE( __main__$$$function_1_calledRepeatedly$$$function_1_empty );
423     return NULL;
424  
425 function_exception_exit:
426     assert( exception_type );
427     RESTORE_ERROR_OCCURRED( exception_type, exception_value, exception_tb );
428  
429     return NULL;
430     function_return_exit:
431  
432     CHECK_OBJECT( tmp_return_value );
433     assert( had_error || !ERROR_OCCURRED() );
434     return tmp_return_value;
435  
436 }
437  
438  
439 278
440 static PyObject *MAKE_FUNCTION___main__$$$function_1_calledRepeatedly(  ) 279 static PyObject *MAKE_FUNCTION___main__$$$function_1_calledRepeatedly(  )
441 { 280 {
442     struct Nuitka_FunctionObject *result = Nuitka_Function_New( 281     struct Nuitka_FunctionObject *result = Nuitka_Function_New(
443         impl___main__$$$function_1_calledRepeatedly, 282         impl___main__$$$function_1_calledRepeatedly,
454         module___main__, 293         module___main__,
455         Py_None, 294         Py_None,
456         0 295         0
457     ); 296     );
458 297
t 459   t
460     return (PyObject *)result;
461 }
462  
463  
464  
465 static PyObject *MAKE_FUNCTION___main__$$$function_1_calledRepeatedly$$$function_1_empty( struct Nuitka_CellObject *closure_closure_var )
466 {
467     struct Nuitka_FunctionObject *result = Nuitka_Function_New(
468         impl___main__$$$function_1_calledRepeatedly$$$function_1_empty,
469         const_str_plain_empty,
470 #if PYTHON_VERSION >= 330
471         const_str_digest_30e4724e0d508bc0c811d26a46d4b6cd,
472 #endif
473         codeobj_4052fbbf7dbf9dc5054733741283abaf,
474         NULL,
475 #if PYTHON_VERSION >= 300
476         NULL,
477         const_dict_empty,
478 #endif
479         module___main__,
480         Py_None,
481         1
482     );
483  
484 result->m_closure[0] = closure_closure_var;
485 Py_INCREF( result->m_closure[0] );
486 298
487     return (PyObject *)result; 299     return (PyObject *)result;
488 } 300 }
489 301
490 302