Construct CallCompiledFunctionPosArgsConstant

Performance Diagrams

Construct CallCompiledFunctionPosArgsConstant 002000000020000000400000004000000060000000600000008000000080000000100000000100000000120000000120000000140000000140000000160000000160000000180000000180000000CPython 2.7Nuitka (master)Nuitka (develop)Nuitka (factory)18398681088.11538461538461257.0CPython 2.748602723240.03846153846155438.8363540832503Nuitka (master)48602725391.96153846153845438.8363513970209Nuitka (develop)48602725543.8846153846154438.8363513970209Nuitka (factory)Construct CallCompiledFunctionPosArgsConstantTicks Construct CallCompiledFunctionPosArgsConstant 002000000020000000400000004000000060000000600000008000000080000000100000000100000000120000000120000000140000000140000000160000000160000000180000000180000000CPython 3.5Nuitka (master)Nuitka (develop)Nuitka (factory)18651316088.11538461538461257.0CPython 3.552605862240.03846153846155434.4167219518286Nuitka (master)52608976391.96153846153845434.4125961447934Nuitka (develop)52608959543.8846153846154434.41261866846696Nuitka (factory)Construct CallCompiledFunctionPosArgsConstantTicks

Source Code with Construct

from __future__ import print_function

def compiled_func(a,b,c,d,e,f):
    return a, b, c, d, e, f

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



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,b,c,d,e,f):
    return a, b, c, d, e, f

def calledRepeatedly():
    # This is supposed to make a call to a non-compiled function, which is
    # being optimized separately.
# construct_begin



# construct_alternative
    pass
# construct_end

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("some", "random", "values", "to", "check", "call") n
30     compiled_func("some", "other", "values", "to", "check", "call")
31     compiled_func("some", "new", "values", "to", "check", "call")
32 # construct_alternative
33 29
34 30
t t 31  
32 # construct_alternative
33     pass
34 # construct_end
35 35
36 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
31 31
32 PyObject *module___main__; 32 PyObject *module___main__;
33 PyDictObject *moduledict___main__; 33 PyDictObject *moduledict___main__;
34 34
35 /* The declarations of module constants used, if any. */ 35 /* The declarations of module constants used, if any. */
n 36 static PyObject *const_str_plain_to; n
37 static PyObject *const_str_plain_b; 36 static PyObject *const_str_plain_b;
38 static PyObject *const_str_plain_itertools; 37 static PyObject *const_str_plain_itertools;
39 static PyObject *const_tuple_d4571c3ff966778a8b3ba4a6bd66fdef_tuple; 38 static PyObject *const_tuple_d4571c3ff966778a8b3ba4a6bd66fdef_tuple;
n 40 static PyObject *const_tuple_4cee4124c8df2995a8a82b981e580f5e_tuple; n
41 static PyObject *const_str_plain_f; 39 static PyObject *const_str_plain_f;
n 42 static PyObject *const_str_plain_values; n
43 extern PyObject *const_str_plain___file__; 40 extern PyObject *const_str_plain___file__;
n 44 static PyObject *const_str_plain_other; n
45 extern PyObject *const_int_0; 41 extern PyObject *const_int_0;
n 46 static PyObject *const_str_plain_check; n
47 static PyObject *const_str_plain_compiled_func; 42 static PyObject *const_str_plain_compiled_func;
48 static PyObject *const_str_plain_a; 43 static PyObject *const_str_plain_a;
49 extern PyObject *const_str_plain_print; 44 extern PyObject *const_str_plain_print;
n 50 static PyObject *const_str_plain_call; n
51 static PyObject *const_int_pos_50000; 45 static PyObject *const_int_pos_50000;
n 52 static PyObject *const_str_plain_random; n
53 static PyObject *const_str_plain_e; 46 static PyObject *const_str_plain_e;
54 static PyObject *const_str_plain_calledRepeatedly; 47 static PyObject *const_str_plain_calledRepeatedly;
55 static PyObject *const_str_angle_module; 48 static PyObject *const_str_angle_module;
56 static PyObject *const_str_plain_x; 49 static PyObject *const_str_plain_x;
57 static PyObject *const_str_digest_5ed1392909ad16e6227b8230f4582352; 50 static PyObject *const_str_digest_5ed1392909ad16e6227b8230f4582352;
58 extern PyObject *const_tuple_empty; 51 extern PyObject *const_tuple_empty;
59 static PyObject *const_str_plain_c; 52 static PyObject *const_str_plain_c;
n 60 static PyObject *const_str_plain_some; n
61 static PyObject *const_str_plain_repeat; 53 static PyObject *const_str_plain_repeat;
62 static PyObject *const_str_digest_d650d57214eb5366f546d8cb6ee0a334; 54 static PyObject *const_str_digest_d650d57214eb5366f546d8cb6ee0a334;
63 static PyObject *const_tuple_none_int_pos_50000_tuple; 55 static PyObject *const_tuple_none_int_pos_50000_tuple;
n 64 static PyObject *const_str_plain_new; n
65 static PyObject *const_tuple_78e2f1ad354bdb7db1a0fda186168ee0_tuple;
66 static PyObject *const_tuple_ca2f155a28955fc472d4376e2721d689_tuple;
67 static PyObject *const_str_plain_d; 56 static PyObject *const_str_plain_d;
68 extern PyObject *const_str_plain___doc__; 57 extern PyObject *const_str_plain___doc__;
69 extern PyObject *const_str_plain___cached__; 58 extern PyObject *const_str_plain___cached__;
70 static PyObject *const_str_plain_print_function; 59 static PyObject *const_str_plain_print_function;
71 static PyObject *module_filename_obj; 60 static PyObject *module_filename_obj;
73 /* Indicator if this modules private constants were created yet. */ 62 /* Indicator if this modules private constants were created yet. */
74 static bool constants_created = false; 63 static bool constants_created = false;
75 64
76 /* Function to create module private constants. */ 65 /* Function to create module private constants. */
77 static void createModuleConstants(void) { 66 static void createModuleConstants(void) {
n 78     const_str_plain_to = UNSTREAM_STRING_ASCII(&constant_bin[ 73 ], 2, 1); n
79     const_str_plain_b = UNSTREAM_STRING_ASCII(&constant_bin[ 75 ], 1, 1); 67     const_str_plain_b = UNSTREAM_STRING_ASCII(&constant_bin[ 38 ], 1, 1);
80     const_str_plain_itertools = UNSTREAM_STRING_ASCII(&constant_bin[ 76 ], 9, 1); 68     const_str_plain_itertools = UNSTREAM_STRING_ASCII(&constant_bin[ 39 ], 9, 1);
81     const_tuple_d4571c3ff966778a8b3ba4a6bd66fdef_tuple = PyTuple_New(6); 69     const_tuple_d4571c3ff966778a8b3ba4a6bd66fdef_tuple = PyTuple_New(6);
82     const_str_plain_a = UNSTREAM_STRING_ASCII(&constant_bin[ 1 ], 1, 1); 70     const_str_plain_a = UNSTREAM_STRING_ASCII(&constant_bin[ 1 ], 1, 1);
83     PyTuple_SET_ITEM(const_tuple_d4571c3ff966778a8b3ba4a6bd66fdef_tuple, 0, const_str_plain_a); Py_INCREF(const_str_plain_a); 71     PyTuple_SET_ITEM(const_tuple_d4571c3ff966778a8b3ba4a6bd66fdef_tuple, 0, const_str_plain_a); Py_INCREF(const_str_plain_a);
84     PyTuple_SET_ITEM(const_tuple_d4571c3ff966778a8b3ba4a6bd66fdef_tuple, 1, const_str_plain_b); Py_INCREF(const_str_plain_b); 72     PyTuple_SET_ITEM(const_tuple_d4571c3ff966778a8b3ba4a6bd66fdef_tuple, 1, const_str_plain_b); Py_INCREF(const_str_plain_b);
85     const_str_plain_c = UNSTREAM_STRING_ASCII(&constant_bin[ 6 ], 1, 1); 73     const_str_plain_c = UNSTREAM_STRING_ASCII(&constant_bin[ 6 ], 1, 1);
86     PyTuple_SET_ITEM(const_tuple_d4571c3ff966778a8b3ba4a6bd66fdef_tuple, 2, const_str_plain_c); Py_INCREF(const_str_plain_c); 74     PyTuple_SET_ITEM(const_tuple_d4571c3ff966778a8b3ba4a6bd66fdef_tuple, 2, const_str_plain_c); Py_INCREF(const_str_plain_c);
n 87     const_str_plain_d = UNSTREAM_STRING_ASCII(&constant_bin[ 13 ], 1, 1); n 75     const_str_plain_d = UNSTREAM_STRING_ASCII(&constant_bin[ 11 ], 1, 1);
88     PyTuple_SET_ITEM(const_tuple_d4571c3ff966778a8b3ba4a6bd66fdef_tuple, 3, const_str_plain_d); Py_INCREF(const_str_plain_d); 76     PyTuple_SET_ITEM(const_tuple_d4571c3ff966778a8b3ba4a6bd66fdef_tuple, 3, const_str_plain_d); Py_INCREF(const_str_plain_d);
89     const_str_plain_e = UNSTREAM_STRING_ASCII(&constant_bin[ 3 ], 1, 1); 77     const_str_plain_e = UNSTREAM_STRING_ASCII(&constant_bin[ 3 ], 1, 1);
90     PyTuple_SET_ITEM(const_tuple_d4571c3ff966778a8b3ba4a6bd66fdef_tuple, 4, const_str_plain_e); Py_INCREF(const_str_plain_e); 78     PyTuple_SET_ITEM(const_tuple_d4571c3ff966778a8b3ba4a6bd66fdef_tuple, 4, const_str_plain_e); Py_INCREF(const_str_plain_e);
n 91     const_str_plain_f = UNSTREAM_STRING_ASCII(&constant_bin[ 15 ], 1, 1); n 79     const_str_plain_f = UNSTREAM_STRING_ASCII(&constant_bin[ 33 ], 1, 1);
92     PyTuple_SET_ITEM(const_tuple_d4571c3ff966778a8b3ba4a6bd66fdef_tuple, 5, const_str_plain_f); Py_INCREF(const_str_plain_f); 80     PyTuple_SET_ITEM(const_tuple_d4571c3ff966778a8b3ba4a6bd66fdef_tuple, 5, const_str_plain_f); Py_INCREF(const_str_plain_f);
n 93     const_tuple_4cee4124c8df2995a8a82b981e580f5e_tuple = PyTuple_New(6); n
94     const_str_plain_some = UNSTREAM_STRING_ASCII(&constant_bin[ 85 ], 4, 1);
95     PyTuple_SET_ITEM(const_tuple_4cee4124c8df2995a8a82b981e580f5e_tuple, 0, const_str_plain_some); Py_INCREF(const_str_plain_some);
96     const_str_plain_new = UNSTREAM_STRING_ASCII(&constant_bin[ 89 ], 3, 1);
97     PyTuple_SET_ITEM(const_tuple_4cee4124c8df2995a8a82b981e580f5e_tuple, 1, const_str_plain_new); Py_INCREF(const_str_plain_new);
98     const_str_plain_values = UNSTREAM_STRING_ASCII(&constant_bin[ 92 ], 6, 1);
99     PyTuple_SET_ITEM(const_tuple_4cee4124c8df2995a8a82b981e580f5e_tuple, 2, const_str_plain_values); Py_INCREF(const_str_plain_values);
100     PyTuple_SET_ITEM(const_tuple_4cee4124c8df2995a8a82b981e580f5e_tuple, 3, const_str_plain_to); Py_INCREF(const_str_plain_to);
101     const_str_plain_check = UNSTREAM_STRING_ASCII(&constant_bin[ 98 ], 5, 1);
102     PyTuple_SET_ITEM(const_tuple_4cee4124c8df2995a8a82b981e580f5e_tuple, 4, const_str_plain_check); Py_INCREF(const_str_plain_check);
103     const_str_plain_call = UNSTREAM_STRING_ASCII(&constant_bin[ 41 ], 4, 1);
104     PyTuple_SET_ITEM(const_tuple_4cee4124c8df2995a8a82b981e580f5e_tuple, 5, const_str_plain_call); Py_INCREF(const_str_plain_call);
105     const_str_plain_other = UNSTREAM_STRING_ASCII(&constant_bin[ 103 ], 5, 1);
106     const_str_plain_compiled_func = UNSTREAM_STRING_ASCII(&constant_bin[ 6 ], 13, 1); 81     const_str_plain_compiled_func = UNSTREAM_STRING_ASCII(&constant_bin[ 48 ], 13, 1);
107     const_int_pos_50000 = PyLong_FromUnsignedLong(50000ul); 82     const_int_pos_50000 = PyLong_FromUnsignedLong(50000ul);
n 108     const_str_plain_random = UNSTREAM_STRING_ASCII(&constant_bin[ 108 ], 6, 1); n
109     const_str_plain_calledRepeatedly = UNSTREAM_STRING_ASCII(&constant_bin[ 41 ], 16, 1); 83     const_str_plain_calledRepeatedly = UNSTREAM_STRING_ASCII(&constant_bin[ 6 ], 16, 1);
110     const_str_angle_module = UNSTREAM_STRING_ASCII(&constant_bin[ 114 ], 8, 0); 84     const_str_angle_module = UNSTREAM_STRING_ASCII(&constant_bin[ 61 ], 8, 0);
111     const_str_plain_x = UNSTREAM_STRING_ASCII(&constant_bin[ 122 ], 1, 1); 85     const_str_plain_x = UNSTREAM_STRING_ASCII(&constant_bin[ 69 ], 1, 1);
112     const_str_digest_5ed1392909ad16e6227b8230f4582352 = UNSTREAM_STRING_ASCII(&constant_bin[ 123 ], 3, 0); 86     const_str_digest_5ed1392909ad16e6227b8230f4582352 = UNSTREAM_STRING_ASCII(&constant_bin[ 70 ], 3, 0);
113     const_str_plain_repeat = UNSTREAM_STRING_ASCII(&constant_bin[ 126 ], 6, 1); 87     const_str_plain_repeat = UNSTREAM_STRING_ASCII(&constant_bin[ 73 ], 6, 1);
114     const_str_digest_d650d57214eb5366f546d8cb6ee0a334 = UNSTREAM_STRING_ASCII(&constant_bin[ 132 ], 60, 0); 88     const_str_digest_d650d57214eb5366f546d8cb6ee0a334 = UNSTREAM_STRING_ASCII(&constant_bin[ 79 ], 60, 0);
115     const_tuple_none_int_pos_50000_tuple = PyTuple_New(2); 89     const_tuple_none_int_pos_50000_tuple = PyTuple_New(2);
116     PyTuple_SET_ITEM(const_tuple_none_int_pos_50000_tuple, 0, Py_None); Py_INCREF(Py_None); 90     PyTuple_SET_ITEM(const_tuple_none_int_pos_50000_tuple, 0, Py_None); Py_INCREF(Py_None);
117     PyTuple_SET_ITEM(const_tuple_none_int_pos_50000_tuple, 1, const_int_pos_50000); Py_INCREF(const_int_pos_50000); 91     PyTuple_SET_ITEM(const_tuple_none_int_pos_50000_tuple, 1, const_int_pos_50000); Py_INCREF(const_int_pos_50000);
n 118     const_tuple_78e2f1ad354bdb7db1a0fda186168ee0_tuple = PyTuple_New(6); n
119     PyTuple_SET_ITEM(const_tuple_78e2f1ad354bdb7db1a0fda186168ee0_tuple, 0, const_str_plain_some); Py_INCREF(const_str_plain_some);
120     PyTuple_SET_ITEM(const_tuple_78e2f1ad354bdb7db1a0fda186168ee0_tuple, 1, const_str_plain_random); Py_INCREF(const_str_plain_random);
121     PyTuple_SET_ITEM(const_tuple_78e2f1ad354bdb7db1a0fda186168ee0_tuple, 2, const_str_plain_values); Py_INCREF(const_str_plain_values);
122     PyTuple_SET_ITEM(const_tuple_78e2f1ad354bdb7db1a0fda186168ee0_tuple, 3, const_str_plain_to); Py_INCREF(const_str_plain_to);
123     PyTuple_SET_ITEM(const_tuple_78e2f1ad354bdb7db1a0fda186168ee0_tuple, 4, const_str_plain_check); Py_INCREF(const_str_plain_check);
124     PyTuple_SET_ITEM(const_tuple_78e2f1ad354bdb7db1a0fda186168ee0_tuple, 5, const_str_plain_call); Py_INCREF(const_str_plain_call);
125     const_tuple_ca2f155a28955fc472d4376e2721d689_tuple = PyTuple_New(6);
126     PyTuple_SET_ITEM(const_tuple_ca2f155a28955fc472d4376e2721d689_tuple, 0, const_str_plain_some); Py_INCREF(const_str_plain_some);
127     PyTuple_SET_ITEM(const_tuple_ca2f155a28955fc472d4376e2721d689_tuple, 1, const_str_plain_other); Py_INCREF(const_str_plain_other);
128     PyTuple_SET_ITEM(const_tuple_ca2f155a28955fc472d4376e2721d689_tuple, 2, const_str_plain_values); Py_INCREF(const_str_plain_values);
129     PyTuple_SET_ITEM(const_tuple_ca2f155a28955fc472d4376e2721d689_tuple, 3, const_str_plain_to); Py_INCREF(const_str_plain_to);
130     PyTuple_SET_ITEM(const_tuple_ca2f155a28955fc472d4376e2721d689_tuple, 4, const_str_plain_check); Py_INCREF(const_str_plain_check);
131     PyTuple_SET_ITEM(const_tuple_ca2f155a28955fc472d4376e2721d689_tuple, 5, const_str_plain_call); Py_INCREF(const_str_plain_call);
132     const_str_plain_print_function = UNSTREAM_STRING_ASCII(&constant_bin[ 192 ], 14, 1); 92     const_str_plain_print_function = UNSTREAM_STRING_ASCII(&constant_bin[ 139 ], 14, 1);
133 93
134     constants_created = true; 94     constants_created = true;
135 } 95 }
136 96
137 /* Function to verify module private constants for non-corruption. */ 97 /* Function to verify module private constants for non-corruption. */
144 } 104 }
145 #endif 105 #endif
146 106
147 // The module code objects. 107 // The module code objects.
148 static PyCodeObject *codeobj_91b0c6c44626a1838233c8b5fb234fbb; 108 static PyCodeObject *codeobj_91b0c6c44626a1838233c8b5fb234fbb;
n 149 static PyCodeObject *codeobj_f656f83a06578f8ad1f145569d1772c9; n 109 static PyCodeObject *codeobj_5706d18e7cd7f0f2a4c4b63929f90702;
150 static PyCodeObject *codeobj_697e19a041def4a12fde3d0e77e512df; 110 static PyCodeObject *codeobj_697e19a041def4a12fde3d0e77e512df;
151 /* For use in "MainProgram.c". */ 111 /* For use in "MainProgram.c". */
152 PyCodeObject *codeobj_main = NULL; 112 PyCodeObject *codeobj_main = NULL;
153 113
154 static void createModuleCodeObjects(void) { 114 static void createModuleCodeObjects(void) {
155     module_filename_obj = const_str_digest_d650d57214eb5366f546d8cb6ee0a334; 115     module_filename_obj = const_str_digest_d650d57214eb5366f546d8cb6ee0a334;
156     codeobj_91b0c6c44626a1838233c8b5fb234fbb = MAKE_CODEOBJECT(module_filename_obj, 1, CO_NOFREE, const_str_angle_module, const_tuple_empty, 0, 0, 0); 116     codeobj_91b0c6c44626a1838233c8b5fb234fbb = MAKE_CODEOBJECT(module_filename_obj, 1, CO_NOFREE, const_str_angle_module, const_tuple_empty, 0, 0, 0);
n 157     codeobj_f656f83a06578f8ad1f145569d1772c9 = MAKE_CODEOBJECT(module_filename_obj, 25, CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE, const_str_plain_calledRepeatedly, const_tuple_empty, 0, 0, 0); n 117     codeobj_5706d18e7cd7f0f2a4c4b63929f90702 = MAKE_CODEOBJECT(module_filename_obj, 25, CO_NOFREE, const_str_plain_calledRepeatedly, const_tuple_empty, 0, 0, 0);
158     codeobj_697e19a041def4a12fde3d0e77e512df = MAKE_CODEOBJECT(module_filename_obj, 22, CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE, const_str_plain_compiled_func, const_tuple_d4571c3ff966778a8b3ba4a6bd66fdef_tuple, 6, 0, 0); 118     codeobj_697e19a041def4a12fde3d0e77e512df = MAKE_CODEOBJECT(module_filename_obj, 22, CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE, const_str_plain_compiled_func, const_tuple_d4571c3ff966778a8b3ba4a6bd66fdef_tuple, 6, 0, 0);
159 } 119 }
160 120
161 // The module function declarations. 121 // The module function declarations.
162 static PyObject *MAKE_FUNCTION___main__$$$function_1_compiled_func(); 122 static PyObject *MAKE_FUNCTION___main__$$$function_1_compiled_func();
237    assert(had_error || !ERROR_OCCURRED()); 197    assert(had_error || !ERROR_OCCURRED());
238    return tmp_return_value; 198    return tmp_return_value;
239 } 199 }
240 200
241 201
n 242 static PyObject *impl___main__$$$function_2_calledRepeatedly(struct Nuitka_FunctionObject const *self, PyObject **python_pars) { n
243     // Preserve error status for checks
244 #ifndef __NUITKA_NO_ASSERT__
245     NUITKA_MAY_BE_UNUSED bool had_error = ERROR_OCCURRED();
246 #endif
247  
248     // Local variable declarations.
249     struct Nuitka_FrameObject *frame_f656f83a06578f8ad1f145569d1772c9;
250     NUITKA_MAY_BE_UNUSED char const *type_description_1 = NULL;
251     NUITKA_MAY_BE_UNUSED nuitka_void tmp_unused;
252     PyObject *exception_type = NULL;
253     PyObject *exception_value = NULL;
254     PyTracebackObject *exception_tb = NULL;
255     NUITKA_MAY_BE_UNUSED int exception_lineno = 0;
256     static struct Nuitka_FrameObject *cache_frame_f656f83a06578f8ad1f145569d1772c9 = NULL;
257     PyObject *tmp_return_value = NULL;
258  
259     // Actual function body.
260     if (isFrameUnusable(cache_frame_f656f83a06578f8ad1f145569d1772c9)) {
261         Py_XDECREF(cache_frame_f656f83a06578f8ad1f145569d1772c9);
262  
263 #if _DEBUG_REFCOUNTS
264         if (cache_frame_f656f83a06578f8ad1f145569d1772c9 == NULL) {
265             count_active_frame_cache_instances += 1;
266         } else {
267             count_released_frame_cache_instances += 1;
268         }
269         count_allocated_frame_cache_instances += 1;
270 #endif
271         cache_frame_f656f83a06578f8ad1f145569d1772c9 = MAKE_FUNCTION_FRAME(codeobj_f656f83a06578f8ad1f145569d1772c9, module___main__, 0);
272 #if _DEBUG_REFCOUNTS
273     } else {
274         count_hit_frame_cache_instances += 1;
275 #endif
276     }
277     assert(cache_frame_f656f83a06578f8ad1f145569d1772c9->m_type_description == NULL);
278     frame_f656f83a06578f8ad1f145569d1772c9 = cache_frame_f656f83a06578f8ad1f145569d1772c9;
279  
280     // Push the new frame as the currently active one.
281     pushFrameStack(frame_f656f83a06578f8ad1f145569d1772c9);
282  
283     // Mark the frame object as in use, ref count 1 will be up for reuse.
284     assert(Py_REFCNT(frame_f656f83a06578f8ad1f145569d1772c9) == 2); // Frame stack
285  
286     // Framed code:
287     {
288         PyObject *tmp_called_name_1;
289         PyObject *tmp_mvar_value_1;
290         PyObject *tmp_call_result_1;
291         tmp_mvar_value_1 = GET_STRING_DICT_VALUE(moduledict___main__, (Nuitka_StringObject *)const_str_plain_compiled_func);
292  
293         if (unlikely(tmp_mvar_value_1 == NULL)) {
294             tmp_mvar_value_1 = GET_STRING_DICT_VALUE(dict_builtin, (Nuitka_StringObject *)const_str_plain_compiled_func);
295         }
296  
297         if (tmp_mvar_value_1 == NULL) {
298  
299             exception_type = PyExc_NameError;
300             Py_INCREF(exception_type);
301             exception_value = UNSTREAM_STRING(&constant_bin[ 0 ], 35, 0);
302             exception_tb = NULL;
303             NORMALIZE_EXCEPTION(&exception_type, &exception_value, &exception_tb);
304             CHAIN_EXCEPTION(exception_value);
305  
306             exception_lineno = 29;
307  
308             goto frame_exception_exit_1;
309         }
310  
311         tmp_called_name_1 = tmp_mvar_value_1;
312         frame_f656f83a06578f8ad1f145569d1772c9->m_frame.f_lineno = 29;
313         tmp_call_result_1 = CALL_FUNCTION_WITH_ARGS6(tmp_called_name_1, &PyTuple_GET_ITEM(const_tuple_78e2f1ad354bdb7db1a0fda186168ee0_tuple, 0));
314  
315         if (tmp_call_result_1 == NULL) {
316             assert(ERROR_OCCURRED());
317  
318             FETCH_ERROR_OCCURRED(&exception_type, &exception_value, &exception_tb);
319  
320  
321             exception_lineno = 29;
322  
323             goto frame_exception_exit_1;
324         }
325         Py_DECREF(tmp_call_result_1);
326     }
327     {
328         PyObject *tmp_called_name_2;
329         PyObject *tmp_mvar_value_2;
330         PyObject *tmp_call_result_2;
331         tmp_mvar_value_2 = GET_STRING_DICT_VALUE(moduledict___main__, (Nuitka_StringObject *)const_str_plain_compiled_func);
332  
333         if (unlikely(tmp_mvar_value_2 == NULL)) {
334             tmp_mvar_value_2 = GET_STRING_DICT_VALUE(dict_builtin, (Nuitka_StringObject *)const_str_plain_compiled_func);
335         }
336  
337         if (tmp_mvar_value_2 == NULL) {
338  
339             exception_type = PyExc_NameError;
340             Py_INCREF(exception_type);
341             exception_value = UNSTREAM_STRING(&constant_bin[ 0 ], 35, 0);
342             exception_tb = NULL;
343             NORMALIZE_EXCEPTION(&exception_type, &exception_value, &exception_tb);
344             CHAIN_EXCEPTION(exception_value);
345  
346             exception_lineno = 30;
347  
348             goto frame_exception_exit_1;
349         }
350  
351         tmp_called_name_2 = tmp_mvar_value_2;
352         frame_f656f83a06578f8ad1f145569d1772c9->m_frame.f_lineno = 30;
353         tmp_call_result_2 = CALL_FUNCTION_WITH_ARGS6(tmp_called_name_2, &PyTuple_GET_ITEM(const_tuple_ca2f155a28955fc472d4376e2721d689_tuple, 0));
354  
355         if (tmp_call_result_2 == NULL) {
356             assert(ERROR_OCCURRED());
357  
358             FETCH_ERROR_OCCURRED(&exception_type, &exception_value, &exception_tb);
359  
360  
361             exception_lineno = 30;
362  
363             goto frame_exception_exit_1;
364         }
365         Py_DECREF(tmp_call_result_2);
366     }
367     {
368         PyObject *tmp_called_name_3;
369         PyObject *tmp_mvar_value_3;
370         PyObject *tmp_call_result_3;
371         tmp_mvar_value_3 = GET_STRING_DICT_VALUE(moduledict___main__, (Nuitka_StringObject *)const_str_plain_compiled_func);
372  
373         if (unlikely(tmp_mvar_value_3 == NULL)) {
374             tmp_mvar_value_3 = GET_STRING_DICT_VALUE(dict_builtin, (Nuitka_StringObject *)const_str_plain_compiled_func);
375         }
376  
377         if (tmp_mvar_value_3 == NULL) {
378  
379             exception_type = PyExc_NameError;
380             Py_INCREF(exception_type);
381             exception_value = UNSTREAM_STRING(&constant_bin[ 0 ], 35, 0);
382             exception_tb = NULL;
383             NORMALIZE_EXCEPTION(&exception_type, &exception_value, &exception_tb);
384             CHAIN_EXCEPTION(exception_value);
385  
386             exception_lineno = 31;
387  
388             goto frame_exception_exit_1;
389         }
390  
391         tmp_called_name_3 = tmp_mvar_value_3;
392         frame_f656f83a06578f8ad1f145569d1772c9->m_frame.f_lineno = 31;
393         tmp_call_result_3 = CALL_FUNCTION_WITH_ARGS6(tmp_called_name_3, &PyTuple_GET_ITEM(const_tuple_4cee4124c8df2995a8a82b981e580f5e_tuple, 0));
394  
395         if (tmp_call_result_3 == NULL) {
396             assert(ERROR_OCCURRED());
397  
398             FETCH_ERROR_OCCURRED(&exception_type, &exception_value, &exception_tb);
399  
400  
401             exception_lineno = 31;
402  
403             goto frame_exception_exit_1;
404         }
405         Py_DECREF(tmp_call_result_3);
406     }
407  
408 #if 0
409     RESTORE_FRAME_EXCEPTION(frame_f656f83a06578f8ad1f145569d1772c9);
410 #endif
411  
412     // Put the previous frame back on top.
413     popFrameStack();
414  
415     goto frame_no_exception_1;
416  
417     frame_exception_exit_1:;
418  
419 #if 0
420     RESTORE_FRAME_EXCEPTION(frame_f656f83a06578f8ad1f145569d1772c9);
421 #endif
422  
423     if (exception_tb == NULL) {
424         exception_tb = MAKE_TRACEBACK(frame_f656f83a06578f8ad1f145569d1772c9, exception_lineno);
425     } else if (exception_tb->tb_frame != &frame_f656f83a06578f8ad1f145569d1772c9->m_frame) {
426         exception_tb = ADD_TRACEBACK(exception_tb, frame_f656f83a06578f8ad1f145569d1772c9, exception_lineno);
427     }
428  
429     // Attachs locals to frame if any.
430     Nuitka_Frame_AttachLocals(
431         frame_f656f83a06578f8ad1f145569d1772c9,
432         type_description_1
433     );
434  
435  
436     // Release cached frame.
437     if (frame_f656f83a06578f8ad1f145569d1772c9 == cache_frame_f656f83a06578f8ad1f145569d1772c9) {
438 #if _DEBUG_REFCOUNTS
439         count_active_frame_cache_instances -= 1;
440         count_released_frame_cache_instances += 1;
441 #endif
442  
443         Py_DECREF(frame_f656f83a06578f8ad1f145569d1772c9);
444     }
445     cache_frame_f656f83a06578f8ad1f145569d1772c9 = NULL;
446  
447     assertFrameObject(frame_f656f83a06578f8ad1f145569d1772c9);
448  
449     // Put the previous frame back on top.
450     popFrameStack();
451  
452     // Return the error.
453     goto function_exception_exit;
454  
455     frame_no_exception_1:;
456     tmp_return_value = Py_None;
457     Py_INCREF(tmp_return_value);
458     goto function_return_exit;
459  
460     NUITKA_CANNOT_GET_HERE("Return statement must have exited already.");
461     return NULL;
462  
463 function_exception_exit:
464     assert(exception_type);
465     RESTORE_ERROR_OCCURRED(exception_type, exception_value, exception_tb);
466  
467     return NULL;
468  
469 function_return_exit:
470    // Function cleanup code if any.
471  
472  
473    // Actual function exit with return value, making sure we did not make
474    // the error status worse despite non-NULL return.
475    CHECK_OBJECT(tmp_return_value);
476    assert(had_error || !ERROR_OCCURRED());
477    return tmp_return_value;
478 }
479  
480  
481 202
482 static PyObject *MAKE_FUNCTION___main__$$$function_1_compiled_func() { 203 static PyObject *MAKE_FUNCTION___main__$$$function_1_compiled_func() {
483     struct Nuitka_FunctionObject *result = Nuitka_Function_New( 204     struct Nuitka_FunctionObject *result = Nuitka_Function_New(
484         impl___main__$$$function_1_compiled_func, 205         impl___main__$$$function_1_compiled_func,
485         const_str_plain_compiled_func, 206         const_str_plain_compiled_func,
503 224
504 225
505 226
506 static PyObject *MAKE_FUNCTION___main__$$$function_2_calledRepeatedly() { 227 static PyObject *MAKE_FUNCTION___main__$$$function_2_calledRepeatedly() {
507     struct Nuitka_FunctionObject *result = Nuitka_Function_New( 228     struct Nuitka_FunctionObject *result = Nuitka_Function_New(
n 508         impl___main__$$$function_2_calledRepeatedly, n 229         NULL,
509         const_str_plain_calledRepeatedly, 230         const_str_plain_calledRepeatedly,
510 #if PYTHON_VERSION >= 300 231 #if PYTHON_VERSION >= 300
511         NULL, 232         NULL,
512 #endif 233 #endif
n 513         codeobj_f656f83a06578f8ad1f145569d1772c9, n 234         codeobj_5706d18e7cd7f0f2a4c4b63929f90702,
514         NULL, 235         NULL,
515 #if PYTHON_VERSION >= 300 236 #if PYTHON_VERSION >= 300
516         NULL, 237         NULL,
517         NULL, 238         NULL,
518 #endif 239 #endif
554 // Provide a way to create find a function via its C code and create it back 275 // Provide a way to create find a function via its C code and create it back
555 // in another process, useful for multiprocessing extensions like dill 276 // in another process, useful for multiprocessing extensions like dill
556 277
557 function_impl_code functable___main__[] = { 278 function_impl_code functable___main__[] = {
558     impl___main__$$$function_1_compiled_func, 279     impl___main__$$$function_1_compiled_func,
n 559     impl___main__$$$function_2_calledRepeatedly, n 280     NULL,
560     NULL 281     NULL
561 }; 282 };
562 283
563 static char const *_reduce_compiled_function_argnames[] = { 284 static char const *_reduce_compiled_function_argnames[] = {
564     "func", 285     "func",
1091 812
1092         if (tmp_mvar_value_2 == NULL) { 813         if (tmp_mvar_value_2 == NULL) {
1093 814
1094             exception_type = PyExc_NameError; 815             exception_type = PyExc_NameError;
1095             Py_INCREF(exception_type); 816             Py_INCREF(exception_type);
t 1096             exception_value = UNSTREAM_STRING(&constant_bin[ 35 ], 38, 0); t 817             exception_value = UNSTREAM_STRING(&constant_bin[ 0 ], 38, 0);
1097             exception_tb = NULL; 818             exception_tb = NULL;
1098             NORMALIZE_EXCEPTION(&exception_type, &exception_value, &exception_tb); 819             NORMALIZE_EXCEPTION(&exception_type, &exception_value, &exception_tb);
1099             CHAIN_EXCEPTION(exception_value); 820             CHAIN_EXCEPTION(exception_value);
1100 821
1101             exception_lineno = 38; 822             exception_lineno = 38;