Construct CallCompiledFunctionPosArgsDefaults

Performance Diagrams

Construct CallCompiledFunctionPosArgsDefaults 002000000020000000400000004000000060000000600000008000000080000000100000000100000000120000000120000000140000000140000000160000000160000000CPython 2.7Nuitka (master)Nuitka (develop)Nuitka (factory)16047113988.11538461538461257.0CPython 2.751450330240.03846153846155424.88513694736963Nuitka (master)51450330391.96153846153845424.88513694736963Nuitka (develop)51450330543.8846153846154424.88513694736963Nuitka (factory)Construct CallCompiledFunctionPosArgsDefaultsTicks Construct CallCompiledFunctionPosArgsDefaults 002000000020000000400000004000000060000000600000008000000080000000100000000100000000120000000120000000140000000140000000160000000160000000180000000180000000CPython 3.5Nuitka (master)Nuitka (develop)Nuitka (factory)18199133088.11538461538461257.0CPython 3.555450992240.03846153846155428.8217252120239Nuitka (master)55451057391.96153846153845428.821636952325Nuitka (develop)55456905543.8846153846154428.8136962951012Nuitka (factory)Construct CallCompiledFunctionPosArgsDefaultsTicks

Source Code with Construct

from __future__ import print_function

def compiled_func(a = 1,b = 2,c = 3,d = 4,e = 5,f = 6):
    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()
    compiled_func()
    compiled_func()
# construct_alternative



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

print("OK.")

Source Code without Construct

from __future__ import print_function

def compiled_func(a = 1,b = 2,c = 3,d = 4,e = 5,f = 6):
    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

import itertools
for x in itertools.repeat(None, 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() n
30     compiled_func()
31     compiled_func()
32 # construct_alternative
33 29
34 30
t t 31  
32 # construct_alternative
33     pass
34 # construct_end
35 35
36 import itertools 36 import itertools
37 for x in itertools.repeat(None, 50000): 37 for x in itertools.repeat(None, 50000):
38     calledRepeatedly() 38     calledRepeatedly()
39 39

Context Diff of Generated Code


Construct
Baseline
38 static PyObject *const_tuple_d4571c3ff966778a8b3ba4a6bd66fdef_tuple; 38 static PyObject *const_tuple_d4571c3ff966778a8b3ba4a6bd66fdef_tuple;
39 static PyObject *const_str_plain_f; 39 static PyObject *const_str_plain_f;
40 extern PyObject *const_int_pos_1; 40 extern PyObject *const_int_pos_1;
41 extern PyObject *const_str_plain___file__; 41 extern PyObject *const_str_plain___file__;
42 extern PyObject *const_int_0; 42 extern PyObject *const_int_0;
n n 43 static PyObject *const_tuple_int_pos_1_int_pos_2_int_pos_3_int_pos_4_int_pos_5_int_pos_6_tuple;
44 static PyObject *const_str_plain_a;
43 static PyObject *const_str_plain_compiled_func; 45 static PyObject *const_str_plain_compiled_func;
n 44 static PyObject *const_str_plain_a; n
45 static PyObject *const_tuple_int_pos_1_int_pos_2_int_pos_3_int_pos_4_int_pos_5_int_pos_6_tuple;
46 extern PyObject *const_str_plain_print; 46 extern PyObject *const_str_plain_print;
47 static PyObject *const_int_pos_50000; 47 static PyObject *const_int_pos_50000;
48 static PyObject *const_int_pos_3; 48 static PyObject *const_int_pos_3;
49 static PyObject *const_str_plain_e; 49 static PyObject *const_str_plain_e;
50 static PyObject *const_str_plain_calledRepeatedly; 50 static PyObject *const_str_plain_calledRepeatedly;
69 /* Indicator if this modules private constants were created yet. */ 69 /* Indicator if this modules private constants were created yet. */
70 static bool constants_created = false; 70 static bool constants_created = false;
71 71
72 /* Function to create module private constants. */ 72 /* Function to create module private constants. */
73 static void createModuleConstants(void) { 73 static void createModuleConstants(void) {
n 74     const_str_plain_b = UNSTREAM_STRING_ASCII(&constant_bin[ 73 ], 1, 1); n 74     const_str_plain_b = UNSTREAM_STRING_ASCII(&constant_bin[ 38 ], 1, 1);
75     const_str_plain_itertools = UNSTREAM_STRING_ASCII(&constant_bin[ 74 ], 9, 1); 75     const_str_plain_itertools = UNSTREAM_STRING_ASCII(&constant_bin[ 39 ], 9, 1);
76     const_tuple_d4571c3ff966778a8b3ba4a6bd66fdef_tuple = PyTuple_New(6); 76     const_tuple_d4571c3ff966778a8b3ba4a6bd66fdef_tuple = PyTuple_New(6);
77     const_str_plain_a = UNSTREAM_STRING_ASCII(&constant_bin[ 1 ], 1, 1); 77     const_str_plain_a = UNSTREAM_STRING_ASCII(&constant_bin[ 1 ], 1, 1);
78     PyTuple_SET_ITEM(const_tuple_d4571c3ff966778a8b3ba4a6bd66fdef_tuple, 0, const_str_plain_a); Py_INCREF(const_str_plain_a); 78     PyTuple_SET_ITEM(const_tuple_d4571c3ff966778a8b3ba4a6bd66fdef_tuple, 0, const_str_plain_a); Py_INCREF(const_str_plain_a);
79     PyTuple_SET_ITEM(const_tuple_d4571c3ff966778a8b3ba4a6bd66fdef_tuple, 1, const_str_plain_b); Py_INCREF(const_str_plain_b); 79     PyTuple_SET_ITEM(const_tuple_d4571c3ff966778a8b3ba4a6bd66fdef_tuple, 1, const_str_plain_b); Py_INCREF(const_str_plain_b);
80     const_str_plain_c = UNSTREAM_STRING_ASCII(&constant_bin[ 6 ], 1, 1); 80     const_str_plain_c = UNSTREAM_STRING_ASCII(&constant_bin[ 6 ], 1, 1);
81     PyTuple_SET_ITEM(const_tuple_d4571c3ff966778a8b3ba4a6bd66fdef_tuple, 2, const_str_plain_c); Py_INCREF(const_str_plain_c); 81     PyTuple_SET_ITEM(const_tuple_d4571c3ff966778a8b3ba4a6bd66fdef_tuple, 2, const_str_plain_c); Py_INCREF(const_str_plain_c);
n 82     const_str_plain_d = UNSTREAM_STRING_ASCII(&constant_bin[ 13 ], 1, 1); n 82     const_str_plain_d = UNSTREAM_STRING_ASCII(&constant_bin[ 11 ], 1, 1);
83     PyTuple_SET_ITEM(const_tuple_d4571c3ff966778a8b3ba4a6bd66fdef_tuple, 3, const_str_plain_d); Py_INCREF(const_str_plain_d); 83     PyTuple_SET_ITEM(const_tuple_d4571c3ff966778a8b3ba4a6bd66fdef_tuple, 3, const_str_plain_d); Py_INCREF(const_str_plain_d);
84     const_str_plain_e = UNSTREAM_STRING_ASCII(&constant_bin[ 3 ], 1, 1); 84     const_str_plain_e = UNSTREAM_STRING_ASCII(&constant_bin[ 3 ], 1, 1);
85     PyTuple_SET_ITEM(const_tuple_d4571c3ff966778a8b3ba4a6bd66fdef_tuple, 4, const_str_plain_e); Py_INCREF(const_str_plain_e); 85     PyTuple_SET_ITEM(const_tuple_d4571c3ff966778a8b3ba4a6bd66fdef_tuple, 4, const_str_plain_e); Py_INCREF(const_str_plain_e);
n 86     const_str_plain_f = UNSTREAM_STRING_ASCII(&constant_bin[ 15 ], 1, 1); n 86     const_str_plain_f = UNSTREAM_STRING_ASCII(&constant_bin[ 33 ], 1, 1);
87     PyTuple_SET_ITEM(const_tuple_d4571c3ff966778a8b3ba4a6bd66fdef_tuple, 5, const_str_plain_f); Py_INCREF(const_str_plain_f); 87     PyTuple_SET_ITEM(const_tuple_d4571c3ff966778a8b3ba4a6bd66fdef_tuple, 5, const_str_plain_f); Py_INCREF(const_str_plain_f);
n 88     const_str_plain_compiled_func = UNSTREAM_STRING_ASCII(&constant_bin[ 6 ], 13, 1); n
89     const_tuple_int_pos_1_int_pos_2_int_pos_3_int_pos_4_int_pos_5_int_pos_6_tuple = PyTuple_New(6); 88     const_tuple_int_pos_1_int_pos_2_int_pos_3_int_pos_4_int_pos_5_int_pos_6_tuple = PyTuple_New(6);
90     PyTuple_SET_ITEM(const_tuple_int_pos_1_int_pos_2_int_pos_3_int_pos_4_int_pos_5_int_pos_6_tuple, 0, const_int_pos_1); Py_INCREF(const_int_pos_1); 89     PyTuple_SET_ITEM(const_tuple_int_pos_1_int_pos_2_int_pos_3_int_pos_4_int_pos_5_int_pos_6_tuple, 0, const_int_pos_1); Py_INCREF(const_int_pos_1);
91     const_int_pos_2 = PyLong_FromUnsignedLong(2ul); 90     const_int_pos_2 = PyLong_FromUnsignedLong(2ul);
92     PyTuple_SET_ITEM(const_tuple_int_pos_1_int_pos_2_int_pos_3_int_pos_4_int_pos_5_int_pos_6_tuple, 1, const_int_pos_2); Py_INCREF(const_int_pos_2); 91     PyTuple_SET_ITEM(const_tuple_int_pos_1_int_pos_2_int_pos_3_int_pos_4_int_pos_5_int_pos_6_tuple, 1, const_int_pos_2); Py_INCREF(const_int_pos_2);
93     const_int_pos_3 = PyLong_FromUnsignedLong(3ul); 92     const_int_pos_3 = PyLong_FromUnsignedLong(3ul);
96     PyTuple_SET_ITEM(const_tuple_int_pos_1_int_pos_2_int_pos_3_int_pos_4_int_pos_5_int_pos_6_tuple, 3, const_int_pos_4); Py_INCREF(const_int_pos_4); 95     PyTuple_SET_ITEM(const_tuple_int_pos_1_int_pos_2_int_pos_3_int_pos_4_int_pos_5_int_pos_6_tuple, 3, const_int_pos_4); Py_INCREF(const_int_pos_4);
97     const_int_pos_5 = PyLong_FromUnsignedLong(5ul); 96     const_int_pos_5 = PyLong_FromUnsignedLong(5ul);
98     PyTuple_SET_ITEM(const_tuple_int_pos_1_int_pos_2_int_pos_3_int_pos_4_int_pos_5_int_pos_6_tuple, 4, const_int_pos_5); Py_INCREF(const_int_pos_5); 97     PyTuple_SET_ITEM(const_tuple_int_pos_1_int_pos_2_int_pos_3_int_pos_4_int_pos_5_int_pos_6_tuple, 4, const_int_pos_5); Py_INCREF(const_int_pos_5);
99     const_int_pos_6 = PyLong_FromUnsignedLong(6ul); 98     const_int_pos_6 = PyLong_FromUnsignedLong(6ul);
100     PyTuple_SET_ITEM(const_tuple_int_pos_1_int_pos_2_int_pos_3_int_pos_4_int_pos_5_int_pos_6_tuple, 5, const_int_pos_6); Py_INCREF(const_int_pos_6); 99     PyTuple_SET_ITEM(const_tuple_int_pos_1_int_pos_2_int_pos_3_int_pos_4_int_pos_5_int_pos_6_tuple, 5, const_int_pos_6); Py_INCREF(const_int_pos_6);
n n 100     const_str_plain_compiled_func = UNSTREAM_STRING_ASCII(&constant_bin[ 48 ], 13, 1);
101     const_int_pos_50000 = PyLong_FromUnsignedLong(50000ul); 101     const_int_pos_50000 = PyLong_FromUnsignedLong(50000ul);
n 102     const_str_plain_calledRepeatedly = UNSTREAM_STRING_ASCII(&constant_bin[ 41 ], 16, 1); n 102     const_str_plain_calledRepeatedly = UNSTREAM_STRING_ASCII(&constant_bin[ 6 ], 16, 1);
103     const_str_angle_module = UNSTREAM_STRING_ASCII(&constant_bin[ 83 ], 8, 0); 103     const_str_angle_module = UNSTREAM_STRING_ASCII(&constant_bin[ 61 ], 8, 0);
104     const_str_plain_x = UNSTREAM_STRING_ASCII(&constant_bin[ 91 ], 1, 1); 104     const_str_plain_x = UNSTREAM_STRING_ASCII(&constant_bin[ 69 ], 1, 1);
105     const_str_digest_5ed1392909ad16e6227b8230f4582352 = UNSTREAM_STRING_ASCII(&constant_bin[ 92 ], 3, 0); 105     const_str_digest_5ed1392909ad16e6227b8230f4582352 = UNSTREAM_STRING_ASCII(&constant_bin[ 70 ], 3, 0);
106     const_str_plain_repeat = UNSTREAM_STRING_ASCII(&constant_bin[ 95 ], 6, 1); 106     const_str_plain_repeat = UNSTREAM_STRING_ASCII(&constant_bin[ 73 ], 6, 1);
107     const_str_digest_bbea620b7d473bb7787d69df9d9f2de1 = UNSTREAM_STRING_ASCII(&constant_bin[ 101 ], 60, 0); 107     const_str_digest_bbea620b7d473bb7787d69df9d9f2de1 = UNSTREAM_STRING_ASCII(&constant_bin[ 79 ], 60, 0);
108     const_tuple_none_int_pos_50000_tuple = PyTuple_New(2); 108     const_tuple_none_int_pos_50000_tuple = PyTuple_New(2);
109     PyTuple_SET_ITEM(const_tuple_none_int_pos_50000_tuple, 0, Py_None); Py_INCREF(Py_None); 109     PyTuple_SET_ITEM(const_tuple_none_int_pos_50000_tuple, 0, Py_None); Py_INCREF(Py_None);
110     PyTuple_SET_ITEM(const_tuple_none_int_pos_50000_tuple, 1, const_int_pos_50000); Py_INCREF(const_int_pos_50000); 110     PyTuple_SET_ITEM(const_tuple_none_int_pos_50000_tuple, 1, const_int_pos_50000); Py_INCREF(const_int_pos_50000);
n 111     const_str_plain_print_function = UNSTREAM_STRING_ASCII(&constant_bin[ 161 ], 14, 1); n 111     const_str_plain_print_function = UNSTREAM_STRING_ASCII(&constant_bin[ 139 ], 14, 1);
112 112
113     constants_created = true; 113     constants_created = true;
114 } 114 }
115 115
116 /* Function to verify module private constants for non-corruption. */ 116 /* Function to verify module private constants for non-corruption. */
123 } 123 }
124 #endif 124 #endif
125 125
126 // The module code objects. 126 // The module code objects.
127 static PyCodeObject *codeobj_1ebb25985b917e67f26d6fd224c85a32; 127 static PyCodeObject *codeobj_1ebb25985b917e67f26d6fd224c85a32;
n 128 static PyCodeObject *codeobj_1aec35da940aff248981ec3fe771102b; n 128 static PyCodeObject *codeobj_59573d57f0cd3ee1fa31871c043f5503;
129 static PyCodeObject *codeobj_db7cb615d10adcc22a44f30e2ce20d8a; 129 static PyCodeObject *codeobj_db7cb615d10adcc22a44f30e2ce20d8a;
130 /* For use in "MainProgram.c". */ 130 /* For use in "MainProgram.c". */
131 PyCodeObject *codeobj_main = NULL; 131 PyCodeObject *codeobj_main = NULL;
132 132
133 static void createModuleCodeObjects(void) { 133 static void createModuleCodeObjects(void) {
134     module_filename_obj = const_str_digest_bbea620b7d473bb7787d69df9d9f2de1; 134     module_filename_obj = const_str_digest_bbea620b7d473bb7787d69df9d9f2de1;
135     codeobj_1ebb25985b917e67f26d6fd224c85a32 = MAKE_CODEOBJECT(module_filename_obj, 1, CO_NOFREE, const_str_angle_module, const_tuple_empty, 0, 0, 0); 135     codeobj_1ebb25985b917e67f26d6fd224c85a32 = MAKE_CODEOBJECT(module_filename_obj, 1, CO_NOFREE, const_str_angle_module, const_tuple_empty, 0, 0, 0);
n 136     codeobj_1aec35da940aff248981ec3fe771102b = MAKE_CODEOBJECT(module_filename_obj, 25, CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE, const_str_plain_calledRepeatedly, const_tuple_empty, 0, 0, 0); n 136     codeobj_59573d57f0cd3ee1fa31871c043f5503 = MAKE_CODEOBJECT(module_filename_obj, 25, CO_NOFREE, const_str_plain_calledRepeatedly, const_tuple_empty, 0, 0, 0);
137     codeobj_db7cb615d10adcc22a44f30e2ce20d8a = MAKE_CODEOBJECT(module_filename_obj, 22, CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE, const_str_plain_compiled_func, const_tuple_d4571c3ff966778a8b3ba4a6bd66fdef_tuple, 6, 0, 0); 137     codeobj_db7cb615d10adcc22a44f30e2ce20d8a = MAKE_CODEOBJECT(module_filename_obj, 22, CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE, const_str_plain_compiled_func, const_tuple_d4571c3ff966778a8b3ba4a6bd66fdef_tuple, 6, 0, 0);
138 } 138 }
139 139
140 // The module function declarations. 140 // The module function declarations.
141 static PyObject *MAKE_FUNCTION___main__$$$function_1_compiled_func(PyObject *defaults); 141 static PyObject *MAKE_FUNCTION___main__$$$function_1_compiled_func(PyObject *defaults);
216    assert(had_error || !ERROR_OCCURRED()); 216    assert(had_error || !ERROR_OCCURRED());
217    return tmp_return_value; 217    return tmp_return_value;
218 } 218 }
219 219
220 220
n 221 static PyObject *impl___main__$$$function_2_calledRepeatedly(struct Nuitka_FunctionObject const *self, PyObject **python_pars) { n
222     // Preserve error status for checks
223 #ifndef __NUITKA_NO_ASSERT__
224     NUITKA_MAY_BE_UNUSED bool had_error = ERROR_OCCURRED();
225 #endif
226  
227     // Local variable declarations.
228     struct Nuitka_FrameObject *frame_1aec35da940aff248981ec3fe771102b;
229     NUITKA_MAY_BE_UNUSED char const *type_description_1 = NULL;
230     NUITKA_MAY_BE_UNUSED nuitka_void tmp_unused;
231     PyObject *exception_type = NULL;
232     PyObject *exception_value = NULL;
233     PyTracebackObject *exception_tb = NULL;
234     NUITKA_MAY_BE_UNUSED int exception_lineno = 0;
235     static struct Nuitka_FrameObject *cache_frame_1aec35da940aff248981ec3fe771102b = NULL;
236     PyObject *tmp_return_value = NULL;
237  
238     // Actual function body.
239     if (isFrameUnusable(cache_frame_1aec35da940aff248981ec3fe771102b)) {
240         Py_XDECREF(cache_frame_1aec35da940aff248981ec3fe771102b);
241  
242 #if _DEBUG_REFCOUNTS
243         if (cache_frame_1aec35da940aff248981ec3fe771102b == NULL) {
244             count_active_frame_cache_instances += 1;
245         } else {
246             count_released_frame_cache_instances += 1;
247         }
248         count_allocated_frame_cache_instances += 1;
249 #endif
250         cache_frame_1aec35da940aff248981ec3fe771102b = MAKE_FUNCTION_FRAME(codeobj_1aec35da940aff248981ec3fe771102b, module___main__, 0);
251 #if _DEBUG_REFCOUNTS
252     } else {
253         count_hit_frame_cache_instances += 1;
254 #endif
255     }
256     assert(cache_frame_1aec35da940aff248981ec3fe771102b->m_type_description == NULL);
257     frame_1aec35da940aff248981ec3fe771102b = cache_frame_1aec35da940aff248981ec3fe771102b;
258  
259     // Push the new frame as the currently active one.
260     pushFrameStack(frame_1aec35da940aff248981ec3fe771102b);
261  
262     // Mark the frame object as in use, ref count 1 will be up for reuse.
263     assert(Py_REFCNT(frame_1aec35da940aff248981ec3fe771102b) == 2); // Frame stack
264  
265     // Framed code:
266     {
267         PyObject *tmp_called_name_1;
268         PyObject *tmp_mvar_value_1;
269         PyObject *tmp_call_result_1;
270         tmp_mvar_value_1 = GET_STRING_DICT_VALUE(moduledict___main__, (Nuitka_StringObject *)const_str_plain_compiled_func);
271  
272         if (unlikely(tmp_mvar_value_1 == NULL)) {
273             tmp_mvar_value_1 = GET_STRING_DICT_VALUE(dict_builtin, (Nuitka_StringObject *)const_str_plain_compiled_func);
274         }
275  
276         if (tmp_mvar_value_1 == NULL) {
277  
278             exception_type = PyExc_NameError;
279             Py_INCREF(exception_type);
280             exception_value = UNSTREAM_STRING(&constant_bin[ 0 ], 35, 0);
281             exception_tb = NULL;
282             NORMALIZE_EXCEPTION(&exception_type, &exception_value, &exception_tb);
283             CHAIN_EXCEPTION(exception_value);
284  
285             exception_lineno = 29;
286  
287             goto frame_exception_exit_1;
288         }
289  
290         tmp_called_name_1 = tmp_mvar_value_1;
291         frame_1aec35da940aff248981ec3fe771102b->m_frame.f_lineno = 29;
292         tmp_call_result_1 = CALL_FUNCTION_NO_ARGS(tmp_called_name_1);
293         if (tmp_call_result_1 == NULL) {
294             assert(ERROR_OCCURRED());
295  
296             FETCH_ERROR_OCCURRED(&exception_type, &exception_value, &exception_tb);
297  
298  
299             exception_lineno = 29;
300  
301             goto frame_exception_exit_1;
302         }
303         Py_DECREF(tmp_call_result_1);
304     }
305     {
306         PyObject *tmp_called_name_2;
307         PyObject *tmp_mvar_value_2;
308         PyObject *tmp_call_result_2;
309         tmp_mvar_value_2 = GET_STRING_DICT_VALUE(moduledict___main__, (Nuitka_StringObject *)const_str_plain_compiled_func);
310  
311         if (unlikely(tmp_mvar_value_2 == NULL)) {
312             tmp_mvar_value_2 = GET_STRING_DICT_VALUE(dict_builtin, (Nuitka_StringObject *)const_str_plain_compiled_func);
313         }
314  
315         if (tmp_mvar_value_2 == NULL) {
316  
317             exception_type = PyExc_NameError;
318             Py_INCREF(exception_type);
319             exception_value = UNSTREAM_STRING(&constant_bin[ 0 ], 35, 0);
320             exception_tb = NULL;
321             NORMALIZE_EXCEPTION(&exception_type, &exception_value, &exception_tb);
322             CHAIN_EXCEPTION(exception_value);
323  
324             exception_lineno = 30;
325  
326             goto frame_exception_exit_1;
327         }
328  
329         tmp_called_name_2 = tmp_mvar_value_2;
330         frame_1aec35da940aff248981ec3fe771102b->m_frame.f_lineno = 30;
331         tmp_call_result_2 = CALL_FUNCTION_NO_ARGS(tmp_called_name_2);
332         if (tmp_call_result_2 == NULL) {
333             assert(ERROR_OCCURRED());
334  
335             FETCH_ERROR_OCCURRED(&exception_type, &exception_value, &exception_tb);
336  
337  
338             exception_lineno = 30;
339  
340             goto frame_exception_exit_1;
341         }
342         Py_DECREF(tmp_call_result_2);
343     }
344     {
345         PyObject *tmp_called_name_3;
346         PyObject *tmp_mvar_value_3;
347         PyObject *tmp_call_result_3;
348         tmp_mvar_value_3 = GET_STRING_DICT_VALUE(moduledict___main__, (Nuitka_StringObject *)const_str_plain_compiled_func);
349  
350         if (unlikely(tmp_mvar_value_3 == NULL)) {
351             tmp_mvar_value_3 = GET_STRING_DICT_VALUE(dict_builtin, (Nuitka_StringObject *)const_str_plain_compiled_func);
352         }
353  
354         if (tmp_mvar_value_3 == NULL) {
355  
356             exception_type = PyExc_NameError;
357             Py_INCREF(exception_type);
358             exception_value = UNSTREAM_STRING(&constant_bin[ 0 ], 35, 0);
359             exception_tb = NULL;
360             NORMALIZE_EXCEPTION(&exception_type, &exception_value, &exception_tb);
361             CHAIN_EXCEPTION(exception_value);
362  
363             exception_lineno = 31;
364  
365             goto frame_exception_exit_1;
366         }
367  
368         tmp_called_name_3 = tmp_mvar_value_3;
369         frame_1aec35da940aff248981ec3fe771102b->m_frame.f_lineno = 31;
370         tmp_call_result_3 = CALL_FUNCTION_NO_ARGS(tmp_called_name_3);
371         if (tmp_call_result_3 == NULL) {
372             assert(ERROR_OCCURRED());
373  
374             FETCH_ERROR_OCCURRED(&exception_type, &exception_value, &exception_tb);
375  
376  
377             exception_lineno = 31;
378  
379             goto frame_exception_exit_1;
380         }
381         Py_DECREF(tmp_call_result_3);
382     }
383  
384 #if 0
385     RESTORE_FRAME_EXCEPTION(frame_1aec35da940aff248981ec3fe771102b);
386 #endif
387  
388     // Put the previous frame back on top.
389     popFrameStack();
390  
391     goto frame_no_exception_1;
392  
393     frame_exception_exit_1:;
394  
395 #if 0
396     RESTORE_FRAME_EXCEPTION(frame_1aec35da940aff248981ec3fe771102b);
397 #endif
398  
399     if (exception_tb == NULL) {
400         exception_tb = MAKE_TRACEBACK(frame_1aec35da940aff248981ec3fe771102b, exception_lineno);
401     } else if (exception_tb->tb_frame != &frame_1aec35da940aff248981ec3fe771102b->m_frame) {
402         exception_tb = ADD_TRACEBACK(exception_tb, frame_1aec35da940aff248981ec3fe771102b, exception_lineno);
403     }
404  
405     // Attachs locals to frame if any.
406     Nuitka_Frame_AttachLocals(
407         frame_1aec35da940aff248981ec3fe771102b,
408         type_description_1
409     );
410  
411  
412     // Release cached frame.
413     if (frame_1aec35da940aff248981ec3fe771102b == cache_frame_1aec35da940aff248981ec3fe771102b) {
414 #if _DEBUG_REFCOUNTS
415         count_active_frame_cache_instances -= 1;
416         count_released_frame_cache_instances += 1;
417 #endif
418  
419         Py_DECREF(frame_1aec35da940aff248981ec3fe771102b);
420     }
421     cache_frame_1aec35da940aff248981ec3fe771102b = NULL;
422  
423     assertFrameObject(frame_1aec35da940aff248981ec3fe771102b);
424  
425     // Put the previous frame back on top.
426     popFrameStack();
427  
428     // Return the error.
429     goto function_exception_exit;
430  
431     frame_no_exception_1:;
432     tmp_return_value = Py_None;
433     Py_INCREF(tmp_return_value);
434     goto function_return_exit;
435  
436     NUITKA_CANNOT_GET_HERE("Return statement must have exited already.");
437     return NULL;
438  
439 function_exception_exit:
440     assert(exception_type);
441     RESTORE_ERROR_OCCURRED(exception_type, exception_value, exception_tb);
442  
443     return NULL;
444  
445 function_return_exit:
446    // Function cleanup code if any.
447  
448  
449    // Actual function exit with return value, making sure we did not make
450    // the error status worse despite non-NULL return.
451    CHECK_OBJECT(tmp_return_value);
452    assert(had_error || !ERROR_OCCURRED());
453    return tmp_return_value;
454 }
455  
456  
457 221
458 static PyObject *MAKE_FUNCTION___main__$$$function_1_compiled_func(PyObject *defaults) { 222 static PyObject *MAKE_FUNCTION___main__$$$function_1_compiled_func(PyObject *defaults) {
459     struct Nuitka_FunctionObject *result = Nuitka_Function_New( 223     struct Nuitka_FunctionObject *result = Nuitka_Function_New(
460         impl___main__$$$function_1_compiled_func, 224         impl___main__$$$function_1_compiled_func,
461         const_str_plain_compiled_func, 225         const_str_plain_compiled_func,
479 243
480 244
481 245
482 static PyObject *MAKE_FUNCTION___main__$$$function_2_calledRepeatedly() { 246 static PyObject *MAKE_FUNCTION___main__$$$function_2_calledRepeatedly() {
483     struct Nuitka_FunctionObject *result = Nuitka_Function_New( 247     struct Nuitka_FunctionObject *result = Nuitka_Function_New(
n 484         impl___main__$$$function_2_calledRepeatedly, n 248         NULL,
485         const_str_plain_calledRepeatedly, 249         const_str_plain_calledRepeatedly,
486 #if PYTHON_VERSION >= 300 250 #if PYTHON_VERSION >= 300
487         NULL, 251         NULL,
488 #endif 252 #endif
n 489         codeobj_1aec35da940aff248981ec3fe771102b, n 253         codeobj_59573d57f0cd3ee1fa31871c043f5503,
490         NULL, 254         NULL,
491 #if PYTHON_VERSION >= 300 255 #if PYTHON_VERSION >= 300
492         NULL, 256         NULL,
493         NULL, 257         NULL,
494 #endif 258 #endif
530 // Provide a way to create find a function via its C code and create it back 294 // Provide a way to create find a function via its C code and create it back
531 // in another process, useful for multiprocessing extensions like dill 295 // in another process, useful for multiprocessing extensions like dill
532 296
533 function_impl_code functable___main__[] = { 297 function_impl_code functable___main__[] = {
534     impl___main__$$$function_1_compiled_func, 298     impl___main__$$$function_1_compiled_func,
n 535     impl___main__$$$function_2_calledRepeatedly, n 299     NULL,
536     NULL 300     NULL
537 }; 301 };
538 302
539 static char const *_reduce_compiled_function_argnames[] = { 303 static char const *_reduce_compiled_function_argnames[] = {
540     "func", 304     "func",
1070 834
1071         if (tmp_mvar_value_2 == NULL) { 835         if (tmp_mvar_value_2 == NULL) {
1072 836
1073             exception_type = PyExc_NameError; 837             exception_type = PyExc_NameError;
1074             Py_INCREF(exception_type); 838             Py_INCREF(exception_type);
t 1075             exception_value = UNSTREAM_STRING(&constant_bin[ 35 ], 38, 0); t 839             exception_value = UNSTREAM_STRING(&constant_bin[ 0 ], 38, 0);
1076             exception_tb = NULL; 840             exception_tb = NULL;
1077             NORMALIZE_EXCEPTION(&exception_type, &exception_value, &exception_tb); 841             NORMALIZE_EXCEPTION(&exception_type, &exception_value, &exception_tb);
1078             CHAIN_EXCEPTION(exception_value); 842             CHAIN_EXCEPTION(exception_value);
1079 843
1080             exception_lineno = 38; 844             exception_lineno = 38;