Construct CallCompiledFunctionPosArgsDefaults

Performance Diagrams

Construct CallCompiledFunctionPosArgsDefaults 002000000020000000400000004000000060000000600000008000000080000000100000000100000000120000000120000000140000000140000000160000000160000000180000000180000000200000000200000000CPython 2.7Nuitka (master)Nuitka (develop)Nuitka (factory)20189841688.11538461538461257.0CPython 2.764251101240.03846153846155425.47467088350015Nuitka (master)64251107391.96153846153845425.47466353974613Nuitka (develop)64250525543.8846153846154425.47537588388775Nuitka (factory)Construct CallCompiledFunctionPosArgsDefaultsTicks Construct CallCompiledFunctionPosArgsDefaults 002000000020000000400000004000000060000000600000008000000080000000100000000100000000120000000120000000140000000140000000160000000160000000180000000180000000200000000200000000CPython 3.5Nuitka (master)Nuitka (develop)Nuitka (factory)20284130688.11538461538461257.0CPython 3.573063818240.03846153846155415.1039606476329Nuitka (master)73050649391.96153846153845415.12000403920916Nuitka (develop)73050735543.8846153846154415.1198992680287Nuitka (factory)Construct CallCompiledFunctionPosArgsDefaultsTicks

Source Code with Construct

from __future__ import print_function

def compiled_func(a = 1,b = 2,c = 3,d = 4,e = 5,f = 6):
    return a, b, c, d, e, f

def calledRepeatedly():
    # This is supposed to make a call to a non-compiled function, which is
    # being optimized separately.
# construct_begin
    compiled_func()
    compiled_func()
    compiled_func()
# construct_alternative



import itertools
for x in itertools.repeat(None, 50000):
    calledRepeatedly()

print("OK.")

Source Code without Construct

from __future__ import print_function

def compiled_func(a = 1,b = 2,c = 3,d = 4,e = 5,f = 6):
    return a, b, c, d, e, f

def calledRepeatedly():
    # This is supposed to make a call to a non-compiled function, which is
    # being optimized separately.
# construct_begin



# construct_alternative
    pass
# construct_end

import itertools
for x in itertools.repeat(None, 50000):
    calledRepeatedly()

print("OK.")

Context Diff of Source Code


Construct
Baseline
24 24
25 def calledRepeatedly(): 25 def calledRepeatedly():
26     # This is supposed to make a call to a non-compiled function, which is 26     # This is supposed to make a call to a non-compiled function, which is
27     # being optimized separately. 27     # being optimized separately.
28 # construct_begin 28 # construct_begin
n 29     compiled_func() n
30     compiled_func()
31     compiled_func()
32 # construct_alternative
33 29
34 30
t t 31  
32 # construct_alternative
33     pass
34 # construct_end
35 35
36 import itertools 36 import itertools
37 for x in itertools.repeat(None, 50000): 37 for x in itertools.repeat(None, 50000):
38     calledRepeatedly() 38     calledRepeatedly()
39 39

Context Diff of Generated Code


Construct
Baseline
36 static PyObject *const_tuple_d4571c3ff966778a8b3ba4a6bd66fdef_tuple; 36 static PyObject *const_tuple_d4571c3ff966778a8b3ba4a6bd66fdef_tuple;
37 static PyObject *const_str_plain_f; 37 static PyObject *const_str_plain_f;
38 extern PyObject *const_int_pos_1; 38 extern PyObject *const_int_pos_1;
39 extern PyObject *const_str_plain___file__; 39 extern PyObject *const_str_plain___file__;
40 extern PyObject *const_int_0; 40 extern PyObject *const_int_0;
n n 41 static PyObject *const_tuple_int_pos_1_int_pos_2_int_pos_3_int_pos_4_int_pos_5_int_pos_6_tuple;
42 static PyObject *const_str_plain_a;
41 static PyObject *const_str_plain_compiled_func; 43 static PyObject *const_str_plain_compiled_func;
n 42 static PyObject *const_str_plain_a; n
43 static PyObject *const_tuple_int_pos_1_int_pos_2_int_pos_3_int_pos_4_int_pos_5_int_pos_6_tuple;
44 extern PyObject *const_str_plain_print; 44 extern PyObject *const_str_plain_print;
45 static PyObject *const_int_pos_50000; 45 static PyObject *const_int_pos_50000;
46 static PyObject *const_int_pos_3; 46 static PyObject *const_int_pos_3;
47 static PyObject *const_tuple_str_digest_5ed1392909ad16e6227b8230f4582352_tuple; 47 static PyObject *const_tuple_str_digest_5ed1392909ad16e6227b8230f4582352_tuple;
48 static PyObject *const_str_digest_3853f2ffe1b4bac454658fa057b472f0; 48 static PyObject *const_str_digest_3853f2ffe1b4bac454658fa057b472f0;
86     PyTuple_SET_ITEM( const_tuple_d4571c3ff966778a8b3ba4a6bd66fdef_tuple, 3, const_str_plain_d ); Py_INCREF( const_str_plain_d ); 86     PyTuple_SET_ITEM( const_tuple_d4571c3ff966778a8b3ba4a6bd66fdef_tuple, 3, const_str_plain_d ); Py_INCREF( const_str_plain_d );
87     const_str_plain_e = UNSTREAM_STRING_ASCII( &constant_bin[ 3 ], 1, 1 ); 87     const_str_plain_e = UNSTREAM_STRING_ASCII( &constant_bin[ 3 ], 1, 1 );
88     PyTuple_SET_ITEM( const_tuple_d4571c3ff966778a8b3ba4a6bd66fdef_tuple, 4, const_str_plain_e ); Py_INCREF( const_str_plain_e ); 88     PyTuple_SET_ITEM( const_tuple_d4571c3ff966778a8b3ba4a6bd66fdef_tuple, 4, const_str_plain_e ); Py_INCREF( const_str_plain_e );
89     const_str_plain_f = UNSTREAM_STRING_ASCII( &constant_bin[ 13 ], 1, 1 ); 89     const_str_plain_f = UNSTREAM_STRING_ASCII( &constant_bin[ 13 ], 1, 1 );
90     PyTuple_SET_ITEM( const_tuple_d4571c3ff966778a8b3ba4a6bd66fdef_tuple, 5, const_str_plain_f ); Py_INCREF( const_str_plain_f ); 90     PyTuple_SET_ITEM( const_tuple_d4571c3ff966778a8b3ba4a6bd66fdef_tuple, 5, const_str_plain_f ); Py_INCREF( const_str_plain_f );
n 91     const_str_plain_compiled_func = UNSTREAM_STRING_ASCII( &constant_bin[ 14 ], 13, 1 ); n
92     const_tuple_int_pos_1_int_pos_2_int_pos_3_int_pos_4_int_pos_5_int_pos_6_tuple = PyTuple_New( 6 ); 91     const_tuple_int_pos_1_int_pos_2_int_pos_3_int_pos_4_int_pos_5_int_pos_6_tuple = PyTuple_New( 6 );
93     PyTuple_SET_ITEM( const_tuple_int_pos_1_int_pos_2_int_pos_3_int_pos_4_int_pos_5_int_pos_6_tuple, 0, const_int_pos_1 ); Py_INCREF( const_int_pos_1 ); 92     PyTuple_SET_ITEM( const_tuple_int_pos_1_int_pos_2_int_pos_3_int_pos_4_int_pos_5_int_pos_6_tuple, 0, const_int_pos_1 ); Py_INCREF( const_int_pos_1 );
94     const_int_pos_2 = PyLong_FromUnsignedLong( 2ul ); 93     const_int_pos_2 = PyLong_FromUnsignedLong( 2ul );
95     PyTuple_SET_ITEM( const_tuple_int_pos_1_int_pos_2_int_pos_3_int_pos_4_int_pos_5_int_pos_6_tuple, 1, const_int_pos_2 ); Py_INCREF( const_int_pos_2 ); 94     PyTuple_SET_ITEM( const_tuple_int_pos_1_int_pos_2_int_pos_3_int_pos_4_int_pos_5_int_pos_6_tuple, 1, const_int_pos_2 ); Py_INCREF( const_int_pos_2 );
96     const_int_pos_3 = PyLong_FromUnsignedLong( 3ul ); 95     const_int_pos_3 = PyLong_FromUnsignedLong( 3ul );
99     PyTuple_SET_ITEM( const_tuple_int_pos_1_int_pos_2_int_pos_3_int_pos_4_int_pos_5_int_pos_6_tuple, 3, const_int_pos_4 ); Py_INCREF( const_int_pos_4 ); 98     PyTuple_SET_ITEM( const_tuple_int_pos_1_int_pos_2_int_pos_3_int_pos_4_int_pos_5_int_pos_6_tuple, 3, const_int_pos_4 ); Py_INCREF( const_int_pos_4 );
100     const_int_pos_5 = PyLong_FromUnsignedLong( 5ul ); 99     const_int_pos_5 = PyLong_FromUnsignedLong( 5ul );
101     PyTuple_SET_ITEM( const_tuple_int_pos_1_int_pos_2_int_pos_3_int_pos_4_int_pos_5_int_pos_6_tuple, 4, const_int_pos_5 ); Py_INCREF( const_int_pos_5 ); 100     PyTuple_SET_ITEM( const_tuple_int_pos_1_int_pos_2_int_pos_3_int_pos_4_int_pos_5_int_pos_6_tuple, 4, const_int_pos_5 ); Py_INCREF( const_int_pos_5 );
102     const_int_pos_6 = PyLong_FromUnsignedLong( 6ul ); 101     const_int_pos_6 = PyLong_FromUnsignedLong( 6ul );
103     PyTuple_SET_ITEM( const_tuple_int_pos_1_int_pos_2_int_pos_3_int_pos_4_int_pos_5_int_pos_6_tuple, 5, const_int_pos_6 ); Py_INCREF( const_int_pos_6 ); 102     PyTuple_SET_ITEM( const_tuple_int_pos_1_int_pos_2_int_pos_3_int_pos_4_int_pos_5_int_pos_6_tuple, 5, const_int_pos_6 ); Py_INCREF( const_int_pos_6 );
n n 103     const_str_plain_compiled_func = UNSTREAM_STRING_ASCII( &constant_bin[ 14 ], 13, 1 );
104     const_int_pos_50000 = PyLong_FromUnsignedLong( 50000ul ); 104     const_int_pos_50000 = PyLong_FromUnsignedLong( 50000ul );
105     const_tuple_str_digest_5ed1392909ad16e6227b8230f4582352_tuple = PyTuple_New( 1 ); 105     const_tuple_str_digest_5ed1392909ad16e6227b8230f4582352_tuple = PyTuple_New( 1 );
106     const_str_digest_5ed1392909ad16e6227b8230f4582352 = UNSTREAM_STRING_ASCII( &constant_bin[ 27 ], 3, 0 ); 106     const_str_digest_5ed1392909ad16e6227b8230f4582352 = UNSTREAM_STRING_ASCII( &constant_bin[ 27 ], 3, 0 );
107     PyTuple_SET_ITEM( const_tuple_str_digest_5ed1392909ad16e6227b8230f4582352_tuple, 0, const_str_digest_5ed1392909ad16e6227b8230f4582352 ); Py_INCREF( const_str_digest_5ed1392909ad16e6227b8230f4582352 ); 107     PyTuple_SET_ITEM( const_tuple_str_digest_5ed1392909ad16e6227b8230f4582352_tuple, 0, const_str_digest_5ed1392909ad16e6227b8230f4582352 ); Py_INCREF( const_str_digest_5ed1392909ad16e6227b8230f4582352 );
108     const_str_digest_3853f2ffe1b4bac454658fa057b472f0 = UNSTREAM_STRING_ASCII( &constant_bin[ 30 ], 86, 0 ); 108     const_str_digest_3853f2ffe1b4bac454658fa057b472f0 = UNSTREAM_STRING_ASCII( &constant_bin[ 30 ], 86, 0 );
131 } 131 }
132 #endif 132 #endif
133 133
134 // The module code objects. 134 // The module code objects.
135 static PyCodeObject *codeobj_543f9faa61e5ffe79ff23a975143810d; 135 static PyCodeObject *codeobj_543f9faa61e5ffe79ff23a975143810d;
n 136 static PyCodeObject *codeobj_324478fe3f94f42ab3b223f53f5bfbcb; n 136 static PyCodeObject *codeobj_b3c4e3042e0246d1d42c8686d4b5c442;
137 static PyCodeObject *codeobj_513d8e355bc13d54b98677d1371fd2a6; 137 static PyCodeObject *codeobj_513d8e355bc13d54b98677d1371fd2a6;
138 /* For use in "MainProgram.c". */ 138 /* For use in "MainProgram.c". */
139 PyCodeObject *codeobj_main = NULL; 139 PyCodeObject *codeobj_main = NULL;
140 140
141 static void createModuleCodeObjects(void) 141 static void createModuleCodeObjects(void)
142 { 142 {
143     module_filename_obj = const_str_digest_3853f2ffe1b4bac454658fa057b472f0; 143     module_filename_obj = const_str_digest_3853f2ffe1b4bac454658fa057b472f0;
144     codeobj_543f9faa61e5ffe79ff23a975143810d = MAKE_CODEOBJ( module_filename_obj, const_str_angle_module, 1, const_tuple_empty, 0, 0, CO_NOFREE ); 144     codeobj_543f9faa61e5ffe79ff23a975143810d = MAKE_CODEOBJ( module_filename_obj, const_str_angle_module, 1, const_tuple_empty, 0, 0, CO_NOFREE );
145     codeobj_main = codeobj_543f9faa61e5ffe79ff23a975143810d; 145     codeobj_main = codeobj_543f9faa61e5ffe79ff23a975143810d;
n 146     codeobj_324478fe3f94f42ab3b223f53f5bfbcb = MAKE_CODEOBJ( module_filename_obj, const_str_plain_calledRepeatedly, 25, const_tuple_empty, 0, 0, CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE ); n 146     codeobj_b3c4e3042e0246d1d42c8686d4b5c442 = MAKE_CODEOBJ( module_filename_obj, const_str_plain_calledRepeatedly, 25, const_tuple_empty, 0, 0, CO_NOFREE );
147     codeobj_513d8e355bc13d54b98677d1371fd2a6 = MAKE_CODEOBJ( module_filename_obj, const_str_plain_compiled_func, 22, const_tuple_d4571c3ff966778a8b3ba4a6bd66fdef_tuple, 6, 0, CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE ); 147     codeobj_513d8e355bc13d54b98677d1371fd2a6 = MAKE_CODEOBJ( module_filename_obj, const_str_plain_compiled_func, 22, const_tuple_d4571c3ff966778a8b3ba4a6bd66fdef_tuple, 6, 0, CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE );
148 } 148 }
149 149
150 // The module function declarations. 150 // The module function declarations.
151 static PyObject *MAKE_FUNCTION___main__$$$function_1_compiled_func( PyObject *defaults ); 151 static PyObject *MAKE_FUNCTION___main__$$$function_1_compiled_func( PyObject *defaults );
257 #ifndef __NUITKA_NO_ASSERT__ 257 #ifndef __NUITKA_NO_ASSERT__
258     NUITKA_MAY_BE_UNUSED bool had_error = ERROR_OCCURRED(); 258     NUITKA_MAY_BE_UNUSED bool had_error = ERROR_OCCURRED();
259 #endif 259 #endif
260 260
261     // Local variable declarations. 261     // Local variable declarations.
n 262     struct Nuitka_FrameObject *frame_324478fe3f94f42ab3b223f53f5bfbcb; n
263     NUITKA_MAY_BE_UNUSED char const *type_description_1 = NULL;
264     PyObject *exception_type = NULL;
265     PyObject *exception_value = NULL;
266     PyTracebackObject *exception_tb = NULL;
267     NUITKA_MAY_BE_UNUSED int exception_lineno = 0;
268     static struct Nuitka_FrameObject *cache_frame_324478fe3f94f42ab3b223f53f5bfbcb = NULL;
269     PyObject *tmp_return_value = NULL; 262     PyObject *tmp_return_value = NULL;
270 263
271     // Actual function body. 264     // Actual function body.
n 272     MAKE_OR_REUSE_FRAME( cache_frame_324478fe3f94f42ab3b223f53f5bfbcb, codeobj_324478fe3f94f42ab3b223f53f5bfbcb, module___main__, 0 ); n
273     frame_324478fe3f94f42ab3b223f53f5bfbcb = cache_frame_324478fe3f94f42ab3b223f53f5bfbcb;
274  
275     // Push the new frame as the currently active one.
276     pushFrameStack( frame_324478fe3f94f42ab3b223f53f5bfbcb );
277  
278     // Mark the frame object as in use, ref count 1 will be up for reuse.
279     assert( Py_REFCNT( frame_324478fe3f94f42ab3b223f53f5bfbcb ) == 2 ); // Frame stack
280  
281     // Framed code:
282     {
283         PyObject *tmp_called_name_1;
284         PyObject *tmp_mvar_value_1;
285         PyObject *tmp_call_result_1;
286         tmp_mvar_value_1 = GET_STRING_DICT_VALUE( moduledict___main__, (Nuitka_StringObject *)const_str_plain_compiled_func );
287  
288         if (unlikely( tmp_mvar_value_1 == NULL ))
289         {
290             tmp_mvar_value_1 = GET_STRING_DICT_VALUE( dict_builtin, (Nuitka_StringObject *)const_str_plain_compiled_func );
291         }
292  
293         if ( tmp_mvar_value_1 == NULL )
294         {
295  
296             exception_type = PyExc_NameError;
297             Py_INCREF( exception_type );
298             exception_value = PyUnicode_FromFormat( "name '%s' is not defined", "compiled_func" );
299             exception_tb = NULL;
300             NORMALIZE_EXCEPTION( &exception_type, &exception_value, &exception_tb );
301             CHAIN_EXCEPTION( exception_value );
302  
303             exception_lineno = 29;
304  
305             goto frame_exception_exit_1;
306         }
307  
308         tmp_called_name_1 = tmp_mvar_value_1;
309         frame_324478fe3f94f42ab3b223f53f5bfbcb->m_frame.f_lineno = 29;
310         tmp_call_result_1 = CALL_FUNCTION_NO_ARGS( tmp_called_name_1 );
311         if ( tmp_call_result_1 == NULL )
312         {
313             assert( ERROR_OCCURRED() );
314  
315             FETCH_ERROR_OCCURRED( &exception_type, &exception_value, &exception_tb );
316  
317  
318             exception_lineno = 29;
319  
320             goto frame_exception_exit_1;
321         }
322         Py_DECREF( tmp_call_result_1 );
323     }
324     {
325         PyObject *tmp_called_name_2;
326         PyObject *tmp_mvar_value_2;
327         PyObject *tmp_call_result_2;
328         tmp_mvar_value_2 = GET_STRING_DICT_VALUE( moduledict___main__, (Nuitka_StringObject *)const_str_plain_compiled_func );
329  
330         if (unlikely( tmp_mvar_value_2 == NULL ))
331         {
332             tmp_mvar_value_2 = GET_STRING_DICT_VALUE( dict_builtin, (Nuitka_StringObject *)const_str_plain_compiled_func );
333         }
334  
335         if ( tmp_mvar_value_2 == NULL )
336         {
337  
338             exception_type = PyExc_NameError;
339             Py_INCREF( exception_type );
340             exception_value = PyUnicode_FromFormat( "name '%s' is not defined", "compiled_func" );
341             exception_tb = NULL;
342             NORMALIZE_EXCEPTION( &exception_type, &exception_value, &exception_tb );
343             CHAIN_EXCEPTION( exception_value );
344  
345             exception_lineno = 30;
346  
347             goto frame_exception_exit_1;
348         }
349  
350         tmp_called_name_2 = tmp_mvar_value_2;
351         frame_324478fe3f94f42ab3b223f53f5bfbcb->m_frame.f_lineno = 30;
352         tmp_call_result_2 = CALL_FUNCTION_NO_ARGS( tmp_called_name_2 );
353         if ( tmp_call_result_2 == NULL )
354         {
355             assert( ERROR_OCCURRED() );
356  
357             FETCH_ERROR_OCCURRED( &exception_type, &exception_value, &exception_tb );
358  
359  
360             exception_lineno = 30;
361  
362             goto frame_exception_exit_1;
363         }
364         Py_DECREF( tmp_call_result_2 );
365     }
366     {
367         PyObject *tmp_called_name_3;
368         PyObject *tmp_mvar_value_3;
369         PyObject *tmp_call_result_3;
370         tmp_mvar_value_3 = GET_STRING_DICT_VALUE( moduledict___main__, (Nuitka_StringObject *)const_str_plain_compiled_func );
371  
372         if (unlikely( tmp_mvar_value_3 == NULL ))
373         {
374             tmp_mvar_value_3 = GET_STRING_DICT_VALUE( dict_builtin, (Nuitka_StringObject *)const_str_plain_compiled_func );
375         }
376  
377         if ( tmp_mvar_value_3 == NULL )
378         {
379  
380             exception_type = PyExc_NameError;
381             Py_INCREF( exception_type );
382             exception_value = PyUnicode_FromFormat( "name '%s' is not defined", "compiled_func" );
383             exception_tb = NULL;
384             NORMALIZE_EXCEPTION( &exception_type, &exception_value, &exception_tb );
385             CHAIN_EXCEPTION( exception_value );
386  
387             exception_lineno = 31;
388  
389             goto frame_exception_exit_1;
390         }
391  
392         tmp_called_name_3 = tmp_mvar_value_3;
393         frame_324478fe3f94f42ab3b223f53f5bfbcb->m_frame.f_lineno = 31;
394         tmp_call_result_3 = CALL_FUNCTION_NO_ARGS( tmp_called_name_3 );
395         if ( tmp_call_result_3 == NULL )
396         {
397             assert( ERROR_OCCURRED() );
398  
399             FETCH_ERROR_OCCURRED( &exception_type, &exception_value, &exception_tb );
400  
401  
402             exception_lineno = 31;
403  
404             goto frame_exception_exit_1;
405         }
406         Py_DECREF( tmp_call_result_3 );
407     }
408  
409 #if 0
410     RESTORE_FRAME_EXCEPTION( frame_324478fe3f94f42ab3b223f53f5bfbcb );
411 #endif
412  
413     // Put the previous frame back on top.
414     popFrameStack();
415  
416     goto frame_no_exception_1;
417  
418     frame_exception_exit_1:;
419  
420 #if 0
421     RESTORE_FRAME_EXCEPTION( frame_324478fe3f94f42ab3b223f53f5bfbcb );
422 #endif
423  
424     if ( exception_tb == NULL )
425     {
426         exception_tb = MAKE_TRACEBACK( frame_324478fe3f94f42ab3b223f53f5bfbcb, exception_lineno );
427     }
428     else if ( exception_tb->tb_frame != &frame_324478fe3f94f42ab3b223f53f5bfbcb->m_frame )
429     {
430         exception_tb = ADD_TRACEBACK( exception_tb, frame_324478fe3f94f42ab3b223f53f5bfbcb, exception_lineno );
431     }
432  
433     // Attachs locals to frame if any.
434     Nuitka_Frame_AttachLocals(
435         (struct Nuitka_FrameObject *)frame_324478fe3f94f42ab3b223f53f5bfbcb,
436         type_description_1
437     );
438  
439  
440     // Release cached frame.
441     if ( frame_324478fe3f94f42ab3b223f53f5bfbcb == cache_frame_324478fe3f94f42ab3b223f53f5bfbcb )
442     {
443         Py_DECREF( frame_324478fe3f94f42ab3b223f53f5bfbcb );
444     }
445     cache_frame_324478fe3f94f42ab3b223f53f5bfbcb = NULL;
446  
447     assertFrameObject( frame_324478fe3f94f42ab3b223f53f5bfbcb );
448  
449     // Put the previous frame back on top.
450     popFrameStack();
451  
452     // Return the error.
453     goto function_exception_exit;
454  
455     frame_no_exception_1:;
456     tmp_return_value = Py_None; 265     tmp_return_value = Py_None;
457     Py_INCREF( tmp_return_value ); 266     Py_INCREF( tmp_return_value );
458     goto function_return_exit; 267     goto function_return_exit;
459 268
460     // Return statement must have exited already. 269     // Return statement must have exited already.
461     NUITKA_CANNOT_GET_HERE( __main__$$$function_2_calledRepeatedly ); 270     NUITKA_CANNOT_GET_HERE( __main__$$$function_2_calledRepeatedly );
462     return NULL; 271     return NULL;
463 272
n 464 function_exception_exit: n
465     assert( exception_type );
466     RESTORE_ERROR_OCCURRED( exception_type, exception_value, exception_tb );
467  
468     return NULL;
469 273
470 function_return_exit: 274 function_return_exit:
471    // Function cleanup code if any. 275    // Function cleanup code if any.
472 276
473 277
510         impl___main__$$$function_2_calledRepeatedly, 314         impl___main__$$$function_2_calledRepeatedly,
511         const_str_plain_calledRepeatedly, 315         const_str_plain_calledRepeatedly,
512 #if PYTHON_VERSION >= 300 316 #if PYTHON_VERSION >= 300
513         NULL, 317         NULL,
514 #endif 318 #endif
t 515         codeobj_324478fe3f94f42ab3b223f53f5bfbcb, t 319         codeobj_b3c4e3042e0246d1d42c8686d4b5c442,
516         NULL, 320         NULL,
517 #if PYTHON_VERSION >= 300 321 #if PYTHON_VERSION >= 300
518         NULL, 322         NULL,
519         NULL, 323         NULL,
520 #endif 324 #endif