Construct CallUncompiledFunctionComplexArgs

Performance Diagrams

Construct CallUncompiledFunctionComplexArgs 001000000010000000200000002000000030000000300000004000000040000000CPython 2.7Nuitka (master)Nuitka (develop)Nuitka (factory)4714012088.95192307692307257.0CPython 2.742362573242.31730769230768282.0445981983728Nuitka (master)39917066395.6826923076923294.8643025793675Nuitka (develop)39917066549.0480769230769294.8643025793675Nuitka (factory)Construct CallUncompiledFunctionComplexArgsTicks Construct CallUncompiledFunctionComplexArgs 001000000010000000200000002000000030000000300000004000000040000000500000005000000060000000600000007000000070000000CPython 3.8Nuitka (master)Nuitka (develop)Nuitka (factory)7845599088.95192307692307257.0CPython 3.840467924242.31730769230768376.6522475898222Nuitka (master)40471892395.6826923076923376.6397494511058Nuitka (develop)40474280549.0480769230769376.6322278898017Nuitka (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_3defe1b74c8059117316f14b4c0849b9; 82 static PyCodeObject *codeobj_3defe1b74c8059117316f14b4c0849b9;
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_d886bb972203ff86f66d3015ddef6b38 = MAKE_CODEOBJECT(module_filename_obj, 1, CO_NOFREE, mod_consts[29], NULL, NULL, 0, 0, 0); 88     codeobj_d886bb972203ff86f66d3015ddef6b38 = MAKE_CODEOBJECT(module_filename_obj, 1, CO_NOFREE, mod_consts[20], NULL, NULL, 0, 0, 0);
89     codeobj_3defe1b74c8059117316f14b4c0849b9 = MAKE_CODEOBJECT(module_filename_obj, 31, CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE, mod_consts[20], mod_consts[30], NULL, 1, 0, 0); 89     codeobj_3defe1b74c8059117316f14b4c0849b9 = 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_3defe1b74c8059117316f14b4c0849b9 = NULL; 112     static struct Nuitka_FrameObject *cache_frame_3defe1b74c8059117316f14b4c0849b9 = 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_3defe1b74c8059117316f14b4c0849b9); 172     RESTORE_FRAME_EXCEPTION(frame_3defe1b74c8059117316f14b4c0849b9);
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_name_1;
365         PyObject *tmp_expression_name_2;
366         CHECK_OBJECT(par_star_arg_list);
367         tmp_expression_name_1 = par_star_arg_list;
368         tmp_result = HAS_ATTR_BOOL(tmp_expression_name_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_name_2 = par_star_arg_list;
389         tmp_result = HAS_ATTR_BOOL(tmp_expression_name_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_name_1;
433         PyObject *tmp_right_name_1;
434         PyObject *tmp_tuple_element_1;
435         PyObject *tmp_dircall_arg1_1;
436         tmp_left_name_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_name_1 = PyTuple_New(2);
456         {
457             PyObject *tmp_expression_name_3;
458             PyObject *tmp_type_arg_2;
459             PyTuple_SET_ITEM(tmp_right_name_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_name_3 = BUILTIN_TYPE1(tmp_type_arg_2);
463             assert(!(tmp_expression_name_3 == NULL));
464             tmp_tuple_element_1 = LOOKUP_ATTRIBUTE(tmp_expression_name_3, mod_consts[5]);
465             Py_DECREF(tmp_expression_name_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_name_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_name_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_name_1, tmp_right_name_1);
486         Py_DECREF(tmp_right_name_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_name_1;
509         PyObject *tmp_args_name_1;
510         PyObject *tmp_left_name_2;
511         PyObject *tmp_right_name_2;
512         CHECK_OBJECT(par_called);
513         tmp_called_name_1 = par_called;
514         CHECK_OBJECT(par_args);
515         tmp_left_name_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_name_2 = par_star_arg_list;
529         tmp_args_name_1 = BINARY_OPERATION_ADD_OBJECT_OBJECT_OBJECT(tmp_left_name_2, tmp_right_name_2);
530         if (tmp_args_name_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_name_1, tmp_args_name_1);
541         Py_DECREF(tmp_args_name_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_name_1;
630         PyObject *tmp_expression_name_1;
631         PyObject *tmp_right_name_1;
632         CHECK_OBJECT(par_called);
633         tmp_expression_name_1 = par_called;
634         tmp_left_name_1 = LOOKUP_ATTRIBUTE(tmp_expression_name_1, mod_consts[5]);
635         if (tmp_left_name_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_name_1 = mod_consts[8];
646         tmp_return_value = BINARY_OPERATION_ADD_OBJECT_OBJECT_UNICODE(tmp_left_name_1, tmp_right_name_1);
647         Py_DECREF(tmp_left_name_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_name_2;
664         PyObject *tmp_expression_name_2;
665         PyObject *tmp_type_arg_1;
666         PyObject *tmp_right_name_2;
667         CHECK_OBJECT(par_called);
668         tmp_type_arg_1 = par_called;
669         tmp_expression_name_2 = BUILTIN_TYPE1(tmp_type_arg_1);
670         assert(!(tmp_expression_name_2 == NULL));
671         tmp_left_name_2 = LOOKUP_ATTRIBUTE(tmp_expression_name_2, mod_consts[5]);
672         Py_DECREF(tmp_expression_name_2);
673         if (tmp_left_name_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_name_2 = mod_consts[9];
684         tmp_return_value = BINARY_OPERATION_ADD_OBJECT_OBJECT_UNICODE(tmp_left_name_2, tmp_right_name_2);
685         Py_DECREF(tmp_left_name_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_3defe1b74c8059117316f14b4c0849b9, 291         codeobj_3defe1b74c8059117316f14b4c0849b9,
732         NULL, 292         NULL,
1108 668
1109     // Module code. 669     // Module code.
1110     { 670     {
1111         PyObject *tmp_assign_source_1; 671         PyObject *tmp_assign_source_1;
1112         tmp_assign_source_1 = Py_None; 672         tmp_assign_source_1 = Py_None;
n 1113         UPDATE_STRING_DICT0(moduledict___main__, (Nuitka_StringObject *)mod_consts[10], tmp_assign_source_1); n 673         UPDATE_STRING_DICT0(moduledict___main__, (Nuitka_StringObject *)mod_consts[1], tmp_assign_source_1);
1114     } 674     }
1115     { 675     {
1116         PyObject *tmp_assign_source_2; 676         PyObject *tmp_assign_source_2;
n 1117         tmp_assign_source_2 = mod_consts[11]; n 677         tmp_assign_source_2 = mod_consts[2];
1118         UPDATE_STRING_DICT0(moduledict___main__, (Nuitka_StringObject *)mod_consts[12], tmp_assign_source_2); 678         UPDATE_STRING_DICT0(moduledict___main__, (Nuitka_StringObject *)mod_consts[3], tmp_assign_source_2);
1119     } 679     }
1120     { 680     {
1121         PyObject *tmp_assign_source_3; 681         PyObject *tmp_assign_source_3;
1122         tmp_assign_source_3 = Py_None; 682         tmp_assign_source_3 = Py_None;
n 1123         UPDATE_STRING_DICT0(moduledict___main__, (Nuitka_StringObject *)mod_consts[13], tmp_assign_source_3); n 683         UPDATE_STRING_DICT0(moduledict___main__, (Nuitka_StringObject *)mod_consts[4], tmp_assign_source_3);
1124     } 684     }
1125     { 685     {
1126         PyObject *tmp_assign_source_4; 686         PyObject *tmp_assign_source_4;
1127         tmp_assign_source_4 = PyDict_New(); 687         tmp_assign_source_4 = PyDict_New();
n 1128         UPDATE_STRING_DICT1(moduledict___main__, (Nuitka_StringObject *)mod_consts[14], tmp_assign_source_4); n 688         UPDATE_STRING_DICT1(moduledict___main__, (Nuitka_StringObject *)mod_consts[5], tmp_assign_source_4);
1129     } 689     }
1130     { 690     {
1131         PyObject *tmp_assign_source_5; 691         PyObject *tmp_assign_source_5;
1132         { 692         {
1133             PyObject *hard_module = IMPORT_HARD___FUTURE__(); 693             PyObject *hard_module = IMPORT_HARD___FUTURE__();
n 1134             tmp_assign_source_5 = LOOKUP_ATTRIBUTE(hard_module, mod_consts[15]); n 694             tmp_assign_source_5 = LOOKUP_ATTRIBUTE(hard_module, mod_consts[6]);
1135         } 695         }
1136 696
1137         assert(!(tmp_assign_source_5 == NULL)); 697         assert(!(tmp_assign_source_5 == NULL));
n 1138         UPDATE_STRING_DICT0(moduledict___main__, (Nuitka_StringObject *)mod_consts[15], tmp_assign_source_5); n 698         UPDATE_STRING_DICT0(moduledict___main__, (Nuitka_StringObject *)mod_consts[6], tmp_assign_source_5);
1139     } 699     }
1140     // Frame without reuse. 700     // Frame without reuse.
1141     frame_d886bb972203ff86f66d3015ddef6b38 = MAKE_MODULE_FRAME(codeobj_d886bb972203ff86f66d3015ddef6b38, module___main__); 701     frame_d886bb972203ff86f66d3015ddef6b38 = MAKE_MODULE_FRAME(codeobj_d886bb972203ff86f66d3015ddef6b38, module___main__);
1142 702
1143     // Push the new frame as the currently active one, and we should be exclusively 703     // Push the new frame as the currently active one, and we should be exclusively
1240         { 800         {
1241             PyObject *tmp_eval_source_1; 801             PyObject *tmp_eval_source_1;
1242             PyObject *tmp_eval_globals_1; 802             PyObject *tmp_eval_globals_1;
1243             PyObject *tmp_eval_locals_1; 803             PyObject *tmp_eval_locals_1;
1244             PyObject *tmp_eval_compiled_1; 804             PyObject *tmp_eval_compiled_1;
n 1245             tmp_eval_source_1 = mod_consts[16]; n 805             tmp_eval_source_1 = mod_consts[7];
1246             CHECK_OBJECT(tmp_exec_call_1__globals); 806             CHECK_OBJECT(tmp_exec_call_1__globals);
1247             tmp_eval_globals_1 = tmp_exec_call_1__globals; 807             tmp_eval_globals_1 = tmp_exec_call_1__globals;
1248             CHECK_OBJECT(tmp_exec_call_1__locals); 808             CHECK_OBJECT(tmp_exec_call_1__locals);
1249             tmp_eval_locals_1 = tmp_exec_call_1__locals; 809             tmp_eval_locals_1 = tmp_exec_call_1__locals;
n 1250             tmp_eval_compiled_1 = COMPILE_CODE(tmp_eval_source_1, mod_consts[17], mod_consts[18], NULL, NULL, NULL); n 810             tmp_eval_compiled_1 = COMPILE_CODE(tmp_eval_source_1, mod_consts[8], mod_consts[9], NULL, NULL, NULL);
1251             if (tmp_eval_compiled_1 == NULL) { 811             if (tmp_eval_compiled_1 == NULL) {
1252                 assert(ERROR_OCCURRED()); 812                 assert(ERROR_OCCURRED());
1253 813
1254                 FETCH_ERROR_OCCURRED(&exception_type, &exception_value, &exception_tb); 814                 FETCH_ERROR_OCCURRED(&exception_type, &exception_value, &exception_tb);
1255 815
1313         outline_result_1:; 873         outline_result_1:;
1314         Py_DECREF(tmp_outline_return_value_1); 874         Py_DECREF(tmp_outline_return_value_1);
1315     } 875     }
1316     { 876     {
1317         PyObject *tmp_assign_source_10; 877         PyObject *tmp_assign_source_10;
n 1318         tmp_assign_source_10 = mod_consts[19]; n 878         tmp_assign_source_10 = mod_consts[10];
1319         UPDATE_STRING_DICT0(moduledict___main__, (Nuitka_StringObject *)mod_consts[0], tmp_assign_source_10); 879         UPDATE_STRING_DICT0(moduledict___main__, (Nuitka_StringObject *)mod_consts[0], tmp_assign_source_10);
1320     } 880     }
1321     { 881     {
1322         PyObject *tmp_assign_source_11; 882         PyObject *tmp_assign_source_11;
1323 883
1324 884
1325         tmp_assign_source_11 = MAKE_FUNCTION___main__$$$function__1_calledRepeatedly(); 885         tmp_assign_source_11 = MAKE_FUNCTION___main__$$$function__1_calledRepeatedly();
1326 886
n 1327         UPDATE_STRING_DICT1(moduledict___main__, (Nuitka_StringObject *)mod_consts[20], tmp_assign_source_11); n 887         UPDATE_STRING_DICT1(moduledict___main__, (Nuitka_StringObject *)mod_consts[11], tmp_assign_source_11);
1328     } 888     }
1329     { 889     {
1330         PyObject *tmp_assign_source_12; 890         PyObject *tmp_assign_source_12;
1331         PyObject *tmp_name_name_1; 891         PyObject *tmp_name_name_1;
1332         PyObject *tmp_globals_arg_name_1; 892         PyObject *tmp_globals_arg_name_1;
1333         PyObject *tmp_locals_arg_name_1; 893         PyObject *tmp_locals_arg_name_1;
1334         PyObject *tmp_fromlist_name_1; 894         PyObject *tmp_fromlist_name_1;
1335         PyObject *tmp_level_name_1; 895         PyObject *tmp_level_name_1;
n 1336         tmp_name_name_1 = mod_consts[21]; n 896         tmp_name_name_1 = mod_consts[12];
1337         tmp_globals_arg_name_1 = (PyObject *)moduledict___main__; 897         tmp_globals_arg_name_1 = (PyObject *)moduledict___main__;
1338         tmp_locals_arg_name_1 = Py_None; 898         tmp_locals_arg_name_1 = Py_None;
1339         tmp_fromlist_name_1 = Py_None; 899         tmp_fromlist_name_1 = Py_None;
n 1340         tmp_level_name_1 = mod_consts[22]; n 900         tmp_level_name_1 = mod_consts[13];
1341         frame_d886bb972203ff86f66d3015ddef6b38->m_frame.f_lineno = 46; 901         frame_d886bb972203ff86f66d3015ddef6b38->m_frame.f_lineno = 46;
1342         tmp_assign_source_12 = IMPORT_MODULE5(tmp_name_name_1, tmp_globals_arg_name_1, tmp_locals_arg_name_1, tmp_fromlist_name_1, tmp_level_name_1); 902         tmp_assign_source_12 = IMPORT_MODULE5(tmp_name_name_1, tmp_globals_arg_name_1, tmp_locals_arg_name_1, tmp_fromlist_name_1, tmp_level_name_1);
1343         assert(!(tmp_assign_source_12 == NULL)); 903         assert(!(tmp_assign_source_12 == NULL));
n 1344         UPDATE_STRING_DICT1(moduledict___main__, (Nuitka_StringObject *)mod_consts[21], tmp_assign_source_12); n 904         UPDATE_STRING_DICT1(moduledict___main__, (Nuitka_StringObject *)mod_consts[12], tmp_assign_source_12);
1345     } 905     }
1346     { 906     {
1347         PyObject *tmp_assign_source_13; 907         PyObject *tmp_assign_source_13;
1348         PyObject *tmp_iter_arg_1; 908         PyObject *tmp_iter_arg_1;
1349         PyObject *tmp_called_instance_1; 909         PyObject *tmp_called_instance_1;
n 1350         tmp_called_instance_1 = GET_STRING_DICT_VALUE(moduledict___main__, (Nuitka_StringObject *)mod_consts[21]); n 910         tmp_called_instance_1 = GET_STRING_DICT_VALUE(moduledict___main__, (Nuitka_StringObject *)mod_consts[12]);
1351 911
1352         if (unlikely(tmp_called_instance_1 == NULL)) { 912         if (unlikely(tmp_called_instance_1 == NULL)) {
n 1353             tmp_called_instance_1 = GET_MODULE_VARIABLE_VALUE_FALLBACK(mod_consts[21]); n 913             tmp_called_instance_1 = GET_MODULE_VARIABLE_VALUE_FALLBACK(mod_consts[12]);
1354         } 914         }
1355 915
1356         assert(!(tmp_called_instance_1 == NULL)); 916         assert(!(tmp_called_instance_1 == NULL));
1357         frame_d886bb972203ff86f66d3015ddef6b38->m_frame.f_lineno = 47; 917         frame_d886bb972203ff86f66d3015ddef6b38->m_frame.f_lineno = 47;
1358         tmp_iter_arg_1 = CALL_METHOD_WITH_ARGS2( 918         tmp_iter_arg_1 = CALL_METHOD_WITH_ARGS2(
1359             tmp_called_instance_1, 919             tmp_called_instance_1,
n 1360             mod_consts[23], n 920             mod_consts[14],
1361             &PyTuple_GET_ITEM(mod_consts[24], 0) 921             &PyTuple_GET_ITEM(mod_consts[15], 0)
1362         ); 922         );
1363 923
1364         if (tmp_iter_arg_1 == NULL) { 924         if (tmp_iter_arg_1 == NULL) {
1365             assert(ERROR_OCCURRED()); 925             assert(ERROR_OCCURRED());
1366 926
1416     } 976     }
1417     { 977     {
1418         PyObject *tmp_assign_source_15; 978         PyObject *tmp_assign_source_15;
1419         CHECK_OBJECT(tmp_for_loop_1__iter_value); 979         CHECK_OBJECT(tmp_for_loop_1__iter_value);
1420         tmp_assign_source_15 = tmp_for_loop_1__iter_value; 980         tmp_assign_source_15 = tmp_for_loop_1__iter_value;
n 1421         UPDATE_STRING_DICT0(moduledict___main__, (Nuitka_StringObject *)mod_consts[25], tmp_assign_source_15); n 981         UPDATE_STRING_DICT0(moduledict___main__, (Nuitka_StringObject *)mod_consts[16], tmp_assign_source_15);
1422     } 982     }
1423     { 983     {
1424         PyObject *tmp_called_name_1; 984         PyObject *tmp_called_name_1;
1425         PyObject *tmp_call_result_1; 985         PyObject *tmp_call_result_1;
1426         PyObject *tmp_args_element_name_1; 986         PyObject *tmp_args_element_name_1;
n 1427         tmp_called_name_1 = GET_STRING_DICT_VALUE(moduledict___main__, (Nuitka_StringObject *)mod_consts[20]); n 987         tmp_called_name_1 = GET_STRING_DICT_VALUE(moduledict___main__, (Nuitka_StringObject *)mod_consts[11]);
1428 988
1429         if (unlikely(tmp_called_name_1 == NULL)) { 989         if (unlikely(tmp_called_name_1 == NULL)) {
n 1430             tmp_called_name_1 = GET_MODULE_VARIABLE_VALUE_FALLBACK(mod_consts[20]); n 990             tmp_called_name_1 = GET_MODULE_VARIABLE_VALUE_FALLBACK(mod_consts[11]);
1431         } 991         }
1432 992
1433         if (tmp_called_name_1 == NULL) { 993         if (tmp_called_name_1 == NULL) {
1434             assert(ERROR_OCCURRED()); 994             assert(ERROR_OCCURRED());
1435 995
1438 998
1439             exception_lineno = 48; 999             exception_lineno = 48;
1440 1000
1441             goto try_except_handler_2; 1001             goto try_except_handler_2;
1442         } 1002         }
n 1443         tmp_args_element_name_1 = GET_STRING_DICT_VALUE(moduledict___main__, (Nuitka_StringObject *)mod_consts[26]); n 1003         tmp_args_element_name_1 = GET_STRING_DICT_VALUE(moduledict___main__, (Nuitka_StringObject *)mod_consts[17]);
1444 1004
1445         if (unlikely(tmp_args_element_name_1 == NULL)) { 1005         if (unlikely(tmp_args_element_name_1 == NULL)) {
n 1446             tmp_args_element_name_1 = GET_MODULE_VARIABLE_VALUE_FALLBACK(mod_consts[26]); n 1006             tmp_args_element_name_1 = GET_MODULE_VARIABLE_VALUE_FALLBACK(mod_consts[17]);
1447         } 1007         }
1448 1008
1449         if (tmp_args_element_name_1 == NULL) { 1009         if (tmp_args_element_name_1 == NULL) {
1450             assert(ERROR_OCCURRED()); 1010             assert(ERROR_OCCURRED());
1451 1011
1514     Py_DECREF(tmp_for_loop_1__for_iterator); 1074     Py_DECREF(tmp_for_loop_1__for_iterator);
1515     tmp_for_loop_1__for_iterator = NULL; 1075     tmp_for_loop_1__for_iterator = NULL;
1516     { 1076     {
1517         PyObject *tmp_called_name_2; 1077         PyObject *tmp_called_name_2;
1518         PyObject *tmp_call_result_2; 1078         PyObject *tmp_call_result_2;
n 1519         tmp_called_name_2 = LOOKUP_BUILTIN(mod_consts[27]); n 1079         tmp_called_name_2 = LOOKUP_BUILTIN(mod_consts[18]);
1520         assert(tmp_called_name_2 != NULL); 1080         assert(tmp_called_name_2 != NULL);
1521         frame_d886bb972203ff86f66d3015ddef6b38->m_frame.f_lineno = 50; 1081         frame_d886bb972203ff86f66d3015ddef6b38->m_frame.f_lineno = 50;
t 1522         tmp_call_result_2 = CALL_FUNCTION_WITH_POSARGS1(tmp_called_name_2, mod_consts[28]); t 1082         tmp_call_result_2 = CALL_FUNCTION_WITH_POSARGS1(tmp_called_name_2, mod_consts[19]);
1523 1083
1524         if (tmp_call_result_2 == NULL) { 1084         if (tmp_call_result_2 == NULL) {
1525             assert(ERROR_OCCURRED()); 1085             assert(ERROR_OCCURRED());
1526 1086
1527             FETCH_ERROR_OCCURRED(&exception_type, &exception_value, &exception_tb); 1087             FETCH_ERROR_OCCURRED(&exception_type, &exception_value, &exception_tb);