Construct CallUncompiledFunctionPosArgs

Performance Diagrams

Construct CallUncompiledFunctionPosArgs 002000000020000000400000004000000060000000600000008000000080000000100000000100000000120000000120000000140000000140000000160000000160000000CPython 2.7Nuitka (historic)Nuitka (master)Nuitka (develop)Nuitka (factory)16133928072.9230769230769257.0CPython 2.7108688497194.46153846153845337.6425967151097Nuitka (historic)107437571316.0339.5585781153947Nuitka (master)107437441437.53846153846143339.55877722995626Nuitka (develop)107437387559.0769230769231339.55885993908186Nuitka (factory)Construct CallUncompiledFunctionPosArgsTicks Construct CallUncompiledFunctionPosArgs 00100000001000000020000000200000003000000030000000400000004000000050000000500000006000000060000000700000007000000080000000800000009000000090000000100000000100000000110000000110000000120000000120000000130000000130000000140000000140000000150000000150000000CPython 3.5Nuitka (historic)Nuitka (master)Nuitka (develop)Nuitka (factory)15128386972.9230769230769257.0CPython 3.50194.46153846153845504.11538461538464Nuitka (historic)100422202316.0340.0802417069636Nuitka (master)100408495437.53846153846143340.102631473958Nuitka (develop)100423675559.0769230769231340.07783562782276Nuitka (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



for x in xrange(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

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