Construct CallCompiledFunctionPosArgsDefaults

Performance Diagrams

Construct CallCompiledFunctionPosArgsDefaults 002000000020000000400000004000000060000000600000008000000080000000100000000100000000120000000120000000140000000140000000160000000160000000180000000180000000200000000200000000CPython 2.7Nuitka (master)Nuitka (develop)Nuitka (factory)20189841688.11538461538461257.0CPython 2.764250333240.03846153846155425.475610884017Nuitka (master)64250375391.96153846153845425.4755594777387Nuitka (develop)64250279543.8846153846154425.47567697780335Nuitka (factory)Construct CallCompiledFunctionPosArgsDefaultsTicks Construct CallCompiledFunctionPosArgsDefaults 002000000020000000400000004000000060000000600000008000000080000000100000000100000000120000000120000000140000000140000000160000000160000000180000000180000000200000000200000000CPython 3.5Nuitka (master)Nuitka (develop)Nuitka (factory)20284130688.11538461538461257.0CPython 3.573051236240.03846153846155415.119288914989Nuitka (master)73049947391.96153846153845415.1208592644265Nuitka (develop)73050696543.8846153846154415.1199467805408Nuitka (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_220bde63e9222b15c4464e3ac13ad160; 48 static PyObject *const_str_digest_220bde63e9222b15c4464e3ac13ad160;
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_220bde63e9222b15c4464e3ac13ad160 = UNSTREAM_STRING_ASCII( &constant_bin[ 30 ], 86, 0 ); 108     const_str_digest_220bde63e9222b15c4464e3ac13ad160 = 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_fccd9ae20573186aa08132fd890e11cb; 135 static PyCodeObject *codeobj_fccd9ae20573186aa08132fd890e11cb;
n 136 static PyCodeObject *codeobj_4e27059d94363cc8a99f81155ed90421; n 136 static PyCodeObject *codeobj_d3bdfa46063d94082b076e499c0cf708;
137 static PyCodeObject *codeobj_ddadcccd22445c5238f766abd6a7c4bf; 137 static PyCodeObject *codeobj_ddadcccd22445c5238f766abd6a7c4bf;
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_220bde63e9222b15c4464e3ac13ad160; 143     module_filename_obj = const_str_digest_220bde63e9222b15c4464e3ac13ad160;
144     codeobj_fccd9ae20573186aa08132fd890e11cb = MAKE_CODEOBJ( module_filename_obj, const_str_angle_module, 1, const_tuple_empty, 0, 0, CO_NOFREE ); 144     codeobj_fccd9ae20573186aa08132fd890e11cb = MAKE_CODEOBJ( module_filename_obj, const_str_angle_module, 1, const_tuple_empty, 0, 0, CO_NOFREE );
n 145     codeobj_4e27059d94363cc8a99f81155ed90421 = MAKE_CODEOBJ( module_filename_obj, const_str_plain_calledRepeatedly, 25, const_tuple_empty, 0, 0, CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE ); n 145     codeobj_d3bdfa46063d94082b076e499c0cf708 = MAKE_CODEOBJ( module_filename_obj, const_str_plain_calledRepeatedly, 25, const_tuple_empty, 0, 0, CO_NOFREE );
146     codeobj_ddadcccd22445c5238f766abd6a7c4bf = MAKE_CODEOBJ( module_filename_obj, const_str_plain_compiled_func, 22, const_tuple_d4571c3ff966778a8b3ba4a6bd66fdef_tuple, 6, 0, CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE ); 146     codeobj_ddadcccd22445c5238f766abd6a7c4bf = MAKE_CODEOBJ( module_filename_obj, const_str_plain_compiled_func, 22, const_tuple_d4571c3ff966778a8b3ba4a6bd66fdef_tuple, 6, 0, CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE );
147 } 147 }
148 148
149 // The module function declarations. 149 // The module function declarations.
150 static PyObject *MAKE_FUNCTION___main__$$$function_1_compiled_func( PyObject *defaults ); 150 static PyObject *MAKE_FUNCTION___main__$$$function_1_compiled_func( PyObject *defaults );
256 #ifndef __NUITKA_NO_ASSERT__ 256 #ifndef __NUITKA_NO_ASSERT__
257     NUITKA_MAY_BE_UNUSED bool had_error = ERROR_OCCURRED(); 257     NUITKA_MAY_BE_UNUSED bool had_error = ERROR_OCCURRED();
258 #endif 258 #endif
259 259
260     // Local variable declarations. 260     // Local variable declarations.
n 261     struct Nuitka_FrameObject *frame_4e27059d94363cc8a99f81155ed90421; n
262     NUITKA_MAY_BE_UNUSED char const *type_description_1 = NULL;
263     PyObject *exception_type = NULL;
264     PyObject *exception_value = NULL;
265     PyTracebackObject *exception_tb = NULL;
266     NUITKA_MAY_BE_UNUSED int exception_lineno = 0;
267     static struct Nuitka_FrameObject *cache_frame_4e27059d94363cc8a99f81155ed90421 = NULL;
268     PyObject *tmp_return_value = NULL; 261     PyObject *tmp_return_value = NULL;
269 262
270     // Actual function body. 263     // Actual function body.
n 271     MAKE_OR_REUSE_FRAME( cache_frame_4e27059d94363cc8a99f81155ed90421, codeobj_4e27059d94363cc8a99f81155ed90421, module___main__, 0 ); n
272     frame_4e27059d94363cc8a99f81155ed90421 = cache_frame_4e27059d94363cc8a99f81155ed90421;
273  
274     // Push the new frame as the currently active one.
275     pushFrameStack( frame_4e27059d94363cc8a99f81155ed90421 );
276  
277     // Mark the frame object as in use, ref count 1 will be up for reuse.
278     assert( Py_REFCNT( frame_4e27059d94363cc8a99f81155ed90421 ) == 2 ); // Frame stack
279  
280     // Framed code:
281     {
282         PyObject *tmp_called_name_1;
283         PyObject *tmp_mvar_value_1;
284         PyObject *tmp_call_result_1;
285         tmp_mvar_value_1 = GET_STRING_DICT_VALUE( moduledict___main__, (Nuitka_StringObject *)const_str_plain_compiled_func );
286  
287         if (unlikely( tmp_mvar_value_1 == NULL ))
288         {
289             tmp_mvar_value_1 = GET_STRING_DICT_VALUE( dict_builtin, (Nuitka_StringObject *)const_str_plain_compiled_func );
290         }
291  
292         if ( tmp_mvar_value_1 == NULL )
293         {
294  
295             exception_type = PyExc_NameError;
296             Py_INCREF( exception_type );
297             exception_value = PyUnicode_FromFormat( "name '%s' is not defined", "compiled_func" );
298             exception_tb = NULL;
299             NORMALIZE_EXCEPTION( &exception_type, &exception_value, &exception_tb );
300             CHAIN_EXCEPTION( exception_value );
301  
302             exception_lineno = 29;
303  
304             goto frame_exception_exit_1;
305         }
306  
307         tmp_called_name_1 = tmp_mvar_value_1;
308         frame_4e27059d94363cc8a99f81155ed90421->m_frame.f_lineno = 29;
309         tmp_call_result_1 = CALL_FUNCTION_NO_ARGS( tmp_called_name_1 );
310         if ( tmp_call_result_1 == NULL )
311         {
312             assert( ERROR_OCCURRED() );
313  
314             FETCH_ERROR_OCCURRED( &exception_type, &exception_value, &exception_tb );
315  
316  
317             exception_lineno = 29;
318  
319             goto frame_exception_exit_1;
320         }
321         Py_DECREF( tmp_call_result_1 );
322     }
323     {
324         PyObject *tmp_called_name_2;
325         PyObject *tmp_mvar_value_2;
326         PyObject *tmp_call_result_2;
327         tmp_mvar_value_2 = GET_STRING_DICT_VALUE( moduledict___main__, (Nuitka_StringObject *)const_str_plain_compiled_func );
328  
329         if (unlikely( tmp_mvar_value_2 == NULL ))
330         {
331             tmp_mvar_value_2 = GET_STRING_DICT_VALUE( dict_builtin, (Nuitka_StringObject *)const_str_plain_compiled_func );
332         }
333  
334         if ( tmp_mvar_value_2 == NULL )
335         {
336  
337             exception_type = PyExc_NameError;
338             Py_INCREF( exception_type );
339             exception_value = PyUnicode_FromFormat( "name '%s' is not defined", "compiled_func" );
340             exception_tb = NULL;
341             NORMALIZE_EXCEPTION( &exception_type, &exception_value, &exception_tb );
342             CHAIN_EXCEPTION( exception_value );
343  
344             exception_lineno = 30;
345  
346             goto frame_exception_exit_1;
347         }
348  
349         tmp_called_name_2 = tmp_mvar_value_2;
350         frame_4e27059d94363cc8a99f81155ed90421->m_frame.f_lineno = 30;
351         tmp_call_result_2 = CALL_FUNCTION_NO_ARGS( tmp_called_name_2 );
352         if ( tmp_call_result_2 == NULL )
353         {
354             assert( ERROR_OCCURRED() );
355  
356             FETCH_ERROR_OCCURRED( &exception_type, &exception_value, &exception_tb );
357  
358  
359             exception_lineno = 30;
360  
361             goto frame_exception_exit_1;
362         }
363         Py_DECREF( tmp_call_result_2 );
364     }
365     {
366         PyObject *tmp_called_name_3;
367         PyObject *tmp_mvar_value_3;
368         PyObject *tmp_call_result_3;
369         tmp_mvar_value_3 = GET_STRING_DICT_VALUE( moduledict___main__, (Nuitka_StringObject *)const_str_plain_compiled_func );
370  
371         if (unlikely( tmp_mvar_value_3 == NULL ))
372         {
373             tmp_mvar_value_3 = GET_STRING_DICT_VALUE( dict_builtin, (Nuitka_StringObject *)const_str_plain_compiled_func );
374         }
375  
376         if ( tmp_mvar_value_3 == NULL )
377         {
378  
379             exception_type = PyExc_NameError;
380             Py_INCREF( exception_type );
381             exception_value = PyUnicode_FromFormat( "name '%s' is not defined", "compiled_func" );
382             exception_tb = NULL;
383             NORMALIZE_EXCEPTION( &exception_type, &exception_value, &exception_tb );
384             CHAIN_EXCEPTION( exception_value );
385  
386             exception_lineno = 31;
387  
388             goto frame_exception_exit_1;
389         }
390  
391         tmp_called_name_3 = tmp_mvar_value_3;
392         frame_4e27059d94363cc8a99f81155ed90421->m_frame.f_lineno = 31;
393         tmp_call_result_3 = CALL_FUNCTION_NO_ARGS( tmp_called_name_3 );
394         if ( tmp_call_result_3 == NULL )
395         {
396             assert( ERROR_OCCURRED() );
397  
398             FETCH_ERROR_OCCURRED( &exception_type, &exception_value, &exception_tb );
399  
400  
401             exception_lineno = 31;
402  
403             goto frame_exception_exit_1;
404         }
405         Py_DECREF( tmp_call_result_3 );
406     }
407  
408 #if 0
409     RESTORE_FRAME_EXCEPTION( frame_4e27059d94363cc8a99f81155ed90421 );
410 #endif
411  
412     // Put the previous frame back on top.
413     popFrameStack();
414  
415     goto frame_no_exception_1;
416  
417     frame_exception_exit_1:;
418  
419 #if 0
420     RESTORE_FRAME_EXCEPTION( frame_4e27059d94363cc8a99f81155ed90421 );
421 #endif
422  
423     if ( exception_tb == NULL )
424     {
425         exception_tb = MAKE_TRACEBACK( frame_4e27059d94363cc8a99f81155ed90421, exception_lineno );
426     }
427     else if ( exception_tb->tb_frame != &frame_4e27059d94363cc8a99f81155ed90421->m_frame )
428     {
429         exception_tb = ADD_TRACEBACK( exception_tb, frame_4e27059d94363cc8a99f81155ed90421, exception_lineno );
430     }
431  
432     // Attachs locals to frame if any.
433     Nuitka_Frame_AttachLocals(
434         (struct Nuitka_FrameObject *)frame_4e27059d94363cc8a99f81155ed90421,
435         type_description_1
436     );
437  
438  
439     // Release cached frame.
440     if ( frame_4e27059d94363cc8a99f81155ed90421 == cache_frame_4e27059d94363cc8a99f81155ed90421 )
441     {
442         Py_DECREF( frame_4e27059d94363cc8a99f81155ed90421 );
443     }
444     cache_frame_4e27059d94363cc8a99f81155ed90421 = NULL;
445  
446     assertFrameObject( frame_4e27059d94363cc8a99f81155ed90421 );
447  
448     // Put the previous frame back on top.
449     popFrameStack();
450  
451     // Return the error.
452     goto function_exception_exit;
453  
454     frame_no_exception_1:;
455     tmp_return_value = Py_None; 264     tmp_return_value = Py_None;
456     Py_INCREF( tmp_return_value ); 265     Py_INCREF( tmp_return_value );
457     goto function_return_exit; 266     goto function_return_exit;
458 267
459     // Return statement must have exited already. 268     // Return statement must have exited already.
460     NUITKA_CANNOT_GET_HERE( __main__$$$function_2_calledRepeatedly ); 269     NUITKA_CANNOT_GET_HERE( __main__$$$function_2_calledRepeatedly );
461     return NULL; 270     return NULL;
462 271
n 463 function_exception_exit: n
464     assert( exception_type );
465     RESTORE_ERROR_OCCURRED( exception_type, exception_value, exception_tb );
466  
467     return NULL;
468 272
469 function_return_exit: 273 function_return_exit:
470    // Function cleanup code if any. 274    // Function cleanup code if any.
471 275
472 276
509         impl___main__$$$function_2_calledRepeatedly, 313         impl___main__$$$function_2_calledRepeatedly,
510         const_str_plain_calledRepeatedly, 314         const_str_plain_calledRepeatedly,
511 #if PYTHON_VERSION >= 300 315 #if PYTHON_VERSION >= 300
512         NULL, 316         NULL,
513 #endif 317 #endif
t 514         codeobj_4e27059d94363cc8a99f81155ed90421, t 318         codeobj_d3bdfa46063d94082b076e499c0cf708,
515         NULL, 319         NULL,
516 #if PYTHON_VERSION >= 300 320 #if PYTHON_VERSION >= 300
517         NULL, 321         NULL,
518         NULL, 322         NULL,
519 #endif 323 #endif