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)61555647437.53846153846143437.78136521681483Nuitka (develop)61005284559.0769230769231438.3744511755775Nuitka (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)71914596437.53846153846143422.3276133246823Nuitka (develop)71272527559.0769230769231423.05783215988026Nuitka (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__;
37 static PyObject *const_tuple_d4571c3ff966778a8b3ba4a6bd66fdef_tuple; 36 static PyObject *const_tuple_d4571c3ff966778a8b3ba4a6bd66fdef_tuple;
n 38 static PyObject *const_tuple_4cee4124c8df2995a8a82b981e580f5e_tuple; n
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;
49 static PyObject *const_str_plain_a; 44 static PyObject *const_str_plain_a;
50 extern PyObject *const_str_plain_print; 45 extern PyObject *const_str_plain_print;
n 51 static PyObject *const_str_plain_call; n
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 static PyObject *const_str_digest_0294e6e623013f39830d44a6f65426cb; 52 static PyObject *const_str_digest_0294e6e623013f39830d44a6f65426cb;
60 extern PyObject *const_tuple_empty; 53 extern PyObject *const_tuple_empty;
61 static PyObject *const_str_plain_c; 54 static PyObject *const_str_plain_c;
62 static PyObject *const_str_digest_5ed1392909ad16e6227b8230f4582352; 55 static PyObject *const_str_digest_5ed1392909ad16e6227b8230f4582352;
n 63 static PyObject *const_str_plain_some; n
64 static PyObject *const_str_plain_new;
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_d4571c3ff966778a8b3ba4a6bd66fdef_tuple = PyTuple_New( 6 ); 69     const_tuple_d4571c3ff966778a8b3ba4a6bd66fdef_tuple = PyTuple_New( 6 );
n 82     const_str_plain_a = UNSTREAM_STRING( &constant_bin[ 6 ], 1, 1 ); n 70     const_str_plain_a = UNSTREAM_STRING( &constant_bin[ 4 ], 1, 1 );
83     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 );
84     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 85     const_str_plain_c = UNSTREAM_STRING( &constant_bin[ 7 ], 1, 1 ); n 73     const_str_plain_c = UNSTREAM_STRING( &constant_bin[ 5 ], 1, 1 );
86     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 87     const_str_plain_d = UNSTREAM_STRING( &constant_bin[ 14 ], 1, 1 ); n 75     const_str_plain_d = UNSTREAM_STRING( &constant_bin[ 12 ], 1, 1 );
88     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 89     const_str_plain_e = UNSTREAM_STRING( &constant_bin[ 11 ], 1, 1 ); n 77     const_str_plain_e = UNSTREAM_STRING( &constant_bin[ 9 ], 1, 1 );
90     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 91     const_str_plain_f = UNSTREAM_STRING( &constant_bin[ 15 ], 1, 1 ); n 79     const_str_plain_f = UNSTREAM_STRING( &constant_bin[ 13 ], 1, 1 );
92     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 93     const_tuple_4cee4124c8df2995a8a82b981e580f5e_tuple = PyTuple_New( 6 ); n
94     const_str_plain_some = UNSTREAM_STRING( &constant_bin[ 16 ], 4, 1 );
95     PyTuple_SET_ITEM( const_tuple_4cee4124c8df2995a8a82b981e580f5e_tuple, 0, const_str_plain_some ); Py_INCREF( const_str_plain_some );
96     const_str_plain_new = UNSTREAM_STRING( &constant_bin[ 20 ], 3, 1 );
97     PyTuple_SET_ITEM( const_tuple_4cee4124c8df2995a8a82b981e580f5e_tuple, 1, const_str_plain_new ); Py_INCREF( const_str_plain_new );
98     const_str_plain_values = UNSTREAM_STRING( &constant_bin[ 23 ], 6, 1 );
99     PyTuple_SET_ITEM( const_tuple_4cee4124c8df2995a8a82b981e580f5e_tuple, 2, const_str_plain_values ); Py_INCREF( const_str_plain_values );
100     PyTuple_SET_ITEM( const_tuple_4cee4124c8df2995a8a82b981e580f5e_tuple, 3, const_str_plain_to ); Py_INCREF( const_str_plain_to );
101     const_str_plain_check = UNSTREAM_STRING( &constant_bin[ 29 ], 5, 1 );
102     PyTuple_SET_ITEM( const_tuple_4cee4124c8df2995a8a82b981e580f5e_tuple, 4, const_str_plain_check ); Py_INCREF( const_str_plain_check );
103     const_str_plain_call = UNSTREAM_STRING( &constant_bin[ 34 ], 4, 1 );
104     PyTuple_SET_ITEM( const_tuple_4cee4124c8df2995a8a82b981e580f5e_tuple, 5, const_str_plain_call ); Py_INCREF( const_str_plain_call );
105     const_str_plain_other = UNSTREAM_STRING( &constant_bin[ 38 ], 5, 1 );
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_0294e6e623013f39830d44a6f65426cb = UNSTREAM_STRING( &constant_bin[ 90 ], 93, 0 ); 90     const_str_digest_0294e6e623013f39830d44a6f65426cb = 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_return_value; 223     PyObject *tmp_return_value;
n 270     NUITKA_MAY_BE_UNUSED PyObject *tmp_unused; n
271     static struct Nuitka_FrameObject *cache_frame_function = NULL;
272  
273     struct Nuitka_FrameObject *frame_function;
274  
275     tmp_return_value = NULL; 224     tmp_return_value = NULL;
276 225
277     // Actual function code. 226     // Actual function code.
n 278     MAKE_OR_REUSE_FRAME( cache_frame_function, codeobj_1fa3ba1748e95e19659c70b981d43b75, module___main__, 0 ); n
279     frame_function = cache_frame_function;
280  
281     // Push the new frame as the currently active one.
282     pushFrameStack( frame_function );
283  
284     // Mark the frame object as in use, ref count 1 will be up for reuse.
285     assert( Py_REFCNT( frame_function ) == 2 ); // Frame stack
286  
287     // Framed code:
288     tmp_called_name_1 = GET_STRING_DICT_VALUE( moduledict___main__, (Nuitka_StringObject *)const_str_plain_compiled_func );
289  
290     if (unlikely( tmp_called_name_1 == NULL ))
291     {
292         tmp_called_name_1 = GET_STRING_DICT_VALUE( dict_builtin, (Nuitka_StringObject *)const_str_plain_compiled_func );
293     }
294  
295     if ( tmp_called_name_1 == NULL )
296     {
297  
298         exception_type = PyExc_NameError;
299         Py_INCREF( exception_type );
300         exception_value = PyUnicode_FromFormat( "name '%s' is not defined", "compiled_func" );
301         exception_tb = NULL;
302         NORMALIZE_EXCEPTION( &exception_type, &exception_value, &exception_tb );
303         CHAIN_EXCEPTION( exception_value );
304  
305         exception_lineno = 29;
306  
307         goto frame_exception_exit_1;
308     }
309  
310     frame_function->m_frame.f_lineno = 29;
311     tmp_unused = CALL_FUNCTION_WITH_ARGS6( tmp_called_name_1, &PyTuple_GET_ITEM( const_tuple_78e2f1ad354bdb7db1a0fda186168ee0_tuple, 0 ) );
312  
313     if ( tmp_unused == NULL )
314     {
315         assert( ERROR_OCCURRED() );
316  
317         FETCH_ERROR_OCCURRED( &exception_type, &exception_value, &exception_tb );
318  
319  
320         exception_lineno = 29;
321  
322         goto frame_exception_exit_1;
323     }
324     Py_DECREF( tmp_unused );
325     tmp_called_name_2 = GET_STRING_DICT_VALUE( moduledict___main__, (Nuitka_StringObject *)const_str_plain_compiled_func );
326  
327     if (unlikely( tmp_called_name_2 == NULL ))
328     {
329         tmp_called_name_2 = GET_STRING_DICT_VALUE( dict_builtin, (Nuitka_StringObject *)const_str_plain_compiled_func );
330     }
331  
332     if ( tmp_called_name_2 == NULL )
333     {
334  
335         exception_type = PyExc_NameError;
336         Py_INCREF( exception_type );
337         exception_value = PyUnicode_FromFormat( "name '%s' is not defined", "compiled_func" );
338         exception_tb = NULL;
339         NORMALIZE_EXCEPTION( &exception_type, &exception_value, &exception_tb );
340         CHAIN_EXCEPTION( exception_value );
341  
342         exception_lineno = 30;
343  
344         goto frame_exception_exit_1;
345     }
346  
347     frame_function->m_frame.f_lineno = 30;
348     tmp_unused = CALL_FUNCTION_WITH_ARGS6( tmp_called_name_2, &PyTuple_GET_ITEM( const_tuple_ca2f155a28955fc472d4376e2721d689_tuple, 0 ) );
349  
350     if ( tmp_unused == NULL )
351     {
352         assert( ERROR_OCCURRED() );
353  
354         FETCH_ERROR_OCCURRED( &exception_type, &exception_value, &exception_tb );
355  
356  
357         exception_lineno = 30;
358  
359         goto frame_exception_exit_1;
360     }
361     Py_DECREF( tmp_unused );
362     tmp_called_name_3 = GET_STRING_DICT_VALUE( moduledict___main__, (Nuitka_StringObject *)const_str_plain_compiled_func );
363  
364     if (unlikely( tmp_called_name_3 == NULL ))
365     {
366         tmp_called_name_3 = GET_STRING_DICT_VALUE( dict_builtin, (Nuitka_StringObject *)const_str_plain_compiled_func );
367     }
368  
369     if ( tmp_called_name_3 == NULL )
370     {
371  
372         exception_type = PyExc_NameError;
373         Py_INCREF( exception_type );
374         exception_value = PyUnicode_FromFormat( "name '%s' is not defined", "compiled_func" );
375         exception_tb = NULL;
376         NORMALIZE_EXCEPTION( &exception_type, &exception_value, &exception_tb );
377         CHAIN_EXCEPTION( exception_value );
378  
379         exception_lineno = 31;
380  
381         goto frame_exception_exit_1;
382     }
383  
384     frame_function->m_frame.f_lineno = 31;
385     tmp_unused = CALL_FUNCTION_WITH_ARGS6( tmp_called_name_3, &PyTuple_GET_ITEM( const_tuple_4cee4124c8df2995a8a82b981e580f5e_tuple, 0 ) );
386  
387     if ( tmp_unused == NULL )
388     {
389         assert( ERROR_OCCURRED() );
390  
391         FETCH_ERROR_OCCURRED( &exception_type, &exception_value, &exception_tb );
392  
393  
394         exception_lineno = 31;
395  
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  
404     // Put the previous frame back on top.
405     popFrameStack();
406  
407     goto frame_no_exception_1;
408  
409     frame_exception_exit_1:;
410  
411 #if 0
412     RESTORE_FRAME_EXCEPTION( frame_function );
413 #endif
414  
415     if ( exception_tb == NULL )
416     {
417         exception_tb = MAKE_TRACEBACK( frame_function, exception_lineno );
418     }
419     else if ( exception_tb->tb_frame != &frame_function->m_frame )
420     {
421         exception_tb = ADD_TRACEBACK( exception_tb, frame_function, exception_lineno );
422     }
423  
424     Nuitka_Frame_AttachLocals( (struct Nuitka_FrameObject *)frame_function, ""  );
425  
426     // Release cached frame.
427     if ( frame_function == cache_frame_function )
428     {
429         Py_DECREF( frame_function );
430     }
431     cache_frame_function = NULL;
432  
433     assertFrameObject( frame_function );
434  
435  
436     // Put the previous frame back on top.
437     popFrameStack();
438  
439     // Return the error.
440     goto function_exception_exit;
441  
442     frame_no_exception_1:;
443  
444     tmp_return_value = Py_None; 227     tmp_return_value = Py_None;
445     Py_INCREF( tmp_return_value ); 228     Py_INCREF( tmp_return_value );
446     goto function_return_exit; 229     goto function_return_exit;
447 230
448     // Return statement must have exited already. 231     // Return statement must have exited already.
449     NUITKA_CANNOT_GET_HERE( __main__$$$function_2_calledRepeatedly ); 232     NUITKA_CANNOT_GET_HERE( __main__$$$function_2_calledRepeatedly );
450     return NULL; 233     return NULL;
451 234
t 452 function_exception_exit: t
453     assert( exception_type );
454     RESTORE_ERROR_OCCURRED( exception_type, exception_value, exception_tb );
455  
456     return NULL;
457     function_return_exit: 235     function_return_exit:
458 236
459     CHECK_OBJECT( tmp_return_value ); 237     CHECK_OBJECT( tmp_return_value );
460     assert( had_error || !ERROR_OCCURRED() ); 238     assert( had_error || !ERROR_OCCURRED() );
461     return tmp_return_value; 239     return tmp_return_value;