Construct CallUncompiledFunctionPosArgs

Performance Diagrams

Construct CallUncompiledFunctionPosArgs 002000000020000000400000004000000060000000600000008000000080000000100000000100000000120000000120000000140000000140000000160000000160000000CPython 2.7Nuitka (master)Nuitka (develop)Nuitka (factory)16659062288.11538461538461257.0CPython 2.7109942384240.03846153846155341.0302470396794Nuitka (master)109941569391.96153846153845341.0314559855135Nuitka (develop)109941699543.8846153846154341.0312631475276Nuitka (factory)Construct CallUncompiledFunctionPosArgsTicks Construct CallUncompiledFunctionPosArgs 00100000001000000020000000200000003000000030000000400000004000000050000000500000006000000060000000700000007000000080000000800000009000000090000000100000000100000000110000000110000000120000000120000000130000000130000000140000000140000000150000000150000000CPython 3.5Nuitka (master)Nuitka (develop)Nuitka (factory)15290765088.11538461538461257.0CPython 3.5102813072240.03846153846155337.95828370663855Nuitka (master)102811464391.96153846153845337.9608824094403Nuitka (develop)102812131543.8846153846154337.9598044649323Nuitka (factory)Construct CallUncompiledFunctionPosArgsTicks

Source Code with Construct

from __future__ import print_function

exec("""
def python_func(a,b,c,d,e,f):
    pass
""")

def calledRepeatedly():
    # This is supposed to make a call to a non-compiled function, which is
    # being optimized separately.
# construct_begin
    python_func("some", "random", "values", "to", "check", "call")
    python_func("some", "other", "values", "to", "check", "call")
    python_func("some", "new", "values", "to", "check", "call")
# construct_alternative



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

print("OK.")

Source Code without Construct

from __future__ import print_function

exec("""
def python_func(a,b,c,d,e,f):
    pass
""")

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
26 26
27 def calledRepeatedly(): 27 def calledRepeatedly():
28     # This is supposed to make a call to a non-compiled function, which is 28     # This is supposed to make a call to a non-compiled function, which is
29     # being optimized separately. 29     # being optimized separately.
30 # construct_begin 30 # construct_begin
n 31     python_func("some", "random", "values", "to", "check", "call") n
32     python_func("some", "other", "values", "to", "check", "call")
33     python_func("some", "new", "values", "to", "check", "call")
34 # construct_alternative
35 31
36 32
t t 33  
34 # construct_alternative
35     pass
36 # construct_end
37 37
38 import itertools 38 import itertools
39 for x in itertools.repeat(None, 50000): 39 for x in itertools.repeat(None, 50000):
40     calledRepeatedly() 40     calledRepeatedly()
41 41

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_itertools; 34 static PyObject *const_str_plain_itertools;
36 static PyObject *const_str_digest_40641b58ed6f61cc974b85218932eb8d; 35 static PyObject *const_str_digest_40641b58ed6f61cc974b85218932eb8d;
37 static PyObject *const_str_digest_67ff4d0c90306abc7aa08feb6101aca5; 36 static PyObject *const_str_digest_67ff4d0c90306abc7aa08feb6101aca5;
n 38 static PyObject *const_tuple_4cee4124c8df2995a8a82b981e580f5e_tuple; n
39 static PyObject *const_str_plain_values;
40 extern PyObject *const_str_plain___file__; 37 extern PyObject *const_str_plain___file__;
n 41 static PyObject *const_str_plain_other; n
42 extern PyObject *const_int_0; 38 extern PyObject *const_int_0;
n 43 static PyObject *const_str_plain_check; n
44 extern PyObject *const_str_plain_print; 39 extern PyObject *const_str_plain_print;
n 45 static PyObject *const_str_plain_call; n
46 static PyObject *const_int_pos_50000; 40 static PyObject *const_int_pos_50000;
47 static PyObject *const_tuple_str_digest_5ed1392909ad16e6227b8230f4582352_tuple; 41 static PyObject *const_tuple_str_digest_5ed1392909ad16e6227b8230f4582352_tuple;
n 48 static PyObject *const_str_plain_random; n
49 static PyObject *const_str_plain_print_function; 42 static PyObject *const_str_plain_print_function;
50 static PyObject *const_str_plain_calledRepeatedly; 43 static PyObject *const_str_plain_calledRepeatedly;
51 static PyObject *const_str_angle_module; 44 static PyObject *const_str_angle_module;
52 static PyObject *const_str_plain_None; 45 static PyObject *const_str_plain_None;
53 static PyObject *const_str_plain_x; 46 static PyObject *const_str_plain_x;
54 extern PyObject *const_tuple_empty; 47 extern PyObject *const_tuple_empty;
55 static PyObject *const_str_digest_5ed1392909ad16e6227b8230f4582352; 48 static PyObject *const_str_digest_5ed1392909ad16e6227b8230f4582352;
n 56 static PyObject *const_str_plain_python_func; n
57 static PyObject *const_str_plain_some;
58 static PyObject *const_str_plain_repeat; 49 static PyObject *const_str_plain_repeat;
n 59 static PyObject *const_str_plain_new; n
60 static PyObject *const_tuple_none_int_pos_50000_tuple; 50 static PyObject *const_tuple_none_int_pos_50000_tuple;
61 extern PyObject *const_str_plain___main__; 51 extern PyObject *const_str_plain___main__;
n 62 static PyObject *const_tuple_78e2f1ad354bdb7db1a0fda186168ee0_tuple; n
63 static PyObject *const_str_angle_string; 52 static PyObject *const_str_angle_string;
n 64 static PyObject *const_tuple_ca2f155a28955fc472d4376e2721d689_tuple; n
65 extern PyObject *const_str_plain___doc__; 53 extern PyObject *const_str_plain___doc__;
66 extern PyObject *const_str_plain___cached__; 54 extern PyObject *const_str_plain___cached__;
67 static PyObject *const_str_plain_exec; 55 static PyObject *const_str_plain_exec;
68 static PyObject *module_filename_obj; 56 static PyObject *module_filename_obj;
69 57
70 static bool constants_created = false; 58 static bool constants_created = false;
71 59
72 static void createModuleConstants( void ) 60 static void createModuleConstants( void )
73 { 61 {
n 74     const_str_plain_to = UNSTREAM_STRING_ASCII( &constant_bin[ 0 ], 2, 1 ); n
75     const_str_plain_itertools = UNSTREAM_STRING_ASCII( &constant_bin[ 2 ], 9, 1 ); 62     const_str_plain_itertools = UNSTREAM_STRING_ASCII( &constant_bin[ 0 ], 9, 1 );
76     const_str_digest_40641b58ed6f61cc974b85218932eb8d = UNSTREAM_STRING_ASCII( &constant_bin[ 11 ], 40, 0 ); 63     const_str_digest_40641b58ed6f61cc974b85218932eb8d = UNSTREAM_STRING_ASCII( &constant_bin[ 9 ], 40, 0 );
77     const_str_digest_67ff4d0c90306abc7aa08feb6101aca5 = UNSTREAM_STRING_ASCII( &constant_bin[ 51 ], 80, 0 ); 64     const_str_digest_67ff4d0c90306abc7aa08feb6101aca5 = UNSTREAM_STRING_ASCII( &constant_bin[ 49 ], 80, 0 );
78     const_tuple_4cee4124c8df2995a8a82b981e580f5e_tuple = PyTuple_New( 6 );
79     const_str_plain_some = UNSTREAM_STRING_ASCII( &constant_bin[ 131 ], 4, 1 );
80     PyTuple_SET_ITEM( const_tuple_4cee4124c8df2995a8a82b981e580f5e_tuple, 0, const_str_plain_some ); Py_INCREF( const_str_plain_some );
81     const_str_plain_new = UNSTREAM_STRING_ASCII( &constant_bin[ 135 ], 3, 1 );
82     PyTuple_SET_ITEM( const_tuple_4cee4124c8df2995a8a82b981e580f5e_tuple, 1, const_str_plain_new ); Py_INCREF( const_str_plain_new );
83     const_str_plain_values = UNSTREAM_STRING_ASCII( &constant_bin[ 138 ], 6, 1 );
84     PyTuple_SET_ITEM( const_tuple_4cee4124c8df2995a8a82b981e580f5e_tuple, 2, const_str_plain_values ); Py_INCREF( const_str_plain_values );
85     PyTuple_SET_ITEM( const_tuple_4cee4124c8df2995a8a82b981e580f5e_tuple, 3, const_str_plain_to ); Py_INCREF( const_str_plain_to );
86     const_str_plain_check = UNSTREAM_STRING_ASCII( &constant_bin[ 144 ], 5, 1 );
87     PyTuple_SET_ITEM( const_tuple_4cee4124c8df2995a8a82b981e580f5e_tuple, 4, const_str_plain_check ); Py_INCREF( const_str_plain_check );
88     const_str_plain_call = UNSTREAM_STRING_ASCII( &constant_bin[ 149 ], 4, 1 );
89     PyTuple_SET_ITEM( const_tuple_4cee4124c8df2995a8a82b981e580f5e_tuple, 5, const_str_plain_call ); Py_INCREF( const_str_plain_call );
90     const_str_plain_other = UNSTREAM_STRING_ASCII( &constant_bin[ 153 ], 5, 1 );
91     const_int_pos_50000 = PyLong_FromUnsignedLong( 50000ul ); 65     const_int_pos_50000 = PyLong_FromUnsignedLong( 50000ul );
92     const_tuple_str_digest_5ed1392909ad16e6227b8230f4582352_tuple = PyTuple_New( 1 ); 66     const_tuple_str_digest_5ed1392909ad16e6227b8230f4582352_tuple = PyTuple_New( 1 );
n 93     const_str_digest_5ed1392909ad16e6227b8230f4582352 = UNSTREAM_STRING_ASCII( &constant_bin[ 158 ], 3, 0 ); n 67     const_str_digest_5ed1392909ad16e6227b8230f4582352 = UNSTREAM_STRING_ASCII( &constant_bin[ 129 ], 3, 0 );
94     PyTuple_SET_ITEM( const_tuple_str_digest_5ed1392909ad16e6227b8230f4582352_tuple, 0, const_str_digest_5ed1392909ad16e6227b8230f4582352 ); Py_INCREF( const_str_digest_5ed1392909ad16e6227b8230f4582352 ); 68     PyTuple_SET_ITEM( const_tuple_str_digest_5ed1392909ad16e6227b8230f4582352_tuple, 0, const_str_digest_5ed1392909ad16e6227b8230f4582352 ); Py_INCREF( const_str_digest_5ed1392909ad16e6227b8230f4582352 );
n 95     const_str_plain_random = UNSTREAM_STRING_ASCII( &constant_bin[ 161 ], 6, 1 ); n
96     const_str_plain_print_function = UNSTREAM_STRING_ASCII( &constant_bin[ 167 ], 14, 1 ); 69     const_str_plain_print_function = UNSTREAM_STRING_ASCII( &constant_bin[ 132 ], 14, 1 );
97     const_str_plain_calledRepeatedly = UNSTREAM_STRING_ASCII( &constant_bin[ 181 ], 16, 1 ); 70     const_str_plain_calledRepeatedly = UNSTREAM_STRING_ASCII( &constant_bin[ 146 ], 16, 1 );
98     const_str_angle_module = UNSTREAM_STRING_ASCII( &constant_bin[ 197 ], 8, 0 ); 71     const_str_angle_module = UNSTREAM_STRING_ASCII( &constant_bin[ 162 ], 8, 0 );
99     const_str_plain_None = UNSTREAM_STRING_ASCII( &constant_bin[ 205 ], 4, 1 ); 72     const_str_plain_None = UNSTREAM_STRING_ASCII( &constant_bin[ 170 ], 4, 1 );
100     const_str_plain_x = UNSTREAM_STRING_ASCII( &constant_bin[ 76 ], 1, 1 ); 73     const_str_plain_x = UNSTREAM_STRING_ASCII( &constant_bin[ 74 ], 1, 1 );
101     const_str_plain_python_func = UNSTREAM_STRING_ASCII( &constant_bin[ 16 ], 11, 1 );
102     const_str_plain_repeat = UNSTREAM_STRING_ASCII( &constant_bin[ 209 ], 6, 1 ); 74     const_str_plain_repeat = UNSTREAM_STRING_ASCII( &constant_bin[ 174 ], 6, 1 );
103     const_tuple_none_int_pos_50000_tuple = PyTuple_New( 2 ); 75     const_tuple_none_int_pos_50000_tuple = PyTuple_New( 2 );
104     PyTuple_SET_ITEM( const_tuple_none_int_pos_50000_tuple, 0, Py_None ); Py_INCREF( Py_None ); 76     PyTuple_SET_ITEM( const_tuple_none_int_pos_50000_tuple, 0, Py_None ); Py_INCREF( Py_None );
105     PyTuple_SET_ITEM( const_tuple_none_int_pos_50000_tuple, 1, const_int_pos_50000 ); Py_INCREF( const_int_pos_50000 ); 77     PyTuple_SET_ITEM( const_tuple_none_int_pos_50000_tuple, 1, const_int_pos_50000 ); Py_INCREF( const_int_pos_50000 );
n 106     const_tuple_78e2f1ad354bdb7db1a0fda186168ee0_tuple = PyTuple_New( 6 ); n
107     PyTuple_SET_ITEM( const_tuple_78e2f1ad354bdb7db1a0fda186168ee0_tuple, 0, const_str_plain_some ); Py_INCREF( const_str_plain_some );
108     PyTuple_SET_ITEM( const_tuple_78e2f1ad354bdb7db1a0fda186168ee0_tuple, 1, const_str_plain_random ); Py_INCREF( const_str_plain_random );
109     PyTuple_SET_ITEM( const_tuple_78e2f1ad354bdb7db1a0fda186168ee0_tuple, 2, const_str_plain_values ); Py_INCREF( const_str_plain_values );
110     PyTuple_SET_ITEM( const_tuple_78e2f1ad354bdb7db1a0fda186168ee0_tuple, 3, const_str_plain_to ); Py_INCREF( const_str_plain_to );
111     PyTuple_SET_ITEM( const_tuple_78e2f1ad354bdb7db1a0fda186168ee0_tuple, 4, const_str_plain_check ); Py_INCREF( const_str_plain_check );
112     PyTuple_SET_ITEM( const_tuple_78e2f1ad354bdb7db1a0fda186168ee0_tuple, 5, const_str_plain_call ); Py_INCREF( const_str_plain_call );
113     const_str_angle_string = UNSTREAM_STRING_ASCII( &constant_bin[ 215 ], 8, 0 ); 78     const_str_angle_string = UNSTREAM_STRING_ASCII( &constant_bin[ 180 ], 8, 0 );
114     const_tuple_ca2f155a28955fc472d4376e2721d689_tuple = PyTuple_New( 6 );
115     PyTuple_SET_ITEM( const_tuple_ca2f155a28955fc472d4376e2721d689_tuple, 0, const_str_plain_some ); Py_INCREF( const_str_plain_some );
116     PyTuple_SET_ITEM( const_tuple_ca2f155a28955fc472d4376e2721d689_tuple, 1, const_str_plain_other ); Py_INCREF( const_str_plain_other );
117     PyTuple_SET_ITEM( const_tuple_ca2f155a28955fc472d4376e2721d689_tuple, 2, const_str_plain_values ); Py_INCREF( const_str_plain_values );
118     PyTuple_SET_ITEM( const_tuple_ca2f155a28955fc472d4376e2721d689_tuple, 3, const_str_plain_to ); Py_INCREF( const_str_plain_to );
119     PyTuple_SET_ITEM( const_tuple_ca2f155a28955fc472d4376e2721d689_tuple, 4, const_str_plain_check ); Py_INCREF( const_str_plain_check );
120     PyTuple_SET_ITEM( const_tuple_ca2f155a28955fc472d4376e2721d689_tuple, 5, const_str_plain_call ); Py_INCREF( const_str_plain_call );
121     const_str_plain_exec = UNSTREAM_STRING_ASCII( &constant_bin[ 223 ], 4, 1 ); 79     const_str_plain_exec = UNSTREAM_STRING_ASCII( &constant_bin[ 188 ], 4, 1 );
122 80
123     constants_created = true; 81     constants_created = true;
124 } 82 }
125 83
126 #ifndef __NUITKA_NO_ASSERT__ 84 #ifndef __NUITKA_NO_ASSERT__
133 } 91 }
134 #endif 92 #endif
135 93
136 // The module code objects. 94 // The module code objects.
137 static PyCodeObject *codeobj_b04c7bb0c3c7bbf0269015a8105635d2; 95 static PyCodeObject *codeobj_b04c7bb0c3c7bbf0269015a8105635d2;
n 138 static PyCodeObject *codeobj_f3868f09942da1cc830992416f7e1503; n 96 static PyCodeObject *codeobj_42b83fddbc8474b1e5a1a00288816ee0;
139 /* For use in "MainProgram.c". */ 97 /* For use in "MainProgram.c". */
140 PyCodeObject *codeobj_main = NULL; 98 PyCodeObject *codeobj_main = NULL;
141 99
142 static void createModuleCodeObjects(void) 100 static void createModuleCodeObjects(void)
143 { 101 {
144     module_filename_obj = const_str_digest_67ff4d0c90306abc7aa08feb6101aca5; 102     module_filename_obj = const_str_digest_67ff4d0c90306abc7aa08feb6101aca5;
145     codeobj_b04c7bb0c3c7bbf0269015a8105635d2 = MAKE_CODEOBJ( module_filename_obj, const_str_angle_module, 1, const_tuple_empty, 0, 0, CO_NOFREE ); 103     codeobj_b04c7bb0c3c7bbf0269015a8105635d2 = MAKE_CODEOBJ( module_filename_obj, const_str_angle_module, 1, const_tuple_empty, 0, 0, CO_NOFREE );
146     codeobj_main = codeobj_b04c7bb0c3c7bbf0269015a8105635d2; 104     codeobj_main = codeobj_b04c7bb0c3c7bbf0269015a8105635d2;
n 147     codeobj_f3868f09942da1cc830992416f7e1503 = MAKE_CODEOBJ( module_filename_obj, const_str_plain_calledRepeatedly, 27, const_tuple_empty, 0, 0, CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE ); n 105     codeobj_42b83fddbc8474b1e5a1a00288816ee0 = MAKE_CODEOBJ( module_filename_obj, const_str_plain_calledRepeatedly, 27, const_tuple_empty, 0, 0, CO_NOFREE );
148 } 106 }
149 107
150 // The module function declarations. 108 // The module function declarations.
151 static PyObject *MAKE_FUNCTION___main__$$$function_1_calledRepeatedly(  ); 109 static PyObject *MAKE_FUNCTION___main__$$$function_1_calledRepeatedly(  );
152 110
158 #ifndef __NUITKA_NO_ASSERT__ 116 #ifndef __NUITKA_NO_ASSERT__
159     NUITKA_MAY_BE_UNUSED bool had_error = ERROR_OCCURRED(); 117     NUITKA_MAY_BE_UNUSED bool had_error = ERROR_OCCURRED();
160 #endif 118 #endif
161 119
162     // Local variable declarations. 120     // Local variable declarations.
n 163     struct Nuitka_FrameObject *frame_f3868f09942da1cc830992416f7e1503; n
164     NUITKA_MAY_BE_UNUSED char const *type_description_1 = NULL;
165     PyObject *exception_type = NULL;
166     PyObject *exception_value = NULL;
167     PyTracebackObject *exception_tb = NULL;
168     NUITKA_MAY_BE_UNUSED int exception_lineno = 0;
169     static struct Nuitka_FrameObject *cache_frame_f3868f09942da1cc830992416f7e1503 = NULL;
170     PyObject *tmp_return_value = NULL; 121     PyObject *tmp_return_value = NULL;
171 122
172     // Actual function code. 123     // Actual function code.
n 173     MAKE_OR_REUSE_FRAME( cache_frame_f3868f09942da1cc830992416f7e1503, codeobj_f3868f09942da1cc830992416f7e1503, module___main__, 0 ); n
174     frame_f3868f09942da1cc830992416f7e1503 = cache_frame_f3868f09942da1cc830992416f7e1503;
175  
176     // Push the new frame as the currently active one.
177     pushFrameStack( frame_f3868f09942da1cc830992416f7e1503 );
178  
179     // Mark the frame object as in use, ref count 1 will be up for reuse.
180     assert( Py_REFCNT( frame_f3868f09942da1cc830992416f7e1503 ) == 2 ); // Frame stack
181  
182     // Framed code:
183     {
184     PyObject *tmp_called_name_1;
185     PyObject *tmp_mvar_value_1;
186     PyObject *tmp_call_result_1;
187     tmp_mvar_value_1 = GET_STRING_DICT_VALUE( moduledict___main__, (Nuitka_StringObject *)const_str_plain_python_func );
188  
189     if (unlikely( tmp_mvar_value_1 == NULL ))
190     {
191         tmp_mvar_value_1 = GET_STRING_DICT_VALUE( dict_builtin, (Nuitka_StringObject *)const_str_plain_python_func );
192     }
193  
194     if ( tmp_mvar_value_1 == NULL )
195     {
196  
197         exception_type = PyExc_NameError;
198         Py_INCREF( exception_type );
199         exception_value = PyUnicode_FromFormat( "name '%s' is not defined", "python_func" );
200         exception_tb = NULL;
201         NORMALIZE_EXCEPTION( &exception_type, &exception_value, &exception_tb );
202         CHAIN_EXCEPTION( exception_value );
203  
204         exception_lineno = 31;
205  
206         goto frame_exception_exit_1;
207     }
208  
209     tmp_called_name_1 = tmp_mvar_value_1;
210     frame_f3868f09942da1cc830992416f7e1503->m_frame.f_lineno = 31;
211     tmp_call_result_1 = CALL_FUNCTION_WITH_ARGS6( tmp_called_name_1, &PyTuple_GET_ITEM( const_tuple_78e2f1ad354bdb7db1a0fda186168ee0_tuple, 0 ) );
212  
213     if ( tmp_call_result_1 == NULL )
214     {
215         assert( ERROR_OCCURRED() );
216  
217         FETCH_ERROR_OCCURRED( &exception_type, &exception_value, &exception_tb );
218  
219  
220         exception_lineno = 31;
221  
222         goto frame_exception_exit_1;
223     }
224     Py_DECREF( tmp_call_result_1 );
225     }
226     {
227     PyObject *tmp_called_name_2;
228     PyObject *tmp_mvar_value_2;
229     PyObject *tmp_call_result_2;
230     tmp_mvar_value_2 = GET_STRING_DICT_VALUE( moduledict___main__, (Nuitka_StringObject *)const_str_plain_python_func );
231  
232     if (unlikely( tmp_mvar_value_2 == NULL ))
233     {
234         tmp_mvar_value_2 = GET_STRING_DICT_VALUE( dict_builtin, (Nuitka_StringObject *)const_str_plain_python_func );
235     }
236  
237     if ( tmp_mvar_value_2 == NULL )
238     {
239  
240         exception_type = PyExc_NameError;
241         Py_INCREF( exception_type );
242         exception_value = PyUnicode_FromFormat( "name '%s' is not defined", "python_func" );
243         exception_tb = NULL;
244         NORMALIZE_EXCEPTION( &exception_type, &exception_value, &exception_tb );
245         CHAIN_EXCEPTION( exception_value );
246  
247         exception_lineno = 32;
248  
249         goto frame_exception_exit_1;
250     }
251  
252     tmp_called_name_2 = tmp_mvar_value_2;
253     frame_f3868f09942da1cc830992416f7e1503->m_frame.f_lineno = 32;
254     tmp_call_result_2 = CALL_FUNCTION_WITH_ARGS6( tmp_called_name_2, &PyTuple_GET_ITEM( const_tuple_ca2f155a28955fc472d4376e2721d689_tuple, 0 ) );
255  
256     if ( tmp_call_result_2 == NULL )
257     {
258         assert( ERROR_OCCURRED() );
259  
260         FETCH_ERROR_OCCURRED( &exception_type, &exception_value, &exception_tb );
261  
262  
263         exception_lineno = 32;
264  
265         goto frame_exception_exit_1;
266     }
267     Py_DECREF( tmp_call_result_2 );
268     }
269     {
270     PyObject *tmp_called_name_3;
271     PyObject *tmp_mvar_value_3;
272     PyObject *tmp_call_result_3;
273     tmp_mvar_value_3 = GET_STRING_DICT_VALUE( moduledict___main__, (Nuitka_StringObject *)const_str_plain_python_func );
274  
275     if (unlikely( tmp_mvar_value_3 == NULL ))
276     {
277         tmp_mvar_value_3 = GET_STRING_DICT_VALUE( dict_builtin, (Nuitka_StringObject *)const_str_plain_python_func );
278     }
279  
280     if ( tmp_mvar_value_3 == NULL )
281     {
282  
283         exception_type = PyExc_NameError;
284         Py_INCREF( exception_type );
285         exception_value = PyUnicode_FromFormat( "name '%s' is not defined", "python_func" );
286         exception_tb = NULL;
287         NORMALIZE_EXCEPTION( &exception_type, &exception_value, &exception_tb );
288         CHAIN_EXCEPTION( exception_value );
289  
290         exception_lineno = 33;
291  
292         goto frame_exception_exit_1;
293     }
294  
295     tmp_called_name_3 = tmp_mvar_value_3;
296     frame_f3868f09942da1cc830992416f7e1503->m_frame.f_lineno = 33;
297     tmp_call_result_3 = CALL_FUNCTION_WITH_ARGS6( tmp_called_name_3, &PyTuple_GET_ITEM( const_tuple_4cee4124c8df2995a8a82b981e580f5e_tuple, 0 ) );
298  
299     if ( tmp_call_result_3 == NULL )
300     {
301         assert( ERROR_OCCURRED() );
302  
303         FETCH_ERROR_OCCURRED( &exception_type, &exception_value, &exception_tb );
304  
305  
306         exception_lineno = 33;
307  
308         goto frame_exception_exit_1;
309     }
310     Py_DECREF( tmp_call_result_3 );
311     }
312  
313 #if 0
314     RESTORE_FRAME_EXCEPTION( frame_f3868f09942da1cc830992416f7e1503 );
315 #endif
316  
317     // Put the previous frame back on top.
318     popFrameStack();
319  
320     goto frame_no_exception_1;
321  
322     frame_exception_exit_1:;
323  
324 #if 0
325     RESTORE_FRAME_EXCEPTION( frame_f3868f09942da1cc830992416f7e1503 );
326 #endif
327  
328     if ( exception_tb == NULL )
329     {
330         exception_tb = MAKE_TRACEBACK( frame_f3868f09942da1cc830992416f7e1503, exception_lineno );
331     }
332     else if ( exception_tb->tb_frame != &frame_f3868f09942da1cc830992416f7e1503->m_frame )
333     {
334         exception_tb = ADD_TRACEBACK( exception_tb, frame_f3868f09942da1cc830992416f7e1503, exception_lineno );
335     }
336  
337     // Attachs locals to frame if any.
338     Nuitka_Frame_AttachLocals(
339         (struct Nuitka_FrameObject *)frame_f3868f09942da1cc830992416f7e1503,
340         type_description_1
341     );
342  
343  
344     // Release cached frame.
345     if ( frame_f3868f09942da1cc830992416f7e1503 == cache_frame_f3868f09942da1cc830992416f7e1503 )
346     {
347         Py_DECREF( frame_f3868f09942da1cc830992416f7e1503 );
348     }
349     cache_frame_f3868f09942da1cc830992416f7e1503 = NULL;
350  
351     assertFrameObject( frame_f3868f09942da1cc830992416f7e1503 );
352  
353     // Put the previous frame back on top.
354     popFrameStack();
355  
356     // Return the error.
357     goto function_exception_exit;
358  
359     frame_no_exception_1:;
360     { 124     {
361     tmp_return_value = Py_None; 125     tmp_return_value = Py_None;
362     Py_INCREF( tmp_return_value ); 126     Py_INCREF( tmp_return_value );
363     goto function_return_exit; 127     goto function_return_exit;
364     } 128     }
365 129
366     // Return statement must have exited already. 130     // Return statement must have exited already.
367     NUITKA_CANNOT_GET_HERE( __main__$$$function_1_calledRepeatedly ); 131     NUITKA_CANNOT_GET_HERE( __main__$$$function_1_calledRepeatedly );
368     return NULL; 132     return NULL;
369 133
n 370 function_exception_exit: n
371     assert( exception_type );
372     RESTORE_ERROR_OCCURRED( exception_type, exception_value, exception_tb );
373  
374     return NULL;
375 function_return_exit: 134 function_return_exit:
376 135
377 CHECK_OBJECT( tmp_return_value ); 136 CHECK_OBJECT( tmp_return_value );
378 assert( had_error || !ERROR_OCCURRED() ); 137 assert( had_error || !ERROR_OCCURRED() );
379 return tmp_return_value; 138 return tmp_return_value;
388         impl___main__$$$function_1_calledRepeatedly, 147         impl___main__$$$function_1_calledRepeatedly,
389         const_str_plain_calledRepeatedly, 148         const_str_plain_calledRepeatedly,
390 #if PYTHON_VERSION >= 300 149 #if PYTHON_VERSION >= 300
391         NULL, 150         NULL,
392 #endif 151 #endif
t 393         codeobj_f3868f09942da1cc830992416f7e1503, t 152         codeobj_42b83fddbc8474b1e5a1a00288816ee0,
394         NULL, 153         NULL,
395 #if PYTHON_VERSION >= 300 154 #if PYTHON_VERSION >= 300
396         NULL, 155         NULL,
397         NULL, 156         NULL,
398 #endif 157 #endif