Construct CallUncompiledFunctionPosArgs

Performance Diagrams

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