Construct CallCompiledFunctionPosArgsConstant

Performance Diagrams

Construct CallCompiledFunctionPosArgsConstant 002000000020000000400000004000000060000000600000008000000080000000100000000100000000120000000120000000140000000140000000160000000160000000180000000180000000200000000200000000220000000220000000CPython 2.7Nuitka (historic)Nuitka (master)Nuitka (develop)Nuitka (factory)22931442372.9230769230769257.0CPython 2.775503937194.46153846153845422.75031307895205Nuitka (historic)61556650316.0437.7802843570611Nuitka (master)61555739437.53846153846143437.78126607514247Nuitka (develop)61556310559.0769230769231437.78065075019794Nuitka (factory)Construct CallCompiledFunctionPosArgsConstantTicks Construct CallCompiledFunctionPosArgsConstant 002000000020000000400000004000000060000000600000008000000080000000100000000100000000120000000120000000140000000140000000160000000160000000180000000180000000200000000200000000CPython 3.5Nuitka (historic)Nuitka (master)Nuitka (develop)Nuitka (factory)21728435472.9230769230769257.0CPython 3.50194.46153846153845504.11538461538464Nuitka (historic)71909272316.0422.333668258153Nuitka (master)71910679437.53846153846143422.33206809072374Nuitka (develop)71907762559.0769230769231422.3353855664815Nuitka (factory)Construct CallCompiledFunctionPosArgsConstantTicks

Source Code with Construct

from __future__ import print_function

def compiled_func(a,b,c,d,e,f):
    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("some", "random", "values", "to", "check", "call")
    compiled_func("some", "other", "values", "to", "check", "call")
    compiled_func("some", "new", "values", "to", "check", "call")
# construct_alternative



for x in xrange(50000):
    calledRepeatedly()

print("OK.")

Source Code without Construct

from __future__ import print_function

def compiled_func(a,b,c,d,e,f):
    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

for x in xrange(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("some", "random", "values", "to", "check", "call") n
30     compiled_func("some", "other", "values", "to", "check", "call")
31     compiled_func("some", "new", "values", "to", "check", "call")
32 # construct_alternative
33 29
34 30
t t 31  
32 # construct_alternative
33     pass
34 # construct_end
35 35
36 for x in xrange(50000): 36 for x in xrange(50000):
37     calledRepeatedly() 37     calledRepeatedly()
38 38
39 print("OK.") 39 print("OK.")

Context Diff of Generated Code


Construct
Baseline
29 29
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. */
n 34 static PyObject *const_str_plain_to; n
35 static PyObject *const_str_plain_b; 34 static PyObject *const_str_plain_b;
36 static PyObject *const_str_plain___package__; 35 static PyObject *const_str_plain___package__;
n 37 static PyObject *const_tuple_4cee4124c8df2995a8a82b981e580f5e_tuple; n
38 static PyObject *const_tuple_d4571c3ff966778a8b3ba4a6bd66fdef_tuple; 36 static PyObject *const_tuple_d4571c3ff966778a8b3ba4a6bd66fdef_tuple;
39 static PyObject *const_str_plain_f; 37 static PyObject *const_str_plain_f;
n 40 static PyObject *const_str_plain_values; n 38 extern PyObject *const_int_pos_1;
41 extern PyObject *const_dict_empty; 39 extern PyObject *const_dict_empty;
n 42 extern PyObject *const_int_pos_1; n
43 extern PyObject *const_str_plain___file__; 40 extern PyObject *const_str_plain___file__;
n 44 static PyObject *const_str_plain_other; n
45 extern PyObject *const_int_0; 41 extern PyObject *const_int_0;
n 46 static PyObject *const_str_plain_check; n
47 static PyObject *const_xrange_0_50000; 42 static PyObject *const_xrange_0_50000;
48 static PyObject *const_str_plain_compiled_func; 43 static PyObject *const_str_plain_compiled_func;
n n 44 static PyObject *const_str_plain_a;
49 extern PyObject *const_str_plain_print; 45 extern PyObject *const_str_plain_print;
n 50 static PyObject *const_str_plain_call; n
51 static PyObject *const_str_plain_a;
52 static PyObject *const_int_pos_50000; 46 static PyObject *const_int_pos_50000;
53 static PyObject *const_tuple_str_digest_5ed1392909ad16e6227b8230f4582352_tuple; 47 static PyObject *const_tuple_str_digest_5ed1392909ad16e6227b8230f4582352_tuple;
n 54 static PyObject *const_str_plain_random; n
55 static PyObject *const_str_plain_e; 48 static PyObject *const_str_plain_e;
56 static PyObject *const_str_plain_calledRepeatedly; 49 static PyObject *const_str_plain_calledRepeatedly;
57 static PyObject *const_str_angle_module; 50 static PyObject *const_str_angle_module;
58 static PyObject *const_str_plain_x; 51 static PyObject *const_str_plain_x;
59 extern PyObject *const_tuple_empty; 52 extern PyObject *const_tuple_empty;
60 static PyObject *const_str_plain_c; 53 static PyObject *const_str_plain_c;
61 static PyObject *const_str_digest_5ed1392909ad16e6227b8230f4582352; 54 static PyObject *const_str_digest_5ed1392909ad16e6227b8230f4582352;
n 62 static PyObject *const_str_plain_some; n
63 static PyObject *const_str_digest_63b4389ee4dd41709706c449e8e7119d; 55 static PyObject *const_str_digest_63b4389ee4dd41709706c449e8e7119d;
n 64 static PyObject *const_str_plain_new; n
65 extern PyObject *const_str_plain___loader__; 56 extern PyObject *const_str_plain___loader__;
66 extern PyObject *const_str_plain___main__; 57 extern PyObject *const_str_plain___main__;
n 67 static PyObject *const_tuple_78e2f1ad354bdb7db1a0fda186168ee0_tuple; n
68 static PyObject *const_tuple_ca2f155a28955fc472d4376e2721d689_tuple;
69 static PyObject *const_str_plain_d; 58 static PyObject *const_str_plain_d;
70 extern PyObject *const_str_plain___doc__; 59 extern PyObject *const_str_plain___doc__;
71 extern PyObject *const_str_plain___cached__; 60 extern PyObject *const_str_plain___cached__;
72 static PyObject *module_filename_obj; 61 static PyObject *module_filename_obj;
73 62
74 static bool constants_created = false; 63 static bool constants_created = false;
75 64
76 static void createModuleConstants( void ) 65 static void createModuleConstants( void )
77 { 66 {
n 78     const_str_plain_to = UNSTREAM_STRING( &constant_bin[ 0 ], 2, 1 ); n
79     const_str_plain_b = UNSTREAM_STRING( &constant_bin[ 2 ], 1, 1 ); 67     const_str_plain_b = UNSTREAM_STRING( &constant_bin[ 0 ], 1, 1 );
80     const_str_plain___package__ = UNSTREAM_STRING( &constant_bin[ 3 ], 11, 1 ); 68     const_str_plain___package__ = UNSTREAM_STRING( &constant_bin[ 1 ], 11, 1 );
81     const_tuple_4cee4124c8df2995a8a82b981e580f5e_tuple = PyTuple_New( 6 );
82     const_str_plain_some = UNSTREAM_STRING( &constant_bin[ 14 ], 4, 1 );
83     PyTuple_SET_ITEM( const_tuple_4cee4124c8df2995a8a82b981e580f5e_tuple, 0, const_str_plain_some ); Py_INCREF( const_str_plain_some );
84     const_str_plain_new = UNSTREAM_STRING( &constant_bin[ 18 ], 3, 1 );
85     PyTuple_SET_ITEM( const_tuple_4cee4124c8df2995a8a82b981e580f5e_tuple, 1, const_str_plain_new ); Py_INCREF( const_str_plain_new );
86     const_str_plain_values = UNSTREAM_STRING( &constant_bin[ 21 ], 6, 1 );
87     PyTuple_SET_ITEM( const_tuple_4cee4124c8df2995a8a82b981e580f5e_tuple, 2, const_str_plain_values ); Py_INCREF( const_str_plain_values );
88     PyTuple_SET_ITEM( const_tuple_4cee4124c8df2995a8a82b981e580f5e_tuple, 3, const_str_plain_to ); Py_INCREF( const_str_plain_to );
89     const_str_plain_check = UNSTREAM_STRING( &constant_bin[ 27 ], 5, 1 );
90     PyTuple_SET_ITEM( const_tuple_4cee4124c8df2995a8a82b981e580f5e_tuple, 4, const_str_plain_check ); Py_INCREF( const_str_plain_check );
91     const_str_plain_call = UNSTREAM_STRING( &constant_bin[ 32 ], 4, 1 );
92     PyTuple_SET_ITEM( const_tuple_4cee4124c8df2995a8a82b981e580f5e_tuple, 5, const_str_plain_call ); Py_INCREF( const_str_plain_call );
93     const_tuple_d4571c3ff966778a8b3ba4a6bd66fdef_tuple = PyTuple_New( 6 ); 69     const_tuple_d4571c3ff966778a8b3ba4a6bd66fdef_tuple = PyTuple_New( 6 );
n 94     const_str_plain_a = UNSTREAM_STRING( &constant_bin[ 6 ], 1, 1 ); n 70     const_str_plain_a = UNSTREAM_STRING( &constant_bin[ 4 ], 1, 1 );
95     PyTuple_SET_ITEM( const_tuple_d4571c3ff966778a8b3ba4a6bd66fdef_tuple, 0, const_str_plain_a ); Py_INCREF( const_str_plain_a ); 71     PyTuple_SET_ITEM( const_tuple_d4571c3ff966778a8b3ba4a6bd66fdef_tuple, 0, const_str_plain_a ); Py_INCREF( const_str_plain_a );
96     PyTuple_SET_ITEM( const_tuple_d4571c3ff966778a8b3ba4a6bd66fdef_tuple, 1, const_str_plain_b ); Py_INCREF( const_str_plain_b ); 72     PyTuple_SET_ITEM( const_tuple_d4571c3ff966778a8b3ba4a6bd66fdef_tuple, 1, const_str_plain_b ); Py_INCREF( const_str_plain_b );
n 97     const_str_plain_c = UNSTREAM_STRING( &constant_bin[ 7 ], 1, 1 ); n 73     const_str_plain_c = UNSTREAM_STRING( &constant_bin[ 5 ], 1, 1 );
98     PyTuple_SET_ITEM( const_tuple_d4571c3ff966778a8b3ba4a6bd66fdef_tuple, 2, const_str_plain_c ); Py_INCREF( const_str_plain_c ); 74     PyTuple_SET_ITEM( const_tuple_d4571c3ff966778a8b3ba4a6bd66fdef_tuple, 2, const_str_plain_c ); Py_INCREF( const_str_plain_c );
n 99     const_str_plain_d = UNSTREAM_STRING( &constant_bin[ 36 ], 1, 1 ); n 75     const_str_plain_d = UNSTREAM_STRING( &constant_bin[ 12 ], 1, 1 );
100     PyTuple_SET_ITEM( const_tuple_d4571c3ff966778a8b3ba4a6bd66fdef_tuple, 3, const_str_plain_d ); Py_INCREF( const_str_plain_d ); 76     PyTuple_SET_ITEM( const_tuple_d4571c3ff966778a8b3ba4a6bd66fdef_tuple, 3, const_str_plain_d ); Py_INCREF( const_str_plain_d );
n 101     const_str_plain_e = UNSTREAM_STRING( &constant_bin[ 11 ], 1, 1 ); n 77     const_str_plain_e = UNSTREAM_STRING( &constant_bin[ 9 ], 1, 1 );
102     PyTuple_SET_ITEM( const_tuple_d4571c3ff966778a8b3ba4a6bd66fdef_tuple, 4, const_str_plain_e ); Py_INCREF( const_str_plain_e ); 78     PyTuple_SET_ITEM( const_tuple_d4571c3ff966778a8b3ba4a6bd66fdef_tuple, 4, const_str_plain_e ); Py_INCREF( const_str_plain_e );
n 103     const_str_plain_f = UNSTREAM_STRING( &constant_bin[ 37 ], 1, 1 ); n 79     const_str_plain_f = UNSTREAM_STRING( &constant_bin[ 13 ], 1, 1 );
104     PyTuple_SET_ITEM( const_tuple_d4571c3ff966778a8b3ba4a6bd66fdef_tuple, 5, const_str_plain_f ); Py_INCREF( const_str_plain_f ); 80     PyTuple_SET_ITEM( const_tuple_d4571c3ff966778a8b3ba4a6bd66fdef_tuple, 5, const_str_plain_f ); Py_INCREF( const_str_plain_f );
n 105     const_str_plain_other = UNSTREAM_STRING( &constant_bin[ 38 ], 5, 1 ); n
106     const_int_pos_50000 = PyLong_FromUnsignedLong( 50000ul ); 81     const_int_pos_50000 = PyLong_FromUnsignedLong( 50000ul );
107     const_xrange_0_50000 = BUILTIN_XRANGE3( const_int_0, const_int_pos_50000, const_int_pos_1 ); 82     const_xrange_0_50000 = BUILTIN_XRANGE3( const_int_0, const_int_pos_50000, const_int_pos_1 );
n 108     const_str_plain_compiled_func = UNSTREAM_STRING( &constant_bin[ 43 ], 13, 1 ); n 83     const_str_plain_compiled_func = UNSTREAM_STRING( &constant_bin[ 14 ], 13, 1 );
109     const_tuple_str_digest_5ed1392909ad16e6227b8230f4582352_tuple = PyTuple_New( 1 ); 84     const_tuple_str_digest_5ed1392909ad16e6227b8230f4582352_tuple = PyTuple_New( 1 );
n 110     const_str_digest_5ed1392909ad16e6227b8230f4582352 = UNSTREAM_STRING( &constant_bin[ 56 ], 3, 0 ); n 85     const_str_digest_5ed1392909ad16e6227b8230f4582352 = UNSTREAM_STRING( &constant_bin[ 27 ], 3, 0 );
111     PyTuple_SET_ITEM( const_tuple_str_digest_5ed1392909ad16e6227b8230f4582352_tuple, 0, const_str_digest_5ed1392909ad16e6227b8230f4582352 ); Py_INCREF( const_str_digest_5ed1392909ad16e6227b8230f4582352 ); 86     PyTuple_SET_ITEM( const_tuple_str_digest_5ed1392909ad16e6227b8230f4582352_tuple, 0, const_str_digest_5ed1392909ad16e6227b8230f4582352 ); Py_INCREF( const_str_digest_5ed1392909ad16e6227b8230f4582352 );
n 112     const_str_plain_random = UNSTREAM_STRING( &constant_bin[ 59 ], 6, 1 ); n
113     const_str_plain_calledRepeatedly = UNSTREAM_STRING( &constant_bin[ 65 ], 16, 1 ); 87     const_str_plain_calledRepeatedly = UNSTREAM_STRING( &constant_bin[ 30 ], 16, 1 );
114     const_str_angle_module = UNSTREAM_STRING( &constant_bin[ 81 ], 8, 0 ); 88     const_str_angle_module = UNSTREAM_STRING( &constant_bin[ 46 ], 8, 0 );
115     const_str_plain_x = UNSTREAM_STRING( &constant_bin[ 89 ], 1, 1 ); 89     const_str_plain_x = UNSTREAM_STRING( &constant_bin[ 54 ], 1, 1 );
116     const_str_digest_63b4389ee4dd41709706c449e8e7119d = UNSTREAM_STRING( &constant_bin[ 90 ], 93, 0 ); 90     const_str_digest_63b4389ee4dd41709706c449e8e7119d = UNSTREAM_STRING( &constant_bin[ 55 ], 93, 0 );
117     const_tuple_78e2f1ad354bdb7db1a0fda186168ee0_tuple = PyTuple_New( 6 );
118     PyTuple_SET_ITEM( const_tuple_78e2f1ad354bdb7db1a0fda186168ee0_tuple, 0, const_str_plain_some ); Py_INCREF( const_str_plain_some );
119     PyTuple_SET_ITEM( const_tuple_78e2f1ad354bdb7db1a0fda186168ee0_tuple, 1, const_str_plain_random ); Py_INCREF( const_str_plain_random );
120     PyTuple_SET_ITEM( const_tuple_78e2f1ad354bdb7db1a0fda186168ee0_tuple, 2, const_str_plain_values ); Py_INCREF( const_str_plain_values );
121     PyTuple_SET_ITEM( const_tuple_78e2f1ad354bdb7db1a0fda186168ee0_tuple, 3, const_str_plain_to ); Py_INCREF( const_str_plain_to );
122     PyTuple_SET_ITEM( const_tuple_78e2f1ad354bdb7db1a0fda186168ee0_tuple, 4, const_str_plain_check ); Py_INCREF( const_str_plain_check );
123     PyTuple_SET_ITEM( const_tuple_78e2f1ad354bdb7db1a0fda186168ee0_tuple, 5, const_str_plain_call ); Py_INCREF( const_str_plain_call );
124     const_tuple_ca2f155a28955fc472d4376e2721d689_tuple = PyTuple_New( 6 );
125     PyTuple_SET_ITEM( const_tuple_ca2f155a28955fc472d4376e2721d689_tuple, 0, const_str_plain_some ); Py_INCREF( const_str_plain_some );
126     PyTuple_SET_ITEM( const_tuple_ca2f155a28955fc472d4376e2721d689_tuple, 1, const_str_plain_other ); Py_INCREF( const_str_plain_other );
127     PyTuple_SET_ITEM( const_tuple_ca2f155a28955fc472d4376e2721d689_tuple, 2, const_str_plain_values ); Py_INCREF( const_str_plain_values );
128     PyTuple_SET_ITEM( const_tuple_ca2f155a28955fc472d4376e2721d689_tuple, 3, const_str_plain_to ); Py_INCREF( const_str_plain_to );
129     PyTuple_SET_ITEM( const_tuple_ca2f155a28955fc472d4376e2721d689_tuple, 4, const_str_plain_check ); Py_INCREF( const_str_plain_check );
130     PyTuple_SET_ITEM( const_tuple_ca2f155a28955fc472d4376e2721d689_tuple, 5, const_str_plain_call ); Py_INCREF( const_str_plain_call );
131 91
132     constants_created = true; 92     constants_created = true;
133 } 93 }
134 94
135 #ifndef __NUITKA_NO_ASSERT__ 95 #ifndef __NUITKA_NO_ASSERT__
258 #ifndef __NUITKA_NO_ASSERT__ 218 #ifndef __NUITKA_NO_ASSERT__
259     NUITKA_MAY_BE_UNUSED bool had_error = ERROR_OCCURRED(); 219     NUITKA_MAY_BE_UNUSED bool had_error = ERROR_OCCURRED();
260 #endif 220 #endif
261 221
262     // Local variable declarations. 222     // Local variable declarations.
n 263     PyObject *exception_type = NULL, *exception_value = NULL; n
264     PyTracebackObject *exception_tb = NULL;
265     NUITKA_MAY_BE_UNUSED int exception_lineno = -1;
266     PyObject *tmp_called_name_1;
267     PyObject *tmp_called_name_2;
268     PyObject *tmp_called_name_3;
269     PyObject *tmp_frame_locals;
270     PyObject *tmp_return_value; 223     PyObject *tmp_return_value;
n 271     NUITKA_MAY_BE_UNUSED PyObject *tmp_unused; n
272     static PyFrameObject *cache_frame_function = NULL;
273  
274     PyFrameObject *frame_function;
275  
276     tmp_return_value = NULL; 224     tmp_return_value = NULL;
277 225
278     // Actual function code. 226     // Actual function code.
n 279     MAKE_OR_REUSE_FRAME( cache_frame_function, codeobj_1ae096f32a72f97afc660283bb8ed228, module___main__ ); n
280     frame_function = cache_frame_function;
281  
282     // Push the new frame as the currently active one.
283     pushFrameStack( frame_function );
284  
285     // Mark the frame object as in use, ref count 1 will be up for reuse.
286     Py_INCREF( frame_function );
287     assert( Py_REFCNT( frame_function ) == 2 ); // Frame stack
288  
289 #if PYTHON_VERSION >= 340
290     frame_function->f_executing += 1;
291 #endif
292  
293     // Framed code:
294     tmp_called_name_1 = GET_STRING_DICT_VALUE( moduledict___main__, (Nuitka_StringObject *)const_str_plain_compiled_func );
295  
296     if (unlikely( tmp_called_name_1 == NULL ))
297     {
298         tmp_called_name_1 = GET_STRING_DICT_VALUE( dict_builtin, (Nuitka_StringObject *)const_str_plain_compiled_func );
299     }
300  
301     if ( tmp_called_name_1 == NULL )
302     {
303  
304         exception_type = PyExc_NameError;
305         Py_INCREF( exception_type );
306         exception_value = PyUnicode_FromFormat( "name '%s' is not defined", "compiled_func" );
307         exception_tb = NULL;
308         NORMALIZE_EXCEPTION( &exception_type, &exception_value, &exception_tb );
309         CHAIN_EXCEPTION( exception_value );
310  
311         exception_lineno = 29;
312         goto frame_exception_exit_1;
313     }
314  
315     frame_function->f_lineno = 29;
316     tmp_unused = CALL_FUNCTION_WITH_ARGS6( tmp_called_name_1, &PyTuple_GET_ITEM( const_tuple_78e2f1ad354bdb7db1a0fda186168ee0_tuple, 0 ) );
317  
318     if ( tmp_unused == NULL )
319     {
320         assert( ERROR_OCCURRED() );
321  
322         FETCH_ERROR_OCCURRED( &exception_type, &exception_value, &exception_tb );
323  
324  
325         exception_lineno = 29;
326         goto frame_exception_exit_1;
327     }
328     Py_DECREF( tmp_unused );
329     tmp_called_name_2 = GET_STRING_DICT_VALUE( moduledict___main__, (Nuitka_StringObject *)const_str_plain_compiled_func );
330  
331     if (unlikely( tmp_called_name_2 == NULL ))
332     {
333         tmp_called_name_2 = GET_STRING_DICT_VALUE( dict_builtin, (Nuitka_StringObject *)const_str_plain_compiled_func );
334     }
335  
336     if ( tmp_called_name_2 == NULL )
337     {
338  
339         exception_type = PyExc_NameError;
340         Py_INCREF( exception_type );
341         exception_value = PyUnicode_FromFormat( "name '%s' is not defined", "compiled_func" );
342         exception_tb = NULL;
343         NORMALIZE_EXCEPTION( &exception_type, &exception_value, &exception_tb );
344         CHAIN_EXCEPTION( exception_value );
345  
346         exception_lineno = 30;
347         goto frame_exception_exit_1;
348     }
349  
350     frame_function->f_lineno = 30;
351     tmp_unused = CALL_FUNCTION_WITH_ARGS6( tmp_called_name_2, &PyTuple_GET_ITEM( const_tuple_ca2f155a28955fc472d4376e2721d689_tuple, 0 ) );
352  
353     if ( tmp_unused == NULL )
354     {
355         assert( ERROR_OCCURRED() );
356  
357         FETCH_ERROR_OCCURRED( &exception_type, &exception_value, &exception_tb );
358  
359  
360         exception_lineno = 30;
361         goto frame_exception_exit_1;
362     }
363     Py_DECREF( tmp_unused );
364     tmp_called_name_3 = GET_STRING_DICT_VALUE( moduledict___main__, (Nuitka_StringObject *)const_str_plain_compiled_func );
365  
366     if (unlikely( tmp_called_name_3 == NULL ))
367     {
368         tmp_called_name_3 = GET_STRING_DICT_VALUE( dict_builtin, (Nuitka_StringObject *)const_str_plain_compiled_func );
369     }
370  
371     if ( tmp_called_name_3 == NULL )
372     {
373  
374         exception_type = PyExc_NameError;
375         Py_INCREF( exception_type );
376         exception_value = PyUnicode_FromFormat( "name '%s' is not defined", "compiled_func" );
377         exception_tb = NULL;
378         NORMALIZE_EXCEPTION( &exception_type, &exception_value, &exception_tb );
379         CHAIN_EXCEPTION( exception_value );
380  
381         exception_lineno = 31;
382         goto frame_exception_exit_1;
383     }
384  
385     frame_function->f_lineno = 31;
386     tmp_unused = CALL_FUNCTION_WITH_ARGS6( tmp_called_name_3, &PyTuple_GET_ITEM( const_tuple_4cee4124c8df2995a8a82b981e580f5e_tuple, 0 ) );
387  
388     if ( tmp_unused == NULL )
389     {
390         assert( ERROR_OCCURRED() );
391  
392         FETCH_ERROR_OCCURRED( &exception_type, &exception_value, &exception_tb );
393  
394  
395         exception_lineno = 31;
396         goto frame_exception_exit_1;
397     }
398     Py_DECREF( tmp_unused );
399  
400 #if 0
401     RESTORE_FRAME_EXCEPTION( frame_function );
402 #endif
403     // Put the previous frame back on top.
404     popFrameStack();
405 #if PYTHON_VERSION >= 340
406     frame_function->f_executing -= 1;
407 #endif
408     Py_DECREF( frame_function );
409     goto frame_no_exception_1;
410  
411     frame_exception_exit_1:;
412 #if 0
413     RESTORE_FRAME_EXCEPTION( frame_function );
414 #endif
415  
416     {
417         bool needs_detach = false;
418  
419         if ( exception_tb == NULL )
420         {
421             exception_tb = MAKE_TRACEBACK( frame_function, exception_lineno );
422             needs_detach = true;
423         }
424         else if ( exception_lineno != -1 )
425         {
426             PyTracebackObject *traceback_new = MAKE_TRACEBACK( frame_function, exception_lineno );
427             traceback_new->tb_next = exception_tb;
428             exception_tb = traceback_new;
429  
430             needs_detach = true;
431         }
432  
433         if (needs_detach)
434         {
435  
436             tmp_frame_locals = PyDict_New();
437  
438  
439             detachFrame( exception_tb, tmp_frame_locals );
440         }
441     }
442  
443     popFrameStack();
444  
445 #if PYTHON_VERSION >= 340
446     frame_function->f_executing -= 1;
447 #endif
448     Py_DECREF( frame_function );
449  
450     // Return the error.
451     goto function_exception_exit;
452  
453     frame_no_exception_1:;
454  
455     tmp_return_value = Py_None; 227     tmp_return_value = Py_None;
456     Py_INCREF( tmp_return_value ); 228     Py_INCREF( tmp_return_value );
457     goto function_return_exit; 229     goto function_return_exit;
458 230
459     // Return statement must have exited already. 231     // Return statement must have exited already.
460     NUITKA_CANNOT_GET_HERE( __main__$$$function_2_calledRepeatedly ); 232     NUITKA_CANNOT_GET_HERE( __main__$$$function_2_calledRepeatedly );
461     return NULL; 233     return NULL;
462 234
t 463 function_exception_exit: t
464     assert( exception_type );
465     RESTORE_ERROR_OCCURRED( exception_type, exception_value, exception_tb );
466  
467     return NULL;
468     function_return_exit: 235     function_return_exit:
469 236
470     CHECK_OBJECT( tmp_return_value ); 237     CHECK_OBJECT( tmp_return_value );
471     assert( had_error || !ERROR_OCCURRED() ); 238     assert( had_error || !ERROR_OCCURRED() );
472     return tmp_return_value; 239     return tmp_return_value;