Construct CallCompiledFunctionPosArgsConstant

Performance Diagrams

Construct CallCompiledFunctionPosArgsConstant 002000000020000000400000004000000060000000600000008000000080000000100000000100000000120000000120000000140000000140000000160000000160000000180000000180000000200000000200000000220000000220000000CPython 2.7Nuitka (historic)Nuitka (master)Nuitka (develop)Nuitka (factory)22931442372.9230769230769257.0CPython 2.775503937194.46153846153845422.75031307895205Nuitka (historic)61005591316.0438.3741203441275Nuitka (master)61006314437.53846153846143438.37334121989824Nuitka (develop)61005807559.0769230769231438.3738875767229Nuitka (factory)Construct CallCompiledFunctionPosArgsConstantTicks Construct CallCompiledFunctionPosArgsConstant 002000000020000000400000004000000060000000600000008000000080000000100000000100000000120000000120000000140000000140000000160000000160000000180000000180000000200000000200000000CPython 3.5Nuitka (historic)Nuitka (master)Nuitka (develop)Nuitka (factory)21728435472.9230769230769257.0CPython 3.50194.46153846153845504.11538461538464Nuitka (historic)71260082316.0423.07198573746155Nuitka (master)71255426437.53846153846143423.07728096102267Nuitka (develop)71260011559.0769230769231423.0720664850717Nuitka (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



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

for x in xrange(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 for x in xrange(50000): 36 for x in xrange(50000):
37     calledRepeatedly() 37     calledRepeatedly()
38 38
39 print("OK.") 39 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_b; 34 static PyObject *const_str_plain_b;
36 static PyObject *const_str_plain___package__; 35 static PyObject *const_str_plain___package__;
37 static PyObject *const_str_digest_53c050a4e43ef6adad91dc6984c7bac7; 36 static PyObject *const_str_digest_53c050a4e43ef6adad91dc6984c7bac7;
n 38 static PyObject *const_tuple_4cee4124c8df2995a8a82b981e580f5e_tuple; n
39 static PyObject *const_tuple_d4571c3ff966778a8b3ba4a6bd66fdef_tuple; 37 static PyObject *const_tuple_d4571c3ff966778a8b3ba4a6bd66fdef_tuple;
40 static PyObject *const_str_plain_f; 38 static PyObject *const_str_plain_f;
n 41 static PyObject *const_str_plain_values; n 39 extern PyObject *const_int_pos_1;
42 extern PyObject *const_dict_empty; 40 extern PyObject *const_dict_empty;
n 43 extern PyObject *const_int_pos_1; n
44 extern PyObject *const_str_plain___file__; 41 extern PyObject *const_str_plain___file__;
n 45 static PyObject *const_str_plain_other; n
46 extern PyObject *const_int_0; 42 extern PyObject *const_int_0;
n 47 static PyObject *const_str_plain_check; n
48 static PyObject *const_xrange_0_50000; 43 static PyObject *const_xrange_0_50000;
49 static PyObject *const_str_plain_compiled_func; 44 static PyObject *const_str_plain_compiled_func;
n n 45 static PyObject *const_str_plain_a;
50 extern PyObject *const_str_plain_print; 46 extern PyObject *const_str_plain_print;
n 51 static PyObject *const_str_plain_call; n
52 static PyObject *const_str_plain_a;
53 static PyObject *const_int_pos_50000; 47 static PyObject *const_int_pos_50000;
54 static PyObject *const_tuple_str_digest_5ed1392909ad16e6227b8230f4582352_tuple; 48 static PyObject *const_tuple_str_digest_5ed1392909ad16e6227b8230f4582352_tuple;
n 55 static PyObject *const_str_plain_random; n
56 static PyObject *const_str_plain_e; 49 static PyObject *const_str_plain_e;
57 static PyObject *const_str_plain_calledRepeatedly; 50 static PyObject *const_str_plain_calledRepeatedly;
58 static PyObject *const_str_angle_module; 51 static PyObject *const_str_angle_module;
59 static PyObject *const_str_plain_x; 52 static PyObject *const_str_plain_x;
60 extern PyObject *const_tuple_empty; 53 extern PyObject *const_tuple_empty;
61 static PyObject *const_str_plain_c; 54 static PyObject *const_str_plain_c;
62 static PyObject *const_str_digest_5ed1392909ad16e6227b8230f4582352; 55 static PyObject *const_str_digest_5ed1392909ad16e6227b8230f4582352;
n 63 static PyObject *const_str_plain_some; n
64 static PyObject *const_str_plain_new;
65 extern PyObject *const_str_plain___main__; 56 extern PyObject *const_str_plain___main__;
n 66 static PyObject *const_tuple_78e2f1ad354bdb7db1a0fda186168ee0_tuple; n
67 static PyObject *const_tuple_ca2f155a28955fc472d4376e2721d689_tuple;
68 static PyObject *const_str_plain_d; 57 static PyObject *const_str_plain_d;
69 extern PyObject *const_str_plain___doc__; 58 extern PyObject *const_str_plain___doc__;
70 extern PyObject *const_str_plain___cached__; 59 extern PyObject *const_str_plain___cached__;
71 static PyObject *module_filename_obj; 60 static PyObject *module_filename_obj;
72 61
73 static bool constants_created = false; 62 static bool constants_created = false;
74 63
75 static void createModuleConstants( void ) 64 static void createModuleConstants( void )
76 { 65 {
n 77     const_str_plain_to = UNSTREAM_STRING( &constant_bin[ 0 ], 2, 1 ); n
78     const_str_plain_b = UNSTREAM_STRING( &constant_bin[ 2 ], 1, 1 ); 66     const_str_plain_b = UNSTREAM_STRING( &constant_bin[ 0 ], 1, 1 );
79     const_str_plain___package__ = UNSTREAM_STRING( &constant_bin[ 3 ], 11, 1 ); 67     const_str_plain___package__ = UNSTREAM_STRING( &constant_bin[ 1 ], 11, 1 );
80     const_str_digest_53c050a4e43ef6adad91dc6984c7bac7 = UNSTREAM_STRING( &constant_bin[ 14 ], 93, 0 ); 68     const_str_digest_53c050a4e43ef6adad91dc6984c7bac7 = UNSTREAM_STRING( &constant_bin[ 12 ], 93, 0 );
81     const_tuple_4cee4124c8df2995a8a82b981e580f5e_tuple = PyTuple_New( 6 );
82     const_str_plain_some = UNSTREAM_STRING( &constant_bin[ 107 ], 4, 1 );
83     PyTuple_SET_ITEM( const_tuple_4cee4124c8df2995a8a82b981e580f5e_tuple, 0, const_str_plain_some ); Py_INCREF( const_str_plain_some );
84     const_str_plain_new = UNSTREAM_STRING( &constant_bin[ 111 ], 3, 1 );
85     PyTuple_SET_ITEM( const_tuple_4cee4124c8df2995a8a82b981e580f5e_tuple, 1, const_str_plain_new ); Py_INCREF( const_str_plain_new );
86     const_str_plain_values = UNSTREAM_STRING( &constant_bin[ 114 ], 6, 1 );
87     PyTuple_SET_ITEM( const_tuple_4cee4124c8df2995a8a82b981e580f5e_tuple, 2, const_str_plain_values ); Py_INCREF( const_str_plain_values );
88     PyTuple_SET_ITEM( const_tuple_4cee4124c8df2995a8a82b981e580f5e_tuple, 3, const_str_plain_to ); Py_INCREF( const_str_plain_to );
89     const_str_plain_check = UNSTREAM_STRING( &constant_bin[ 120 ], 5, 1 );
90     PyTuple_SET_ITEM( const_tuple_4cee4124c8df2995a8a82b981e580f5e_tuple, 4, const_str_plain_check ); Py_INCREF( const_str_plain_check );
91     const_str_plain_call = UNSTREAM_STRING( &constant_bin[ 125 ], 4, 1 );
92     PyTuple_SET_ITEM( const_tuple_4cee4124c8df2995a8a82b981e580f5e_tuple, 5, const_str_plain_call ); Py_INCREF( const_str_plain_call );
93     const_tuple_d4571c3ff966778a8b3ba4a6bd66fdef_tuple = PyTuple_New( 6 ); 69     const_tuple_d4571c3ff966778a8b3ba4a6bd66fdef_tuple = PyTuple_New( 6 );
n 94     const_str_plain_a = UNSTREAM_STRING( &constant_bin[ 6 ], 1, 1 ); n 70     const_str_plain_a = UNSTREAM_STRING( &constant_bin[ 4 ], 1, 1 );
95     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 );
96     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 );
n 97     const_str_plain_c = UNSTREAM_STRING( &constant_bin[ 7 ], 1, 1 ); n 73     const_str_plain_c = UNSTREAM_STRING( &constant_bin[ 5 ], 1, 1 );
98     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 99     const_str_plain_d = UNSTREAM_STRING( &constant_bin[ 19 ], 1, 1 ); n 75     const_str_plain_d = UNSTREAM_STRING( &constant_bin[ 17 ], 1, 1 );
100     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 );
n 101     const_str_plain_e = UNSTREAM_STRING( &constant_bin[ 11 ], 1, 1 ); n 77     const_str_plain_e = UNSTREAM_STRING( &constant_bin[ 9 ], 1, 1 );
102     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 103     const_str_plain_f = UNSTREAM_STRING( &constant_bin[ 61 ], 1, 1 ); n 79     const_str_plain_f = UNSTREAM_STRING( &constant_bin[ 59 ], 1, 1 );
104     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 105     const_str_plain_other = UNSTREAM_STRING( &constant_bin[ 129 ], 5, 1 ); n
106     const_int_pos_50000 = PyLong_FromUnsignedLong( 50000ul ); 81     const_int_pos_50000 = PyLong_FromUnsignedLong( 50000ul );
107     const_xrange_0_50000 = BUILTIN_XRANGE3( const_int_0, const_int_pos_50000, const_int_pos_1 ); 82     const_xrange_0_50000 = BUILTIN_XRANGE3( const_int_0, const_int_pos_50000, const_int_pos_1 );
n 108     const_str_plain_compiled_func = UNSTREAM_STRING( &constant_bin[ 134 ], 13, 1 ); n 83     const_str_plain_compiled_func = UNSTREAM_STRING( &constant_bin[ 105 ], 13, 1 );
109     const_tuple_str_digest_5ed1392909ad16e6227b8230f4582352_tuple = PyTuple_New( 1 ); 84     const_tuple_str_digest_5ed1392909ad16e6227b8230f4582352_tuple = PyTuple_New( 1 );
n 110     const_str_digest_5ed1392909ad16e6227b8230f4582352 = UNSTREAM_STRING( &constant_bin[ 147 ], 3, 0 ); n 85     const_str_digest_5ed1392909ad16e6227b8230f4582352 = UNSTREAM_STRING( &constant_bin[ 118 ], 3, 0 );
111     PyTuple_SET_ITEM( const_tuple_str_digest_5ed1392909ad16e6227b8230f4582352_tuple, 0, const_str_digest_5ed1392909ad16e6227b8230f4582352 ); Py_INCREF( const_str_digest_5ed1392909ad16e6227b8230f4582352 ); 86     PyTuple_SET_ITEM( const_tuple_str_digest_5ed1392909ad16e6227b8230f4582352_tuple, 0, const_str_digest_5ed1392909ad16e6227b8230f4582352 ); Py_INCREF( const_str_digest_5ed1392909ad16e6227b8230f4582352 );
n 112     const_str_plain_random = UNSTREAM_STRING( &constant_bin[ 150 ], 6, 1 ); n
113     const_str_plain_calledRepeatedly = UNSTREAM_STRING( &constant_bin[ 156 ], 16, 1 ); 87     const_str_plain_calledRepeatedly = UNSTREAM_STRING( &constant_bin[ 121 ], 16, 1 );
114     const_str_angle_module = UNSTREAM_STRING( &constant_bin[ 172 ], 8, 0 ); 88     const_str_angle_module = UNSTREAM_STRING( &constant_bin[ 137 ], 8, 0 );
115     const_str_plain_x = UNSTREAM_STRING( &constant_bin[ 39 ], 1, 1 ); 89     const_str_plain_x = UNSTREAM_STRING( &constant_bin[ 37 ], 1, 1 );
116     const_tuple_78e2f1ad354bdb7db1a0fda186168ee0_tuple = PyTuple_New( 6 );
117     PyTuple_SET_ITEM( const_tuple_78e2f1ad354bdb7db1a0fda186168ee0_tuple, 0, const_str_plain_some ); Py_INCREF( const_str_plain_some );
118     PyTuple_SET_ITEM( const_tuple_78e2f1ad354bdb7db1a0fda186168ee0_tuple, 1, const_str_plain_random ); Py_INCREF( const_str_plain_random );
119     PyTuple_SET_ITEM( const_tuple_78e2f1ad354bdb7db1a0fda186168ee0_tuple, 2, const_str_plain_values ); Py_INCREF( const_str_plain_values );
120     PyTuple_SET_ITEM( const_tuple_78e2f1ad354bdb7db1a0fda186168ee0_tuple, 3, const_str_plain_to ); Py_INCREF( const_str_plain_to );
121     PyTuple_SET_ITEM( const_tuple_78e2f1ad354bdb7db1a0fda186168ee0_tuple, 4, const_str_plain_check ); Py_INCREF( const_str_plain_check );
122     PyTuple_SET_ITEM( const_tuple_78e2f1ad354bdb7db1a0fda186168ee0_tuple, 5, const_str_plain_call ); Py_INCREF( const_str_plain_call );
123     const_tuple_ca2f155a28955fc472d4376e2721d689_tuple = PyTuple_New( 6 );
124     PyTuple_SET_ITEM( const_tuple_ca2f155a28955fc472d4376e2721d689_tuple, 0, const_str_plain_some ); Py_INCREF( const_str_plain_some );
125     PyTuple_SET_ITEM( const_tuple_ca2f155a28955fc472d4376e2721d689_tuple, 1, const_str_plain_other ); Py_INCREF( const_str_plain_other );
126     PyTuple_SET_ITEM( const_tuple_ca2f155a28955fc472d4376e2721d689_tuple, 2, const_str_plain_values ); Py_INCREF( const_str_plain_values );
127     PyTuple_SET_ITEM( const_tuple_ca2f155a28955fc472d4376e2721d689_tuple, 3, const_str_plain_to ); Py_INCREF( const_str_plain_to );
128     PyTuple_SET_ITEM( const_tuple_ca2f155a28955fc472d4376e2721d689_tuple, 4, const_str_plain_check ); Py_INCREF( const_str_plain_check );
129     PyTuple_SET_ITEM( const_tuple_ca2f155a28955fc472d4376e2721d689_tuple, 5, const_str_plain_call ); Py_INCREF( const_str_plain_call );
130 90
131     constants_created = true; 91     constants_created = true;
132 } 92 }
133 93
134 #ifndef __NUITKA_NO_ASSERT__ 94 #ifndef __NUITKA_NO_ASSERT__
141 } 101 }
142 #endif 102 #endif
143 103
144 // The module code objects. 104 // The module code objects.
145 static PyCodeObject *codeobj_43fff63d6d22946a6ef03470a061971c; 105 static PyCodeObject *codeobj_43fff63d6d22946a6ef03470a061971c;
n 146 static PyCodeObject *codeobj_b93b283269ee14f552cfca07acca82e8; n 106 static PyCodeObject *codeobj_f577199648e6eb4820c1b1fba214f3c3;
147 static PyCodeObject *codeobj_4afe05f003e602ab1cb4f9305d126503; 107 static PyCodeObject *codeobj_4afe05f003e602ab1cb4f9305d126503;
148 /* For use in "MainProgram.c". */ 108 /* For use in "MainProgram.c". */
149 PyCodeObject *codeobj_main = NULL; 109 PyCodeObject *codeobj_main = NULL;
150 110
151 static void createModuleCodeObjects(void) 111 static void createModuleCodeObjects(void)
152 { 112 {
153     module_filename_obj = const_str_digest_53c050a4e43ef6adad91dc6984c7bac7; 113     module_filename_obj = const_str_digest_53c050a4e43ef6adad91dc6984c7bac7;
154     codeobj_43fff63d6d22946a6ef03470a061971c = MAKE_CODEOBJ( module_filename_obj, const_str_angle_module, 1, const_tuple_empty, 0, 0, CO_NOFREE ); 114     codeobj_43fff63d6d22946a6ef03470a061971c = MAKE_CODEOBJ( module_filename_obj, const_str_angle_module, 1, const_tuple_empty, 0, 0, CO_NOFREE );
155     codeobj_main = codeobj_43fff63d6d22946a6ef03470a061971c; 115     codeobj_main = codeobj_43fff63d6d22946a6ef03470a061971c;
n 156     codeobj_b93b283269ee14f552cfca07acca82e8 = MAKE_CODEOBJ( module_filename_obj, const_str_plain_calledRepeatedly, 25, const_tuple_empty, 0, 0, CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE ); n 116     codeobj_f577199648e6eb4820c1b1fba214f3c3 = MAKE_CODEOBJ( module_filename_obj, const_str_plain_calledRepeatedly, 25, const_tuple_empty, 0, 0, CO_NOFREE );
157     codeobj_4afe05f003e602ab1cb4f9305d126503 = MAKE_CODEOBJ( module_filename_obj, const_str_plain_compiled_func, 22, const_tuple_d4571c3ff966778a8b3ba4a6bd66fdef_tuple, 6, 0, CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE ); 117     codeobj_4afe05f003e602ab1cb4f9305d126503 = MAKE_CODEOBJ( module_filename_obj, const_str_plain_compiled_func, 22, const_tuple_d4571c3ff966778a8b3ba4a6bd66fdef_tuple, 6, 0, CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE );
158 } 118 }
159 119
160 // The module function declarations. 120 // The module function declarations.
161 static PyObject *MAKE_FUNCTION___main__$$$function_1_compiled_func(  ); 121 static PyObject *MAKE_FUNCTION___main__$$$function_1_compiled_func(  );
263 #ifndef __NUITKA_NO_ASSERT__ 223 #ifndef __NUITKA_NO_ASSERT__
264     NUITKA_MAY_BE_UNUSED bool had_error = ERROR_OCCURRED(); 224     NUITKA_MAY_BE_UNUSED bool had_error = ERROR_OCCURRED();
265 #endif 225 #endif
266 226
267     // Local variable declarations. 227     // Local variable declarations.
n 268     PyObject *exception_type = NULL, *exception_value = NULL; n
269     PyTracebackObject *exception_tb = NULL;
270     NUITKA_MAY_BE_UNUSED int exception_lineno = -1;
271     PyObject *tmp_called_name_1;
272     PyObject *tmp_called_name_2;
273     PyObject *tmp_called_name_3;
274     PyObject *tmp_return_value; 228     PyObject *tmp_return_value;
n 275     NUITKA_MAY_BE_UNUSED PyObject *tmp_unused; n
276     static struct Nuitka_FrameObject *cache_frame_b93b283269ee14f552cfca07acca82e8 = NULL;
277  
278     struct Nuitka_FrameObject *frame_b93b283269ee14f552cfca07acca82e8;
279  
280     tmp_return_value = NULL; 229     tmp_return_value = NULL;
281 230
282     // Actual function code. 231     // Actual function code.
n 283     MAKE_OR_REUSE_FRAME( cache_frame_b93b283269ee14f552cfca07acca82e8, codeobj_b93b283269ee14f552cfca07acca82e8, module___main__, 0 ); n
284     frame_b93b283269ee14f552cfca07acca82e8 = cache_frame_b93b283269ee14f552cfca07acca82e8;
285  
286     // Push the new frame as the currently active one.
287     pushFrameStack( frame_b93b283269ee14f552cfca07acca82e8 );
288  
289     // Mark the frame object as in use, ref count 1 will be up for reuse.
290     assert( Py_REFCNT( frame_b93b283269ee14f552cfca07acca82e8 ) == 2 ); // Frame stack
291  
292     // Framed code:
293     tmp_called_name_1 = GET_STRING_DICT_VALUE( moduledict___main__, (Nuitka_StringObject *)const_str_plain_compiled_func );
294  
295     if (unlikely( tmp_called_name_1 == NULL ))
296     {
297         tmp_called_name_1 = GET_STRING_DICT_VALUE( dict_builtin, (Nuitka_StringObject *)const_str_plain_compiled_func );
298     }
299  
300     if ( tmp_called_name_1 == NULL )
301     {
302  
303         exception_type = PyExc_NameError;
304         Py_INCREF( exception_type );
305         exception_value = PyUnicode_FromFormat( "name '%s' is not defined", "compiled_func" );
306         exception_tb = NULL;
307         NORMALIZE_EXCEPTION( &exception_type, &exception_value, &exception_tb );
308         CHAIN_EXCEPTION( exception_value );
309  
310         exception_lineno = 29;
311  
312         goto frame_exception_exit_1;
313     }
314  
315     frame_b93b283269ee14f552cfca07acca82e8->m_frame.f_lineno = 29;
316     tmp_unused = CALL_FUNCTION_WITH_ARGS6( tmp_called_name_1, &PyTuple_GET_ITEM( const_tuple_78e2f1ad354bdb7db1a0fda186168ee0_tuple, 0 ) );
317  
318     if ( tmp_unused == NULL )
319     {
320         assert( ERROR_OCCURRED() );
321  
322         FETCH_ERROR_OCCURRED( &exception_type, &exception_value, &exception_tb );
323  
324  
325         exception_lineno = 29;
326  
327         goto frame_exception_exit_1;
328     }
329     Py_DECREF( tmp_unused );
330     tmp_called_name_2 = GET_STRING_DICT_VALUE( moduledict___main__, (Nuitka_StringObject *)const_str_plain_compiled_func );
331  
332     if (unlikely( tmp_called_name_2 == NULL ))
333     {
334         tmp_called_name_2 = GET_STRING_DICT_VALUE( dict_builtin, (Nuitka_StringObject *)const_str_plain_compiled_func );
335     }
336  
337     if ( tmp_called_name_2 == NULL )
338     {
339  
340         exception_type = PyExc_NameError;
341         Py_INCREF( exception_type );
342         exception_value = PyUnicode_FromFormat( "name '%s' is not defined", "compiled_func" );
343         exception_tb = NULL;
344         NORMALIZE_EXCEPTION( &exception_type, &exception_value, &exception_tb );
345         CHAIN_EXCEPTION( exception_value );
346  
347         exception_lineno = 30;
348  
349         goto frame_exception_exit_1;
350     }
351  
352     frame_b93b283269ee14f552cfca07acca82e8->m_frame.f_lineno = 30;
353     tmp_unused = CALL_FUNCTION_WITH_ARGS6( tmp_called_name_2, &PyTuple_GET_ITEM( const_tuple_ca2f155a28955fc472d4376e2721d689_tuple, 0 ) );
354  
355     if ( tmp_unused == NULL )
356     {
357         assert( ERROR_OCCURRED() );
358  
359         FETCH_ERROR_OCCURRED( &exception_type, &exception_value, &exception_tb );
360  
361  
362         exception_lineno = 30;
363  
364         goto frame_exception_exit_1;
365     }
366     Py_DECREF( tmp_unused );
367     tmp_called_name_3 = GET_STRING_DICT_VALUE( moduledict___main__, (Nuitka_StringObject *)const_str_plain_compiled_func );
368  
369     if (unlikely( tmp_called_name_3 == NULL ))
370     {
371         tmp_called_name_3 = GET_STRING_DICT_VALUE( dict_builtin, (Nuitka_StringObject *)const_str_plain_compiled_func );
372     }
373  
374     if ( tmp_called_name_3 == NULL )
375     {
376  
377         exception_type = PyExc_NameError;
378         Py_INCREF( exception_type );
379         exception_value = PyUnicode_FromFormat( "name '%s' is not defined", "compiled_func" );
380         exception_tb = NULL;
381         NORMALIZE_EXCEPTION( &exception_type, &exception_value, &exception_tb );
382         CHAIN_EXCEPTION( exception_value );
383  
384         exception_lineno = 31;
385  
386         goto frame_exception_exit_1;
387     }
388  
389     frame_b93b283269ee14f552cfca07acca82e8->m_frame.f_lineno = 31;
390     tmp_unused = CALL_FUNCTION_WITH_ARGS6( tmp_called_name_3, &PyTuple_GET_ITEM( const_tuple_4cee4124c8df2995a8a82b981e580f5e_tuple, 0 ) );
391  
392     if ( tmp_unused == NULL )
393     {
394         assert( ERROR_OCCURRED() );
395  
396         FETCH_ERROR_OCCURRED( &exception_type, &exception_value, &exception_tb );
397  
398  
399         exception_lineno = 31;
400  
401         goto frame_exception_exit_1;
402     }
403     Py_DECREF( tmp_unused );
404  
405 #if 0
406     RESTORE_FRAME_EXCEPTION( frame_b93b283269ee14f552cfca07acca82e8 );
407 #endif
408  
409     // Put the previous frame back on top.
410     popFrameStack();
411  
412     goto frame_no_exception_1;
413  
414     frame_exception_exit_1:;
415  
416 #if 0
417     RESTORE_FRAME_EXCEPTION( frame_b93b283269ee14f552cfca07acca82e8 );
418 #endif
419  
420     if ( exception_tb == NULL )
421     {
422         exception_tb = MAKE_TRACEBACK( frame_b93b283269ee14f552cfca07acca82e8, exception_lineno );
423     }
424     else if ( exception_tb->tb_frame != &frame_b93b283269ee14f552cfca07acca82e8->m_frame )
425     {
426         exception_tb = ADD_TRACEBACK( exception_tb, frame_b93b283269ee14f552cfca07acca82e8, exception_lineno );
427     }
428  
429     Nuitka_Frame_AttachLocals( (struct Nuitka_FrameObject *)frame_b93b283269ee14f552cfca07acca82e8, ""  );
430  
431     // Release cached frame.
432     if ( frame_b93b283269ee14f552cfca07acca82e8 == cache_frame_b93b283269ee14f552cfca07acca82e8 )
433     {
434         Py_DECREF( frame_b93b283269ee14f552cfca07acca82e8 );
435     }
436     cache_frame_b93b283269ee14f552cfca07acca82e8 = NULL;
437  
438     assertFrameObject( frame_b93b283269ee14f552cfca07acca82e8 );
439  
440  
441     // Put the previous frame back on top.
442     popFrameStack();
443  
444     // Return the error.
445     goto function_exception_exit;
446  
447     frame_no_exception_1:;
448  
449     tmp_return_value = Py_None; 232     tmp_return_value = Py_None;
450     Py_INCREF( tmp_return_value ); 233     Py_INCREF( tmp_return_value );
451     goto function_return_exit; 234     goto function_return_exit;
452 235
453     // Return statement must have exited already. 236     // Return statement must have exited already.
454     NUITKA_CANNOT_GET_HERE( __main__$$$function_2_calledRepeatedly ); 237     NUITKA_CANNOT_GET_HERE( __main__$$$function_2_calledRepeatedly );
455     return NULL; 238     return NULL;
456 239
n 457 function_exception_exit: n
458     assert( exception_type );
459     RESTORE_ERROR_OCCURRED( exception_type, exception_value, exception_tb );
460  
461     return NULL;
462     function_return_exit: 240     function_return_exit:
463 241
464     CHECK_OBJECT( tmp_return_value ); 242     CHECK_OBJECT( tmp_return_value );
465     assert( had_error || !ERROR_OCCURRED() ); 243     assert( had_error || !ERROR_OCCURRED() );
466     return tmp_return_value; 244     return tmp_return_value;
500         impl___main__$$$function_2_calledRepeatedly, 278         impl___main__$$$function_2_calledRepeatedly,
501         const_str_plain_calledRepeatedly, 279         const_str_plain_calledRepeatedly,
502 #if PYTHON_VERSION >= 330 280 #if PYTHON_VERSION >= 330
503         NULL, 281         NULL,
504 #endif 282 #endif
t 505         codeobj_b93b283269ee14f552cfca07acca82e8, t 283         codeobj_f577199648e6eb4820c1b1fba214f3c3,
506         NULL, 284         NULL,
507 #if PYTHON_VERSION >= 300 285 #if PYTHON_VERSION >= 300
508         NULL, 286         NULL,
509         const_dict_empty, 287         const_dict_empty,
510 #endif 288 #endif