Construct CallUncompiledFunctionComplexArgs

Performance Diagrams

Construct CallUncompiledFunctionComplexArgs 001000000010000000200000002000000030000000300000004000000040000000CPython 2.7Nuitka (main)Nuitka (develop)Nuitka (factory)4714012088.95192307692307257.0CPython 2.739911784242.31730769230768294.89199159376835Nuitka (main)39911868395.6826923076923294.8915512535166Nuitka (develop)39911868549.0480769230769294.8915512535166Nuitka (factory)Construct CallUncompiledFunctionComplexArgsTicks Construct CallUncompiledFunctionComplexArgs 001000000010000000200000002000000030000000300000004000000040000000500000005000000060000000600000007000000070000000CPython 3.8Nuitka (main)Nuitka (develop)Nuitka (factory)7845599088.95192307692307257.0CPython 3.840525732242.31730769230768376.4701678511834Nuitka (main)40521474395.6826923076923376.4835794123363Nuitka (develop)40521474549.0480769230769376.4835794123363Nuitka (factory)Construct CallUncompiledFunctionComplexArgsTicks

Source Code with Construct

from __future__ import print_function

exec("""
def python_func(a,b,c,d,e,f):
    pass
""")

a = (
   1, 2, 3, 4, 5
)

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

    # Force a frame for now.
    args = a

# construct_begin
    python_f(3, *args)
# construct_alternative



    return python_f, args

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

print("OK.")

Source Code without Construct

from __future__ import print_function

exec("""
def python_func(a,b,c,d,e,f):
    pass
""")

a = (
   1, 2, 3, 4, 5
)

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

    # Force a frame for now.
    args = a

# construct_begin

# construct_alternative
    pass
# construct_end

    return python_f, args

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

print("OK.")

Context Diff of Source Code


Construct
Baseline
34 34
35     # Force a frame for now. 35     # Force a frame for now.
36     args = a 36     args = a
37 37
38 # construct_begin 38 # construct_begin
n 39     python_f(3, *args) n 39  
40 # construct_alternative 40 # construct_alternative
t 41   t 41     pass
42   42 # construct_end
43 43
44     return python_f, args 44     return python_f, args
45 45
46 import itertools 46 import itertools
47 for x in itertools.repeat(None, 50000): 47 for x in itertools.repeat(None, 50000):

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 *mod_consts[31]; n 36 static PyObject *mod_consts[22];
37 #ifndef __NUITKA_NO_ASSERT__ 37 #ifndef __NUITKA_NO_ASSERT__
n 38 static Py_hash_t mod_consts_hash[31]; n 38 static Py_hash_t mod_consts_hash[22];
39 #endif 39 #endif
40 40
41 static PyObject *module_filename_obj = NULL; 41 static PyObject *module_filename_obj = NULL;
42 42
43 /* Indicator if this modules private constants were created yet. */ 43 /* Indicator if this modules private constants were created yet. */
48     if (constants_created == false) { 48     if (constants_created == false) {
49         loadConstantsBlob(&mod_consts[0], UNTRANSLATE("__main__")); 49         loadConstantsBlob(&mod_consts[0], UNTRANSLATE("__main__"));
50         constants_created = true; 50         constants_created = true;
51 51
52 #ifndef __NUITKA_NO_ASSERT__ 52 #ifndef __NUITKA_NO_ASSERT__
n 53         for(int i = 0; i < 31; i++) { n 53         for(int i = 0; i < 22; i++) {
54             mod_consts_hash[i] = DEEP_HASH(mod_consts[i]); 54             mod_consts_hash[i] = DEEP_HASH(mod_consts[i]);
55         } 55         }
56 #endif 56 #endif
57     } 57     }
58 } 58 }
68 #ifndef __NUITKA_NO_ASSERT__ 68 #ifndef __NUITKA_NO_ASSERT__
69 void checkModuleConstants___main__(void) { 69 void checkModuleConstants___main__(void) {
70     // The module may not have been used at all, then ignore this. 70     // The module may not have been used at all, then ignore this.
71     if (constants_created == false) return; 71     if (constants_created == false) return;
72 72
n 73     for(int i = 0; i < 31; i++) { n 73     for(int i = 0; i < 22; i++) {
74         assert(mod_consts_hash[i] == DEEP_HASH(mod_consts[i])); 74         assert(mod_consts_hash[i] == DEEP_HASH(mod_consts[i]));
75         CHECK_OBJECT_DEEP(mod_consts[i]); 75         CHECK_OBJECT_DEEP(mod_consts[i]);
76     } 76     }
77 } 77 }
78 #endif 78 #endif
82 static PyCodeObject *codeobj_5f2c551540201fee6549921d079e59f7; 82 static PyCodeObject *codeobj_5f2c551540201fee6549921d079e59f7;
83 /* For use in "MainProgram.c". */ 83 /* For use in "MainProgram.c". */
84 PyCodeObject *codeobj_main = NULL; 84 PyCodeObject *codeobj_main = NULL;
85 85
86 static void createModuleCodeObjects(void) { 86 static void createModuleCodeObjects(void) {
n 87     module_filename_obj = mod_consts[11]; CHECK_OBJECT(module_filename_obj); n 87     module_filename_obj = mod_consts[2]; CHECK_OBJECT(module_filename_obj);
88     codeobj_61867addcd2570b53514f06044a0fa73 = MAKE_CODEOBJECT(module_filename_obj, 1, CO_NOFREE, mod_consts[29], NULL, NULL, 0, 0, 0); 88     codeobj_61867addcd2570b53514f06044a0fa73 = MAKE_CODEOBJECT(module_filename_obj, 1, CO_NOFREE, mod_consts[20], NULL, NULL, 0, 0, 0);
89     codeobj_5f2c551540201fee6549921d079e59f7 = MAKE_CODEOBJECT(module_filename_obj, 31, CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE, mod_consts[20], mod_consts[30], NULL, 1, 0, 0); 89     codeobj_5f2c551540201fee6549921d079e59f7 = MAKE_CODEOBJECT(module_filename_obj, 31, CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE, mod_consts[11], mod_consts[21], NULL, 1, 0, 0);
90 } 90 }
91 91
92 // The module function declarations. 92 // The module function declarations.
n 93 NUITKA_LOCAL_MODULE PyObject *impl___main__$$$function__1_complex_call_helper_pos_star_list(PyObject **python_pars); n
94  
95  
96 NUITKA_LOCAL_MODULE PyObject *impl___main__$$$function__2_get_callable_name_desc(PyObject **python_pars);
97  
98  
99 static PyObject *MAKE_FUNCTION___main__$$$function__1_calledRepeatedly(); 93 static PyObject *MAKE_FUNCTION___main__$$$function__1_calledRepeatedly();
100 94
101 95
102 // The module function definitions. 96 // The module function definitions.
103 static PyObject *impl___main__$$$function__1_calledRepeatedly(struct Nuitka_FunctionObject const *self, PyObject **python_pars) { 97 static PyObject *impl___main__$$$function__1_calledRepeatedly(struct Nuitka_FunctionObject const *self, PyObject **python_pars) {
113     NUITKA_MAY_BE_UNUSED char const *type_description_1 = NULL; 107     NUITKA_MAY_BE_UNUSED char const *type_description_1 = NULL;
114     PyObject *exception_type = NULL; 108     PyObject *exception_type = NULL;
115     PyObject *exception_value = NULL; 109     PyObject *exception_value = NULL;
116     PyTracebackObject *exception_tb = NULL; 110     PyTracebackObject *exception_tb = NULL;
117     NUITKA_MAY_BE_UNUSED int exception_lineno = 0; 111     NUITKA_MAY_BE_UNUSED int exception_lineno = 0;
n 118     NUITKA_MAY_BE_UNUSED nuitka_void tmp_unused; n
119     static struct Nuitka_FrameObject *cache_frame_5f2c551540201fee6549921d079e59f7 = NULL; 112     static struct Nuitka_FrameObject *cache_frame_5f2c551540201fee6549921d079e59f7 = NULL;
120     PyObject *tmp_return_value = NULL; 113     PyObject *tmp_return_value = NULL;
121     PyObject *exception_keeper_type_1; 114     PyObject *exception_keeper_type_1;
122     PyObject *exception_keeper_value_1; 115     PyObject *exception_keeper_value_1;
123     PyTracebackObject *exception_keeper_tb_1; 116     PyTracebackObject *exception_keeper_tb_1;
171             goto frame_exception_exit_1; 164             goto frame_exception_exit_1;
172         } 165         }
173         assert(var_args == NULL); 166         assert(var_args == NULL);
174         Py_INCREF(tmp_assign_source_1); 167         Py_INCREF(tmp_assign_source_1);
175         var_args = tmp_assign_source_1; 168         var_args = tmp_assign_source_1;
n 176     } n
177     {
178         PyObject *tmp_dircall_arg1_1;
179         PyObject *tmp_dircall_arg2_1;
180         PyObject *tmp_dircall_arg3_1;
181         PyObject *tmp_call_result_1;
182         CHECK_OBJECT(par_python_f);
183         tmp_dircall_arg1_1 = par_python_f;
184         tmp_dircall_arg2_1 = mod_consts[1];
185         CHECK_OBJECT(var_args);
186         tmp_dircall_arg3_1 = var_args;
187         Py_INCREF(tmp_dircall_arg1_1);
188         Py_INCREF(tmp_dircall_arg2_1);
189         Py_INCREF(tmp_dircall_arg3_1);
190  
191         {
192             PyObject *dir_call_args[] = {tmp_dircall_arg1_1, tmp_dircall_arg2_1, tmp_dircall_arg3_1};
193             tmp_call_result_1 = impl___main__$$$function__1_complex_call_helper_pos_star_list(dir_call_args);
194         }
195         if (tmp_call_result_1 == NULL) {
196             assert(ERROR_OCCURRED());
197  
198             FETCH_ERROR_OCCURRED(&exception_type, &exception_value, &exception_tb);
199  
200  
201             exception_lineno = 39;
202             type_description_1 = "oo";
203             goto frame_exception_exit_1;
204         }
205         Py_DECREF(tmp_call_result_1);
206     } 169     }
207 170
208 #if 0 171 #if 0
209     RESTORE_FRAME_EXCEPTION(frame_5f2c551540201fee6549921d079e59f7); 172     RESTORE_FRAME_EXCEPTION(frame_5f2c551540201fee6549921d079e59f7);
210 #endif 173 #endif
283     exception_type = NULL; 246     exception_type = NULL;
284     exception_value = NULL; 247     exception_value = NULL;
285     exception_tb = NULL; 248     exception_tb = NULL;
286     exception_lineno = 0; 249     exception_lineno = 0;
287 250
n 288     Py_XDECREF(var_args); n
289     var_args = NULL;
290     // Re-raise. 251     // Re-raise.
291     exception_type = exception_keeper_type_1; 252     exception_type = exception_keeper_type_1;
292     exception_value = exception_keeper_value_1; 253     exception_value = exception_keeper_value_1;
293     exception_tb = exception_keeper_tb_1; 254     exception_tb = exception_keeper_tb_1;
294     exception_lineno = exception_keeper_lineno_1; 255     exception_lineno = exception_keeper_lineno_1;
317    assert(had_error || !ERROR_OCCURRED()); 278    assert(had_error || !ERROR_OCCURRED());
318    return tmp_return_value; 279    return tmp_return_value;
319 } 280 }
320 281
321 282
n 322 NUITKA_LOCAL_MODULE PyObject *impl___main__$$$function__1_complex_call_helper_pos_star_list(PyObject **python_pars) { n
323 #ifndef __NUITKA_NO_ASSERT__
324     NUITKA_MAY_BE_UNUSED bool had_error = ERROR_OCCURRED();
325     assert(!had_error); // Do not enter inlined functions with error set.
326 #endif
327  
328     // Local variable declarations.
329     PyObject *par_called = python_pars[0];
330     PyObject *par_args = python_pars[1];
331     PyObject *par_star_arg_list = python_pars[2];
332     bool tmp_result;
333     PyObject *exception_type = NULL;
334     PyObject *exception_value = NULL;
335     PyTracebackObject *exception_tb = NULL;
336     NUITKA_MAY_BE_UNUSED int exception_lineno = 0;
337     PyObject *tmp_return_value = NULL;
338  
339     // Actual function body.
340     {
341         bool tmp_condition_result_1;
342         PyObject *tmp_compexpr_left_1;
343         PyObject *tmp_compexpr_right_1;
344         PyObject *tmp_type_arg_1;
345         CHECK_OBJECT(par_star_arg_list);
346         tmp_type_arg_1 = par_star_arg_list;
347         tmp_compexpr_left_1 = BUILTIN_TYPE1(tmp_type_arg_1);
348         assert(!(tmp_compexpr_left_1 == NULL));
349         tmp_compexpr_right_1 = (PyObject *)&PyTuple_Type;
350         tmp_condition_result_1 = (tmp_compexpr_left_1 != tmp_compexpr_right_1) ? true : false;
351         Py_DECREF(tmp_compexpr_left_1);
352         if (tmp_condition_result_1 != false) {
353             goto branch_yes_1;
354         } else {
355             goto branch_no_1;
356         }
357     }
358     branch_yes_1:;
359     {
360         nuitka_bool tmp_condition_result_2;
361         int tmp_or_left_truth_1;
362         nuitka_bool tmp_or_left_value_1;
363         nuitka_bool tmp_or_right_value_1;
364         PyObject *tmp_expression_value_1;
365         PyObject *tmp_expression_value_2;
366         CHECK_OBJECT(par_star_arg_list);
367         tmp_expression_value_1 = par_star_arg_list;
368         tmp_result = HAS_ATTR_BOOL(tmp_expression_value_1, mod_consts[2]);
369         tmp_or_left_value_1 = (tmp_result) ? NUITKA_BOOL_TRUE : NUITKA_BOOL_FALSE;
370         tmp_or_left_truth_1 = tmp_or_left_value_1 == NUITKA_BOOL_TRUE ? 1 : 0;
371         if (tmp_or_left_truth_1 == -1) {
372             assert(ERROR_OCCURRED());
373  
374             FETCH_ERROR_OCCURRED(&exception_type, &exception_value, &exception_tb);
375  
376  
377  
378  
379             goto function_exception_exit;
380         }
381         if (tmp_or_left_truth_1 == 1) {
382             goto or_left_1;
383         } else {
384             goto or_right_1;
385         }
386         or_right_1:;
387         CHECK_OBJECT(par_star_arg_list);
388         tmp_expression_value_2 = par_star_arg_list;
389         tmp_result = HAS_ATTR_BOOL(tmp_expression_value_2, mod_consts[3]);
390         tmp_or_right_value_1 = (tmp_result) ? NUITKA_BOOL_TRUE : NUITKA_BOOL_FALSE;
391         tmp_condition_result_2 = tmp_or_right_value_1;
392         goto or_end_1;
393         or_left_1:;
394         tmp_condition_result_2 = tmp_or_left_value_1;
395         or_end_1:;
396         if (tmp_condition_result_2 == NUITKA_BOOL_TRUE) {
397             goto branch_yes_2;
398         } else {
399             goto branch_no_2;
400         }
401     }
402     branch_yes_2:;
403     {
404         PyObject *tmp_assign_source_1;
405         PyObject *tmp_tuple_arg_1;
406         CHECK_OBJECT(par_star_arg_list);
407         tmp_tuple_arg_1 = par_star_arg_list;
408         tmp_assign_source_1 = PySequence_Tuple(tmp_tuple_arg_1);
409         if (tmp_assign_source_1 == NULL) {
410             assert(ERROR_OCCURRED());
411  
412             FETCH_ERROR_OCCURRED(&exception_type, &exception_value, &exception_tb);
413  
414  
415  
416  
417             goto function_exception_exit;
418         }
419         {
420             PyObject *old = par_star_arg_list;
421             assert(old != NULL);
422             par_star_arg_list = tmp_assign_source_1;
423             Py_DECREF(old);
424         }
425  
426     }
427     goto branch_end_2;
428     branch_no_2:;
429     {
430         PyObject *tmp_raise_type_1;
431         PyObject *tmp_make_exception_arg_1;
432         PyObject *tmp_left_value_1;
433         PyObject *tmp_right_value_1;
434         PyObject *tmp_tuple_element_1;
435         PyObject *tmp_dircall_arg1_1;
436         tmp_left_value_1 = mod_consts[4];
437         CHECK_OBJECT(par_called);
438         tmp_dircall_arg1_1 = par_called;
439         Py_INCREF(tmp_dircall_arg1_1);
440  
441         {
442             PyObject *dir_call_args[] = {tmp_dircall_arg1_1};
443             tmp_tuple_element_1 = impl___main__$$$function__2_get_callable_name_desc(dir_call_args);
444         }
445         if (tmp_tuple_element_1 == NULL) {
446             assert(ERROR_OCCURRED());
447  
448             FETCH_ERROR_OCCURRED(&exception_type, &exception_value, &exception_tb);
449  
450  
451  
452  
453             goto function_exception_exit;
454         }
455         tmp_right_value_1 = PyTuple_New(2);
456         {
457             PyObject *tmp_expression_value_3;
458             PyObject *tmp_type_arg_2;
459             PyTuple_SET_ITEM(tmp_right_value_1, 0, tmp_tuple_element_1);
460             CHECK_OBJECT(par_star_arg_list);
461             tmp_type_arg_2 = par_star_arg_list;
462             tmp_expression_value_3 = BUILTIN_TYPE1(tmp_type_arg_2);
463             assert(!(tmp_expression_value_3 == NULL));
464             tmp_tuple_element_1 = LOOKUP_ATTRIBUTE(tmp_expression_value_3, mod_consts[5]);
465             Py_DECREF(tmp_expression_value_3);
466             if (tmp_tuple_element_1 == NULL) {
467                 assert(ERROR_OCCURRED());
468  
469                 FETCH_ERROR_OCCURRED(&exception_type, &exception_value, &exception_tb);
470  
471  
472  
473  
474                 goto tuple_build_exception_1;
475             }
476             PyTuple_SET_ITEM(tmp_right_value_1, 1, tmp_tuple_element_1);
477         }
478         goto tuple_build_noexception_1;
479         // Exception handling pass through code for tuple_build:
480         tuple_build_exception_1:;
481         Py_DECREF(tmp_right_value_1);
482         goto function_exception_exit;
483         // Finished with no exception for tuple_build:
484         tuple_build_noexception_1:;
485         tmp_make_exception_arg_1 = BINARY_OPERATION_MOD_OBJECT_UNICODE_TUPLE(tmp_left_value_1, tmp_right_value_1);
486         Py_DECREF(tmp_right_value_1);
487         if (tmp_make_exception_arg_1 == NULL) {
488             assert(ERROR_OCCURRED());
489  
490             FETCH_ERROR_OCCURRED(&exception_type, &exception_value, &exception_tb);
491  
492  
493  
494  
495             goto function_exception_exit;
496         }
497         tmp_raise_type_1 = CALL_FUNCTION_WITH_SINGLE_ARG(PyExc_TypeError, tmp_make_exception_arg_1);
498         Py_DECREF(tmp_make_exception_arg_1);
499         assert(!(tmp_raise_type_1 == NULL));
500         exception_type = tmp_raise_type_1;
501         RAISE_EXCEPTION_WITH_TYPE(&exception_type, &exception_value, &exception_tb);
502  
503         goto function_exception_exit;
504     }
505     branch_end_2:;
506     branch_no_1:;
507     {
508         PyObject *tmp_called_value_1;
509         PyObject *tmp_args_value_1;
510         PyObject *tmp_left_value_2;
511         PyObject *tmp_right_value_2;
512         CHECK_OBJECT(par_called);
513         tmp_called_value_1 = par_called;
514         CHECK_OBJECT(par_args);
515         tmp_left_value_2 = par_args;
516         if (par_star_arg_list == NULL) {
517  
518             FORMAT_UNBOUND_LOCAL_ERROR(&exception_type, &exception_value, mod_consts[6]);
519             exception_tb = NULL;
520             NORMALIZE_EXCEPTION(&exception_type, &exception_value, &exception_tb);
521             CHAIN_EXCEPTION(exception_value);
522  
523  
524  
525             goto function_exception_exit;
526         }
527  
528         tmp_right_value_2 = par_star_arg_list;
529         tmp_args_value_1 = BINARY_OPERATION_ADD_OBJECT_OBJECT_OBJECT(tmp_left_value_2, tmp_right_value_2);
530         if (tmp_args_value_1 == NULL) {
531             assert(ERROR_OCCURRED());
532  
533             FETCH_ERROR_OCCURRED(&exception_type, &exception_value, &exception_tb);
534  
535  
536  
537  
538             goto function_exception_exit;
539         }
540         tmp_return_value = CALL_FUNCTION_WITH_POSARGS(tmp_called_value_1, tmp_args_value_1);
541         Py_DECREF(tmp_args_value_1);
542         if (tmp_return_value == NULL) {
543             assert(ERROR_OCCURRED());
544  
545             FETCH_ERROR_OCCURRED(&exception_type, &exception_value, &exception_tb);
546  
547  
548  
549  
550             goto function_exception_exit;
551         }
552         goto function_return_exit;
553     }
554  
555     NUITKA_CANNOT_GET_HERE("Return statement must have exited already.");
556     return NULL;
557  
558 function_exception_exit:
559     CHECK_OBJECT(par_called);
560     Py_DECREF(par_called);
561     CHECK_OBJECT(par_args);
562     Py_DECREF(par_args);
563     CHECK_OBJECT(par_star_arg_list);
564     Py_DECREF(par_star_arg_list);    assert(exception_type);
565     RESTORE_ERROR_OCCURRED(exception_type, exception_value, exception_tb);
566  
567     return NULL;
568  
569 function_return_exit:
570    // Function cleanup code if any.
571     CHECK_OBJECT(par_called);
572     Py_DECREF(par_called);
573     CHECK_OBJECT(par_args);
574     Py_DECREF(par_args);
575     CHECK_OBJECT(par_star_arg_list);
576     Py_DECREF(par_star_arg_list);
577  
578    // Actual function exit with return value, making sure we did not make
579    // the error status worse despite non-NULL return.
580    CHECK_OBJECT(tmp_return_value);
581    assert(had_error || !ERROR_OCCURRED());
582    return tmp_return_value;
583 }
584  
585  
586 NUITKA_LOCAL_MODULE PyObject *impl___main__$$$function__2_get_callable_name_desc(PyObject **python_pars) {
587 #ifndef __NUITKA_NO_ASSERT__
588     NUITKA_MAY_BE_UNUSED bool had_error = ERROR_OCCURRED();
589     assert(!had_error); // Do not enter inlined functions with error set.
590 #endif
591  
592     // Local variable declarations.
593     PyObject *par_called = python_pars[0];
594     int tmp_res;
595     PyObject *exception_type = NULL;
596     PyObject *exception_value = NULL;
597     PyTracebackObject *exception_tb = NULL;
598     NUITKA_MAY_BE_UNUSED int exception_lineno = 0;
599     PyObject *tmp_return_value = NULL;
600  
601     // Actual function body.
602     {
603         nuitka_bool tmp_condition_result_1;
604         PyObject *tmp_isinstance_inst_1;
605         PyObject *tmp_isinstance_cls_1;
606         CHECK_OBJECT(par_called);
607         tmp_isinstance_inst_1 = par_called;
608         tmp_isinstance_cls_1 = mod_consts[7];
609         tmp_res = Nuitka_IsInstance(tmp_isinstance_inst_1, tmp_isinstance_cls_1);
610         if (tmp_res == -1) {
611             assert(ERROR_OCCURRED());
612  
613             FETCH_ERROR_OCCURRED(&exception_type, &exception_value, &exception_tb);
614  
615  
616  
617  
618             goto function_exception_exit;
619         }
620         tmp_condition_result_1 = (tmp_res != 0) ? NUITKA_BOOL_TRUE : NUITKA_BOOL_FALSE;
621         if (tmp_condition_result_1 == NUITKA_BOOL_TRUE) {
622             goto branch_yes_1;
623         } else {
624             goto branch_no_1;
625         }
626     }
627     branch_yes_1:;
628     {
629         PyObject *tmp_left_value_1;
630         PyObject *tmp_expression_value_1;
631         PyObject *tmp_right_value_1;
632         CHECK_OBJECT(par_called);
633         tmp_expression_value_1 = par_called;
634         tmp_left_value_1 = LOOKUP_ATTRIBUTE(tmp_expression_value_1, mod_consts[5]);
635         if (tmp_left_value_1 == NULL) {
636             assert(ERROR_OCCURRED());
637  
638             FETCH_ERROR_OCCURRED(&exception_type, &exception_value, &exception_tb);
639  
640  
641  
642  
643             goto function_exception_exit;
644         }
645         tmp_right_value_1 = mod_consts[8];
646         tmp_return_value = BINARY_OPERATION_ADD_OBJECT_OBJECT_UNICODE(tmp_left_value_1, tmp_right_value_1);
647         Py_DECREF(tmp_left_value_1);
648         if (tmp_return_value == NULL) {
649             assert(ERROR_OCCURRED());
650  
651             FETCH_ERROR_OCCURRED(&exception_type, &exception_value, &exception_tb);
652  
653  
654  
655  
656             goto function_exception_exit;
657         }
658         goto function_return_exit;
659     }
660     goto branch_end_1;
661     branch_no_1:;
662     {
663         PyObject *tmp_left_value_2;
664         PyObject *tmp_expression_value_2;
665         PyObject *tmp_type_arg_1;
666         PyObject *tmp_right_value_2;
667         CHECK_OBJECT(par_called);
668         tmp_type_arg_1 = par_called;
669         tmp_expression_value_2 = BUILTIN_TYPE1(tmp_type_arg_1);
670         assert(!(tmp_expression_value_2 == NULL));
671         tmp_left_value_2 = LOOKUP_ATTRIBUTE(tmp_expression_value_2, mod_consts[5]);
672         Py_DECREF(tmp_expression_value_2);
673         if (tmp_left_value_2 == NULL) {
674             assert(ERROR_OCCURRED());
675  
676             FETCH_ERROR_OCCURRED(&exception_type, &exception_value, &exception_tb);
677  
678  
679  
680  
681             goto function_exception_exit;
682         }
683         tmp_right_value_2 = mod_consts[9];
684         tmp_return_value = BINARY_OPERATION_ADD_OBJECT_OBJECT_UNICODE(tmp_left_value_2, tmp_right_value_2);
685         Py_DECREF(tmp_left_value_2);
686         if (tmp_return_value == NULL) {
687             assert(ERROR_OCCURRED());
688  
689             FETCH_ERROR_OCCURRED(&exception_type, &exception_value, &exception_tb);
690  
691  
692  
693  
694             goto function_exception_exit;
695         }
696         goto function_return_exit;
697     }
698     branch_end_1:;
699  
700     NUITKA_CANNOT_GET_HERE("Return statement must have exited already.");
701     return NULL;
702  
703 function_exception_exit:
704     CHECK_OBJECT(par_called);
705     Py_DECREF(par_called);    assert(exception_type);
706     RESTORE_ERROR_OCCURRED(exception_type, exception_value, exception_tb);
707  
708     return NULL;
709  
710 function_return_exit:
711    // Function cleanup code if any.
712     CHECK_OBJECT(par_called);
713     Py_DECREF(par_called);
714  
715    // Actual function exit with return value, making sure we did not make
716    // the error status worse despite non-NULL return.
717    CHECK_OBJECT(tmp_return_value);
718    assert(had_error || !ERROR_OCCURRED());
719    return tmp_return_value;
720 }
721  
722  
723 283
724 static PyObject *MAKE_FUNCTION___main__$$$function__1_calledRepeatedly() { 284 static PyObject *MAKE_FUNCTION___main__$$$function__1_calledRepeatedly() {
725     struct Nuitka_FunctionObject *result = Nuitka_Function_New( 285     struct Nuitka_FunctionObject *result = Nuitka_Function_New(
726         impl___main__$$$function__1_calledRepeatedly, 286         impl___main__$$$function__1_calledRepeatedly,
n 727         mod_consts[20], n 287         mod_consts[11],
728 #if PYTHON_VERSION >= 0x300 288 #if PYTHON_VERSION >= 0x300
729         NULL, 289         NULL,
730 #endif 290 #endif
731         codeobj_5f2c551540201fee6549921d079e59f7, 291         codeobj_5f2c551540201fee6549921d079e59f7,
732         NULL, 292         NULL,
1113 673
1114     // Module code. 674     // Module code.
1115     { 675     {
1116         PyObject *tmp_assign_source_1; 676         PyObject *tmp_assign_source_1;
1117         tmp_assign_source_1 = Py_None; 677         tmp_assign_source_1 = Py_None;
n 1118         UPDATE_STRING_DICT0(moduledict___main__, (Nuitka_StringObject *)mod_consts[10], tmp_assign_source_1); n 678         UPDATE_STRING_DICT0(moduledict___main__, (Nuitka_StringObject *)mod_consts[1], tmp_assign_source_1);
1119     } 679     }
1120     { 680     {
1121         PyObject *tmp_assign_source_2; 681         PyObject *tmp_assign_source_2;
n 1122         tmp_assign_source_2 = mod_consts[11]; n 682         tmp_assign_source_2 = mod_consts[2];
1123         UPDATE_STRING_DICT0(moduledict___main__, (Nuitka_StringObject *)mod_consts[12], tmp_assign_source_2); 683         UPDATE_STRING_DICT0(moduledict___main__, (Nuitka_StringObject *)mod_consts[3], tmp_assign_source_2);
1124     } 684     }
1125     { 685     {
1126         PyObject *tmp_assign_source_3; 686         PyObject *tmp_assign_source_3;
1127         tmp_assign_source_3 = Py_None; 687         tmp_assign_source_3 = Py_None;
n 1128         UPDATE_STRING_DICT0(moduledict___main__, (Nuitka_StringObject *)mod_consts[13], tmp_assign_source_3); n 688         UPDATE_STRING_DICT0(moduledict___main__, (Nuitka_StringObject *)mod_consts[4], tmp_assign_source_3);
1129     } 689     }
1130     { 690     {
1131         PyObject *tmp_assign_source_4; 691         PyObject *tmp_assign_source_4;
1132         tmp_assign_source_4 = PyDict_New(); 692         tmp_assign_source_4 = PyDict_New();
n 1133         UPDATE_STRING_DICT1(moduledict___main__, (Nuitka_StringObject *)mod_consts[14], tmp_assign_source_4); n 693         UPDATE_STRING_DICT1(moduledict___main__, (Nuitka_StringObject *)mod_consts[5], tmp_assign_source_4);
1134     } 694     }
1135     { 695     {
1136         PyObject *tmp_assign_source_5; 696         PyObject *tmp_assign_source_5;
1137         { 697         {
1138             PyObject *hard_module = IMPORT_HARD___FUTURE__(); 698             PyObject *hard_module = IMPORT_HARD___FUTURE__();
n 1139             tmp_assign_source_5 = LOOKUP_ATTRIBUTE(hard_module, mod_consts[15]); n 699             tmp_assign_source_5 = LOOKUP_ATTRIBUTE(hard_module, mod_consts[6]);
1140         } 700         }
1141 701
1142         assert(!(tmp_assign_source_5 == NULL)); 702         assert(!(tmp_assign_source_5 == NULL));
n 1143         UPDATE_STRING_DICT0(moduledict___main__, (Nuitka_StringObject *)mod_consts[15], tmp_assign_source_5); n 703         UPDATE_STRING_DICT0(moduledict___main__, (Nuitka_StringObject *)mod_consts[6], tmp_assign_source_5);
1144     } 704     }
1145     // Frame without reuse. 705     // Frame without reuse.
1146     frame_61867addcd2570b53514f06044a0fa73 = MAKE_MODULE_FRAME(codeobj_61867addcd2570b53514f06044a0fa73, module___main__); 706     frame_61867addcd2570b53514f06044a0fa73 = MAKE_MODULE_FRAME(codeobj_61867addcd2570b53514f06044a0fa73, module___main__);
1147 707
1148     // Push the new frame as the currently active one, and we should be exclusively 708     // Push the new frame as the currently active one, and we should be exclusively
1245         { 805         {
1246             PyObject *tmp_eval_source_1; 806             PyObject *tmp_eval_source_1;
1247             PyObject *tmp_eval_globals_1; 807             PyObject *tmp_eval_globals_1;
1248             PyObject *tmp_eval_locals_1; 808             PyObject *tmp_eval_locals_1;
1249             PyObject *tmp_eval_compiled_1; 809             PyObject *tmp_eval_compiled_1;
n 1250             tmp_eval_source_1 = mod_consts[16]; n 810             tmp_eval_source_1 = mod_consts[7];
1251             CHECK_OBJECT(tmp_exec_call_1__globals); 811             CHECK_OBJECT(tmp_exec_call_1__globals);
1252             tmp_eval_globals_1 = tmp_exec_call_1__globals; 812             tmp_eval_globals_1 = tmp_exec_call_1__globals;
1253             CHECK_OBJECT(tmp_exec_call_1__locals); 813             CHECK_OBJECT(tmp_exec_call_1__locals);
1254             tmp_eval_locals_1 = tmp_exec_call_1__locals; 814             tmp_eval_locals_1 = tmp_exec_call_1__locals;
n 1255             tmp_eval_compiled_1 = COMPILE_CODE(tmp_eval_source_1, mod_consts[17], mod_consts[18], NULL, NULL, NULL); n 815             tmp_eval_compiled_1 = COMPILE_CODE(tmp_eval_source_1, mod_consts[8], mod_consts[9], NULL, NULL, NULL);
1256             if (tmp_eval_compiled_1 == NULL) { 816             if (tmp_eval_compiled_1 == NULL) {
1257                 assert(ERROR_OCCURRED()); 817                 assert(ERROR_OCCURRED());
1258 818
1259                 FETCH_ERROR_OCCURRED(&exception_type, &exception_value, &exception_tb); 819                 FETCH_ERROR_OCCURRED(&exception_type, &exception_value, &exception_tb);
1260 820
1318         outline_result_1:; 878         outline_result_1:;
1319         Py_DECREF(tmp_outline_return_value_1); 879         Py_DECREF(tmp_outline_return_value_1);
1320     } 880     }
1321     { 881     {
1322         PyObject *tmp_assign_source_10; 882         PyObject *tmp_assign_source_10;
n 1323         tmp_assign_source_10 = mod_consts[19]; n 883         tmp_assign_source_10 = mod_consts[10];
1324         UPDATE_STRING_DICT0(moduledict___main__, (Nuitka_StringObject *)mod_consts[0], tmp_assign_source_10); 884         UPDATE_STRING_DICT0(moduledict___main__, (Nuitka_StringObject *)mod_consts[0], tmp_assign_source_10);
1325     } 885     }
1326     { 886     {
1327         PyObject *tmp_assign_source_11; 887         PyObject *tmp_assign_source_11;
1328 888
1329 889
1330         tmp_assign_source_11 = MAKE_FUNCTION___main__$$$function__1_calledRepeatedly(); 890         tmp_assign_source_11 = MAKE_FUNCTION___main__$$$function__1_calledRepeatedly();
1331 891
n 1332         UPDATE_STRING_DICT1(moduledict___main__, (Nuitka_StringObject *)mod_consts[20], tmp_assign_source_11); n 892         UPDATE_STRING_DICT1(moduledict___main__, (Nuitka_StringObject *)mod_consts[11], tmp_assign_source_11);
1333     } 893     }
1334     { 894     {
1335         PyObject *tmp_assign_source_12; 895         PyObject *tmp_assign_source_12;
1336         PyObject *tmp_name_value_1; 896         PyObject *tmp_name_value_1;
1337         PyObject *tmp_globals_arg_value_1; 897         PyObject *tmp_globals_arg_value_1;
1338         PyObject *tmp_locals_arg_value_1; 898         PyObject *tmp_locals_arg_value_1;
1339         PyObject *tmp_fromlist_value_1; 899         PyObject *tmp_fromlist_value_1;
1340         PyObject *tmp_level_value_1; 900         PyObject *tmp_level_value_1;
n 1341         tmp_name_value_1 = mod_consts[21]; n 901         tmp_name_value_1 = mod_consts[12];
1342         tmp_globals_arg_value_1 = (PyObject *)moduledict___main__; 902         tmp_globals_arg_value_1 = (PyObject *)moduledict___main__;
1343         tmp_locals_arg_value_1 = Py_None; 903         tmp_locals_arg_value_1 = Py_None;
1344         tmp_fromlist_value_1 = Py_None; 904         tmp_fromlist_value_1 = Py_None;
n 1345         tmp_level_value_1 = mod_consts[22]; n 905         tmp_level_value_1 = mod_consts[13];
1346         frame_61867addcd2570b53514f06044a0fa73->m_frame.f_lineno = 46; 906         frame_61867addcd2570b53514f06044a0fa73->m_frame.f_lineno = 46;
1347         tmp_assign_source_12 = IMPORT_MODULE5(tmp_name_value_1, tmp_globals_arg_value_1, tmp_locals_arg_value_1, tmp_fromlist_value_1, tmp_level_value_1); 907         tmp_assign_source_12 = IMPORT_MODULE5(tmp_name_value_1, tmp_globals_arg_value_1, tmp_locals_arg_value_1, tmp_fromlist_value_1, tmp_level_value_1);
1348         assert(!(tmp_assign_source_12 == NULL)); 908         assert(!(tmp_assign_source_12 == NULL));
n 1349         UPDATE_STRING_DICT1(moduledict___main__, (Nuitka_StringObject *)mod_consts[21], tmp_assign_source_12); n 909         UPDATE_STRING_DICT1(moduledict___main__, (Nuitka_StringObject *)mod_consts[12], tmp_assign_source_12);
1350     } 910     }
1351     { 911     {
1352         PyObject *tmp_assign_source_13; 912         PyObject *tmp_assign_source_13;
1353         PyObject *tmp_iter_arg_1; 913         PyObject *tmp_iter_arg_1;
1354         PyObject *tmp_called_instance_1; 914         PyObject *tmp_called_instance_1;
n 1355         tmp_called_instance_1 = GET_STRING_DICT_VALUE(moduledict___main__, (Nuitka_StringObject *)mod_consts[21]); n 915         tmp_called_instance_1 = GET_STRING_DICT_VALUE(moduledict___main__, (Nuitka_StringObject *)mod_consts[12]);
1356 916
1357         if (unlikely(tmp_called_instance_1 == NULL)) { 917         if (unlikely(tmp_called_instance_1 == NULL)) {
n 1358             tmp_called_instance_1 = GET_MODULE_VARIABLE_VALUE_FALLBACK(mod_consts[21]); n 918             tmp_called_instance_1 = GET_MODULE_VARIABLE_VALUE_FALLBACK(mod_consts[12]);
1359         } 919         }
1360 920
1361         assert(!(tmp_called_instance_1 == NULL)); 921         assert(!(tmp_called_instance_1 == NULL));
1362         frame_61867addcd2570b53514f06044a0fa73->m_frame.f_lineno = 47; 922         frame_61867addcd2570b53514f06044a0fa73->m_frame.f_lineno = 47;
1363         tmp_iter_arg_1 = CALL_METHOD_WITH_ARGS2( 923         tmp_iter_arg_1 = CALL_METHOD_WITH_ARGS2(
1364             tmp_called_instance_1, 924             tmp_called_instance_1,
n 1365             mod_consts[23], n 925             mod_consts[14],
1366             &PyTuple_GET_ITEM(mod_consts[24], 0) 926             &PyTuple_GET_ITEM(mod_consts[15], 0)
1367         ); 927         );
1368 928
1369         if (tmp_iter_arg_1 == NULL) { 929         if (tmp_iter_arg_1 == NULL) {
1370             assert(ERROR_OCCURRED()); 930             assert(ERROR_OCCURRED());
1371 931
1421     } 981     }
1422     { 982     {
1423         PyObject *tmp_assign_source_15; 983         PyObject *tmp_assign_source_15;
1424         CHECK_OBJECT(tmp_for_loop_1__iter_value); 984         CHECK_OBJECT(tmp_for_loop_1__iter_value);
1425         tmp_assign_source_15 = tmp_for_loop_1__iter_value; 985         tmp_assign_source_15 = tmp_for_loop_1__iter_value;
n 1426         UPDATE_STRING_DICT0(moduledict___main__, (Nuitka_StringObject *)mod_consts[25], tmp_assign_source_15); n 986         UPDATE_STRING_DICT0(moduledict___main__, (Nuitka_StringObject *)mod_consts[16], tmp_assign_source_15);
1427     } 987     }
1428     { 988     {
1429         PyObject *tmp_called_value_1; 989         PyObject *tmp_called_value_1;
1430         PyObject *tmp_call_result_1; 990         PyObject *tmp_call_result_1;
1431         PyObject *tmp_args_element_value_1; 991         PyObject *tmp_args_element_value_1;
n 1432         tmp_called_value_1 = GET_STRING_DICT_VALUE(moduledict___main__, (Nuitka_StringObject *)mod_consts[20]); n 992         tmp_called_value_1 = GET_STRING_DICT_VALUE(moduledict___main__, (Nuitka_StringObject *)mod_consts[11]);
1433 993
1434         if (unlikely(tmp_called_value_1 == NULL)) { 994         if (unlikely(tmp_called_value_1 == NULL)) {
n 1435             tmp_called_value_1 = GET_MODULE_VARIABLE_VALUE_FALLBACK(mod_consts[20]); n 995             tmp_called_value_1 = GET_MODULE_VARIABLE_VALUE_FALLBACK(mod_consts[11]);
1436         } 996         }
1437 997
1438         if (tmp_called_value_1 == NULL) { 998         if (tmp_called_value_1 == NULL) {
1439             assert(ERROR_OCCURRED()); 999             assert(ERROR_OCCURRED());
1440 1000
1443 1003
1444             exception_lineno = 48; 1004             exception_lineno = 48;
1445 1005
1446             goto try_except_handler_2; 1006             goto try_except_handler_2;
1447         } 1007         }
n 1448         tmp_args_element_value_1 = GET_STRING_DICT_VALUE(moduledict___main__, (Nuitka_StringObject *)mod_consts[26]); n 1008         tmp_args_element_value_1 = GET_STRING_DICT_VALUE(moduledict___main__, (Nuitka_StringObject *)mod_consts[17]);
1449 1009
1450         if (unlikely(tmp_args_element_value_1 == NULL)) { 1010         if (unlikely(tmp_args_element_value_1 == NULL)) {
n 1451             tmp_args_element_value_1 = GET_MODULE_VARIABLE_VALUE_FALLBACK(mod_consts[26]); n 1011             tmp_args_element_value_1 = GET_MODULE_VARIABLE_VALUE_FALLBACK(mod_consts[17]);
1452         } 1012         }
1453 1013
1454         if (tmp_args_element_value_1 == NULL) { 1014         if (tmp_args_element_value_1 == NULL) {
1455             assert(ERROR_OCCURRED()); 1015             assert(ERROR_OCCURRED());
1456 1016
1519     Py_DECREF(tmp_for_loop_1__for_iterator); 1079     Py_DECREF(tmp_for_loop_1__for_iterator);
1520     tmp_for_loop_1__for_iterator = NULL; 1080     tmp_for_loop_1__for_iterator = NULL;
1521     { 1081     {
1522         PyObject *tmp_called_value_2; 1082         PyObject *tmp_called_value_2;
1523         PyObject *tmp_call_result_2; 1083         PyObject *tmp_call_result_2;
n 1524         tmp_called_value_2 = LOOKUP_BUILTIN(mod_consts[27]); n 1084         tmp_called_value_2 = LOOKUP_BUILTIN(mod_consts[18]);
1525         assert(tmp_called_value_2 != NULL); 1085         assert(tmp_called_value_2 != NULL);
1526         frame_61867addcd2570b53514f06044a0fa73->m_frame.f_lineno = 50; 1086         frame_61867addcd2570b53514f06044a0fa73->m_frame.f_lineno = 50;
t 1527         tmp_call_result_2 = CALL_FUNCTION_WITH_POSARGS1(tmp_called_value_2, mod_consts[28]); t 1087         tmp_call_result_2 = CALL_FUNCTION_WITH_POSARGS1(tmp_called_value_2, mod_consts[19]);
1528 1088
1529         if (tmp_call_result_2 == NULL) { 1089         if (tmp_call_result_2 == NULL) {
1530             assert(ERROR_OCCURRED()); 1090             assert(ERROR_OCCURRED());
1531 1091
1532             FETCH_ERROR_OCCURRED(&exception_type, &exception_value, &exception_tb); 1092             FETCH_ERROR_OCCURRED(&exception_type, &exception_value, &exception_tb);