Construct FunctionCreationGeneratorClosure

Performance Diagrams

Construct FunctionCreationGeneratorClosure 0020000002000000400000040000006000000600000080000008000000100000001000000012000000120000001400000014000000160000001600000018000000180000002000000020000000CPython 3.10Nuitka (main)Nuitka (develop)Nuitka (factory)2179922188.95192307692307257.0CPython 3.103400973242.31730769230768465.5620458992196Nuitka (main)3400953395.6826923076923465.5622726186832Nuitka (develop)3400729549.0480769230769465.56481187667566Nuitka (factory)Construct FunctionCreationGeneratorClosureTicks Construct FunctionCreationGeneratorClosure 002000000200000040000004000000600000060000008000000800000010000000100000001200000012000000140000001400000016000000160000001800000018000000200000002000000022000000220000002400000024000000CPython 3.8Nuitka (main)Nuitka (develop)Nuitka (factory)2514999688.95192307692307257.0CPython 3.83700894242.31730769230768467.7516474509426Nuitka (main)3700599395.6826923076923467.7545460215213Nuitka (develop)3699308549.0480769230769467.767230952427Nuitka (factory)Construct FunctionCreationGeneratorClosureTicks Construct FunctionCreationGeneratorClosure 0020000002000000400000040000006000000600000080000008000000100000001000000012000000120000001400000014000000160000001600000018000000180000002000000020000000220000002200000024000000240000002600000026000000CPython 2.7Nuitka (main)Nuitka (develop)Nuitka (factory)2694418588.95192307692307257.0CPython 2.72800881242.31730769230768478.4274380110645Nuitka (main)2800829395.6826923076923478.42791492287313Nuitka (develop)2800131549.0480769230769478.4343165467657Nuitka (factory)Construct FunctionCreationGeneratorClosureTicks

Source Code with Construct

    return empty, x


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

print("OK.")

#     Python test originally created or extracted from other peoples work. The
#     parts from me are licensed as below. It is at least Free Software where
#     it's copied from other people. In these cases, that will normally be
#     indicated.
#
#     Licensed under the Apache License, Version 2.0 (the "License");
#     you may not use this file except in compliance with the License.
#     You may obtain a copy of the License at
#
#         http://www.apache.org/licenses/LICENSE-2.0
#
#     Unless required by applicable law or agreed to in writing, software
#     distributed under the License is distributed on an "AS IS" BASIS,
#     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#     See the License for the specific language governing permissions and
#     limitations under the License.

Source Code without Construct

    # construct_end

    return empty, x


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

print("OK.")

#     Python test originally created or extracted from other peoples work. The
#     parts from me are licensed as below. It is at least Free Software where
#     it's copied from other people. In these cases, that will normally be
#     indicated.
#
#     Licensed under the Apache License, Version 2.0 (the "License");
#     you may not use this file except in compliance with the License.
#     You may obtain a copy of the License at
#
#         http://www.apache.org/licenses/LICENSE-2.0
#
#     Unless required by applicable law or agreed to in writing, software
#     distributed under the License is distributed on an "AS IS" BASIS,
#     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#     See the License for the specific language governing permissions and
#     limitations under the License.

Context Diff of Source Code


Construct
Baseline
9 def calledRepeatedly(x): 9 def calledRepeatedly(x):
10     # Force frame usage for now 10     # Force frame usage for now
11     module_var 11     module_var
12 12
13     # construct_begin 13     # construct_begin
n 14     def empty(): n
15         yield x
16  
17     # construct_alternative
18 14
19 15
20 16
n n 17     # construct_alternative
18     def empty():
19         yield module_var
21 20
t t 21     # construct_end
22 22
23     return empty, x 23     return empty, x
24 24
25 25
26 for x in itertools.repeat(None, 50000): 26 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[15]; n 36 static PyObject *mod_consts[14];
37 #ifndef __NUITKA_NO_ASSERT__ 37 #ifndef __NUITKA_NO_ASSERT__
n 38 static Py_hash_t mod_consts_hash[15]; n 38 static Py_hash_t mod_consts_hash[14];
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(tstate, &mod_consts[0], UNTRANSLATE("__main__")); 49         loadConstantsBlob(tstate, &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 < 15; i++) { n 53         for (int i = 0; i < 14; i++) {
54             mod_consts_hash[i] = DEEP_HASH(tstate, mod_consts[i]); 54             mod_consts_hash[i] = DEEP_HASH(tstate, 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__(PyThreadState *tstate) { 69 void checkModuleConstants___main__(PyThreadState *tstate) {
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 < 15; i++) { n 73     for (int i = 0; i < 14; i++) {
74         assert(mod_consts_hash[i] == DEEP_HASH(tstate, mod_consts[i])); 74         assert(mod_consts_hash[i] == DEEP_HASH(tstate, 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
79 79
80 // The module code objects. 80 // The module code objects.
81 static PyCodeObject *codeobj_48990dc0234132ecba91f12b4b71ac6d; 81 static PyCodeObject *codeobj_48990dc0234132ecba91f12b4b71ac6d;
82 static PyCodeObject *codeobj_a13ce7c2c6a7c52efddf4a31c3937e50; 82 static PyCodeObject *codeobj_a13ce7c2c6a7c52efddf4a31c3937e50;
n 83 static PyCodeObject *codeobj_596fb5d0240ccc155439e63eecf48ce0; n 83 static PyCodeObject *codeobj_d054a201115bfcae66ab2e6bae63823d;
84 /* For use in "MainProgram.c". */ 84 /* For use in "MainProgram.c". */
85 PyCodeObject *codeobj_main = NULL; 85 PyCodeObject *codeobj_main = NULL;
86 86
87 static void createModuleCodeObjects(void) { 87 static void createModuleCodeObjects(void) {
n 88     module_filename_obj = mod_consts[4]; CHECK_OBJECT(module_filename_obj); n 88     module_filename_obj = mod_consts[3]; CHECK_OBJECT(module_filename_obj);
89     codeobj_48990dc0234132ecba91f12b4b71ac6d = MAKE_CODE_OBJECT(module_filename_obj, 1, CO_NOFREE, mod_consts[11], mod_consts[11], NULL, NULL, 0, 0, 0); 89     codeobj_48990dc0234132ecba91f12b4b71ac6d = MAKE_CODE_OBJECT(module_filename_obj, 1, CO_NOFREE, mod_consts[11], mod_consts[11], NULL, NULL, 0, 0, 0);
90     codeobj_main = codeobj_48990dc0234132ecba91f12b4b71ac6d; 90     codeobj_main = codeobj_48990dc0234132ecba91f12b4b71ac6d;
n 91     codeobj_a13ce7c2c6a7c52efddf4a31c3937e50 = MAKE_CODE_OBJECT(module_filename_obj, 9, CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE, mod_consts[7], mod_consts[7], mod_consts[12], NULL, 1, 0, 0); n 91     codeobj_a13ce7c2c6a7c52efddf4a31c3937e50 = MAKE_CODE_OBJECT(module_filename_obj, 9, CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE, mod_consts[6], mod_consts[6], mod_consts[12], NULL, 1, 0, 0);
92     codeobj_596fb5d0240ccc155439e63eecf48ce0 = MAKE_CODE_OBJECT(module_filename_obj, 14, CO_GENERATOR | CO_OPTIMIZED | CO_NEWLOCALS, mod_consts[1], mod_consts[13], mod_consts[14]mod_consts[14], 0, 0, 0); 92     codeobj_d054a201115bfcae66ab2e6bae63823d = MAKE_CODE_OBJECT(module_filename_obj, 18, CO_GENERATOR | CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE, mod_consts[1], mod_consts[13], NULLNULL, 0, 0, 0);
93 } 93 }
94 94
95 // The module function declarations. 95 // The module function declarations.
n 96 static PyObject *MAKE_GENERATOR___main__$$$function__1_calledRepeatedly$$$function__1_empty$$$genobj__1_empty(struct Nuitka_CellObject **closure); n 96 static PyObject *MAKE_GENERATOR___main__$$$function__1_calledRepeatedly$$$function__1_empty$$$genobj__1_empty();
97 97
98 98
99 static PyObject *MAKE_FUNCTION___main__$$$function__1_calledRepeatedly(); 99 static PyObject *MAKE_FUNCTION___main__$$$function__1_calledRepeatedly();
100 100
101 101
n 102 static PyObject *MAKE_FUNCTION___main__$$$function__1_calledRepeatedly$$$function__1_empty(struct Nuitka_CellObject **closure); n 102 static PyObject *MAKE_FUNCTION___main__$$$function__1_calledRepeatedly$$$function__1_empty();
103 103
104 104
105 // The module function definitions. 105 // The module function definitions.
106 static PyObject *impl___main__$$$function__1_calledRepeatedly(PyThreadState *tstate, struct Nuitka_FunctionObject const *self, PyObject **python_pars) { 106 static PyObject *impl___main__$$$function__1_calledRepeatedly(PyThreadState *tstate, struct Nuitka_FunctionObject const *self, PyObject **python_pars) {
107     // Preserve error status for checks 107     // Preserve error status for checks
108 #ifndef __NUITKA_NO_ASSERT__ 108 #ifndef __NUITKA_NO_ASSERT__
109     NUITKA_MAY_BE_UNUSED bool had_error = HAS_ERROR_OCCURRED(tstate); 109     NUITKA_MAY_BE_UNUSED bool had_error = HAS_ERROR_OCCURRED(tstate);
110 #endif 110 #endif
111 111
112     // Local variable declarations. 112     // Local variable declarations.
n 113     struct Nuitka_CellObject *par_x = Nuitka_Cell_New1(python_pars[0]); n 113     PyObject *par_x = python_pars[0];
114     PyObject *var_empty = NULL; 114     PyObject *var_empty = NULL;
115     struct Nuitka_FrameObject *frame_a13ce7c2c6a7c52efddf4a31c3937e50; 115     struct Nuitka_FrameObject *frame_a13ce7c2c6a7c52efddf4a31c3937e50;
116     NUITKA_MAY_BE_UNUSED char const *type_description_1 = NULL; 116     NUITKA_MAY_BE_UNUSED char const *type_description_1 = NULL;
117     NUITKA_MAY_BE_UNUSED nuitka_void tmp_unused; 117     NUITKA_MAY_BE_UNUSED nuitka_void tmp_unused;
118     PyObject *exception_type = NULL; 118     PyObject *exception_type = NULL;
168 168
169             FETCH_ERROR_OCCURRED(tstate, &exception_type, &exception_value, &exception_tb); 169             FETCH_ERROR_OCCURRED(tstate, &exception_type, &exception_value, &exception_tb);
170 170
171 171
172             exception_lineno = 11; 172             exception_lineno = 11;
n 173             type_description_1 = "co"; n 173             type_description_1 = "oo";
174             goto frame_exception_exit_1; 174             goto frame_exception_exit_1;
175         } 175         }
176     } 176     }
177 177
178 178
216     // Return the error. 216     // Return the error.
217     goto try_except_handler_1; 217     goto try_except_handler_1;
218     frame_no_exception_1:; 218     frame_no_exception_1:;
219     { 219     {
220         PyObject *tmp_assign_source_1; 220         PyObject *tmp_assign_source_1;
n 221         struct Nuitka_CellObject *tmp_closure_1[1]; n
222 221
n 223         tmp_closure_1[0] = par_x; n
224         Py_INCREF(tmp_closure_1[0]);
225 222
n 226         tmp_assign_source_1 = MAKE_FUNCTION___main__$$$function__1_calledRepeatedly$$$function__1_empty(tmp_closure_1); n 223         tmp_assign_source_1 = MAKE_FUNCTION___main__$$$function__1_calledRepeatedly$$$function__1_empty();
227 224
228         assert(var_empty == NULL); 225         assert(var_empty == NULL);
229         var_empty = tmp_assign_source_1; 226         var_empty = tmp_assign_source_1;
230     } 227     }
231     { 228     {
232         PyObject *tmp_tuple_element_1; 229         PyObject *tmp_tuple_element_1;
233         CHECK_OBJECT(var_empty); 230         CHECK_OBJECT(var_empty);
234         tmp_tuple_element_1 = var_empty; 231         tmp_tuple_element_1 = var_empty;
235         tmp_return_value = MAKE_TUPLE_EMPTY(2); 232         tmp_return_value = MAKE_TUPLE_EMPTY(2);
236         PyTuple_SET_ITEM0(tmp_return_value, 0, tmp_tuple_element_1); 233         PyTuple_SET_ITEM0(tmp_return_value, 0, tmp_tuple_element_1);
n 237         CHECK_OBJECT(Nuitka_Cell_GET(par_x)); n 234         CHECK_OBJECT(par_x);
238         tmp_tuple_element_1 = Nuitka_Cell_GET(par_x); 235         tmp_tuple_element_1 = par_x;
239         PyTuple_SET_ITEM0(tmp_return_value, 1, tmp_tuple_element_1); 236         PyTuple_SET_ITEM0(tmp_return_value, 1, tmp_tuple_element_1);
240         goto try_return_handler_1; 237         goto try_return_handler_1;
241     } 238     }
242     NUITKA_CANNOT_GET_HERE("tried codes exits in all cases"); 239     NUITKA_CANNOT_GET_HERE("tried codes exits in all cases");
243     return NULL; 240     return NULL;
299 296
300     // Local variable declarations. 297     // Local variable declarations.
301     PyObject *tmp_return_value = NULL; 298     PyObject *tmp_return_value = NULL;
302 299
303     // Actual function body. 300     // Actual function body.
n 304     { n
305         struct Nuitka_CellObject *tmp_closure_1[1];
306 301
n 307         tmp_closure_1[0] = self->m_closure[0]; n
308         Py_INCREF(tmp_closure_1[0]);
309 302
n 310         tmp_return_value = MAKE_GENERATOR___main__$$$function__1_calledRepeatedly$$$function__1_empty$$$genobj__1_empty(tmp_closure_1); n 303     tmp_return_value = MAKE_GENERATOR___main__$$$function__1_calledRepeatedly$$$function__1_empty$$$genobj__1_empty();
311 304
n 312         goto function_return_exit; n 305     goto function_return_exit;
313     }
314 306
315     NUITKA_CANNOT_GET_HERE("Return statement must have exited already."); 307     NUITKA_CANNOT_GET_HERE("Return statement must have exited already.");
316     return NULL; 308     return NULL;
317 309
318 310
373         } else { 365         } else {
374             count_released_frame_cache_instances += 1; 366             count_released_frame_cache_instances += 1;
375         } 367         }
376         count_allocated_frame_cache_instances += 1; 368         count_allocated_frame_cache_instances += 1;
377 #endif 369 #endif
n 378         cache_m_frame = MAKE_FUNCTION_FRAME(tstate, codeobj_596fb5d0240ccc155439e63eecf48ce0, module___main__, sizeof(void *)); n 370         cache_m_frame = MAKE_FUNCTION_FRAME(tstate, codeobj_d054a201115bfcae66ab2e6bae63823d, module___main__, 0);
379 #if _DEBUG_REFCOUNTS 371 #if _DEBUG_REFCOUNTS
380     } else { 372     } else {
381         count_hit_frame_cache_instances += 1; 373         count_hit_frame_cache_instances += 1;
382 #endif 374 #endif
383     } 375     }
398 390
399     // Framed code: 391     // Framed code:
400     { 392     {
401         PyObject *tmp_expression_value_1; 393         PyObject *tmp_expression_value_1;
402         NUITKA_MAY_BE_UNUSED PyObject *tmp_yield_result_1; 394         NUITKA_MAY_BE_UNUSED PyObject *tmp_yield_result_1;
n 403         if (Nuitka_Cell_GET(generator->m_closure[0]) == NULL) { n 395         tmp_expression_value_1 = GET_STRING_DICT_VALUE(moduledict___main__, (Nuitka_StringObject *)mod_consts[0]);
404 396
n 405             FORMAT_UNBOUND_CLOSURE_ERROR(&generator_heap->exception_type, &generator_heap->exception_value, mod_consts[2]); n 397         if (unlikely(tmp_expression_value_1 == NULL)) {
406             generator_heap->exception_tb = NULL; 398             tmp_expression_value_1 = GET_MODULE_VARIABLE_VALUE_FALLBACK_IN_FUNCTION(tstate, mod_consts[0]);
399         }
407 400
n n 401         if (tmp_expression_value_1 == NULL) {
402             assert(HAS_ERROR_OCCURRED(tstate));
403  
404             FETCH_ERROR_OCCURRED(tstate, &generator_heap->exception_type, &generator_heap->exception_value, &generator_heap->exception_tb);
405  
406  
408             generator_heap->exception_lineno = 15; 407             generator_heap->exception_lineno = 19;
409             generator_heap->type_description_1 = "c"; 408  
410             goto frame_exception_exit_1; 409             goto frame_exception_exit_1;
411         } 410         }
n 412   n
413         tmp_expression_value_1 = Nuitka_Cell_GET(generator->m_closure[0]);
414         Py_INCREF(tmp_expression_value_1); 411         Py_INCREF(tmp_expression_value_1);
415         generator->m_yield_return_index = 1; 412         generator->m_yield_return_index = 1;
416         return tmp_expression_value_1; 413         return tmp_expression_value_1;
417         yield_return_1: 414         yield_return_1:
418         if (yield_return_value == NULL) { 415         if (yield_return_value == NULL) {
419             assert(HAS_ERROR_OCCURRED(tstate)); 416             assert(HAS_ERROR_OCCURRED(tstate));
420 417
421             FETCH_ERROR_OCCURRED(tstate, &generator_heap->exception_type, &generator_heap->exception_value, &generator_heap->exception_tb); 418             FETCH_ERROR_OCCURRED(tstate, &generator_heap->exception_type, &generator_heap->exception_value, &generator_heap->exception_tb);
422 419
423 420
n 424             generator_heap->exception_lineno = 15; n 421             generator_heap->exception_lineno = 19;
425             generator_heap->type_description_1 = "c"; 422  
426             goto frame_exception_exit_1; 423             goto frame_exception_exit_1;
427         } 424         }
428         tmp_yield_result_1 = yield_return_value; 425         tmp_yield_result_1 = yield_return_value;
429         Py_DECREF(tmp_yield_result_1); 426         Py_DECREF(tmp_yield_result_1);
430     } 427     }
442             generator_heap->exception_tb = ADD_TRACEBACK(generator_heap->exception_tb, generator->m_frame, generator_heap->exception_lineno); 439             generator_heap->exception_tb = ADD_TRACEBACK(generator_heap->exception_tb, generator->m_frame, generator_heap->exception_lineno);
443         } 440         }
444 441
445         Nuitka_Frame_AttachLocals( 442         Nuitka_Frame_AttachLocals(
446             generator->m_frame, 443             generator->m_frame,
n 447             generator_heap->type_description_1, n 444             generator_heap->type_description_1
448             generator->m_closure[0]
449         ); 445         );
450 446
451 447
452         // Release cached frame if used for exception. 448         // Release cached frame if used for exception.
453         if (generator->m_frame == cache_m_frame) { 449         if (generator->m_frame == cache_m_frame) {
488 484
489     return NULL; 485     return NULL;
490 486
491 } 487 }
492 488
n 493 static PyObject *MAKE_GENERATOR___main__$$$function__1_calledRepeatedly$$$function__1_empty$$$genobj__1_empty(struct Nuitka_CellObject **closure) { n 489 static PyObject *MAKE_GENERATOR___main__$$$function__1_calledRepeatedly$$$function__1_empty$$$genobj__1_empty() {
494     return Nuitka_Generator_New( 490     return Nuitka_Generator_New(
495         __main__$$$function__1_calledRepeatedly$$$function__1_empty$$$genobj__1_empty_context, 491         __main__$$$function__1_calledRepeatedly$$$function__1_empty$$$genobj__1_empty_context,
496         module___main__, 492         module___main__,
497         mod_consts[1], 493         mod_consts[1],
498 #if PYTHON_VERSION >= 0x350 494 #if PYTHON_VERSION >= 0x350
499         NULL, 495         NULL,
500 #endif 496 #endif
n 501         codeobj_596fb5d0240ccc155439e63eecf48ce0, n 497         codeobj_d054a201115bfcae66ab2e6bae63823d,
502         closure, 498         NULL,
503         1, 499         0,
504 #if 1 500 #if 1
505         sizeof(struct __main__$$$function__1_calledRepeatedly$$$function__1_empty$$$genobj__1_empty_locals) 501         sizeof(struct __main__$$$function__1_calledRepeatedly$$$function__1_empty$$$genobj__1_empty_locals)
506 #else 502 #else
507         0 503         0
508 #endif 504 #endif
512 508
513 509
514 static PyObject *MAKE_FUNCTION___main__$$$function__1_calledRepeatedly() { 510 static PyObject *MAKE_FUNCTION___main__$$$function__1_calledRepeatedly() {
515     struct Nuitka_FunctionObject *result = Nuitka_Function_New( 511     struct Nuitka_FunctionObject *result = Nuitka_Function_New(
516         impl___main__$$$function__1_calledRepeatedly, 512         impl___main__$$$function__1_calledRepeatedly,
n 517         mod_consts[7], n 513         mod_consts[6],
518 #if PYTHON_VERSION >= 0x300 514 #if PYTHON_VERSION >= 0x300
519         NULL, 515         NULL,
520 #endif 516 #endif
521         codeobj_a13ce7c2c6a7c52efddf4a31c3937e50, 517         codeobj_a13ce7c2c6a7c52efddf4a31c3937e50,
522         NULL, 518         NULL,
534     return (PyObject *)result; 530     return (PyObject *)result;
535 } 531 }
536 532
537 533
538 534
n 539 static PyObject *MAKE_FUNCTION___main__$$$function__1_calledRepeatedly$$$function__1_empty(struct Nuitka_CellObject **closure) { n 535 static PyObject *MAKE_FUNCTION___main__$$$function__1_calledRepeatedly$$$function__1_empty() {
540     struct Nuitka_FunctionObject *result = Nuitka_Function_New( 536     struct Nuitka_FunctionObject *result = Nuitka_Function_New(
541         impl___main__$$$function__1_calledRepeatedly$$$function__1_empty, 537         impl___main__$$$function__1_calledRepeatedly$$$function__1_empty,
542         mod_consts[1], 538         mod_consts[1],
543 #if PYTHON_VERSION >= 0x300 539 #if PYTHON_VERSION >= 0x300
544         NULL, 540         NULL,
545 #endif 541 #endif
n 546         codeobj_596fb5d0240ccc155439e63eecf48ce0, n 542         codeobj_d054a201115bfcae66ab2e6bae63823d,
547         NULL, 543         NULL,
548 #if PYTHON_VERSION >= 0x300 544 #if PYTHON_VERSION >= 0x300
549         NULL, 545         NULL,
550         NULL, 546         NULL,
551 #endif 547 #endif
552         module___main__, 548         module___main__,
553         NULL, 549         NULL,
n 554         closure, n 550         NULL,
555         1 551         0
556     ); 552     );
557 553
558 554
559     return (PyObject *)result; 555     return (PyObject *)result;
560 } 556 }
928 924
929     // Module code. 925     // Module code.
930     { 926     {
931         PyObject *tmp_assign_source_1; 927         PyObject *tmp_assign_source_1;
932         tmp_assign_source_1 = Py_None; 928         tmp_assign_source_1 = Py_None;
n 933         UPDATE_STRING_DICT0(moduledict___main__, (Nuitka_StringObject *)mod_consts[3], tmp_assign_source_1); n 929         UPDATE_STRING_DICT0(moduledict___main__, (Nuitka_StringObject *)mod_consts[2], tmp_assign_source_1);
934     } 930     }
935     { 931     {
936         PyObject *tmp_assign_source_2; 932         PyObject *tmp_assign_source_2;
n 937         tmp_assign_source_2 = mod_consts[4]; n 933         tmp_assign_source_2 = mod_consts[3];
938         UPDATE_STRING_DICT0(moduledict___main__, (Nuitka_StringObject *)mod_consts[5], tmp_assign_source_2); 934         UPDATE_STRING_DICT0(moduledict___main__, (Nuitka_StringObject *)mod_consts[4], tmp_assign_source_2);
939     } 935     }
940     frame_48990dc0234132ecba91f12b4b71ac6d = MAKE_MODULE_FRAME(codeobj_48990dc0234132ecba91f12b4b71ac6d, module___main__); 936     frame_48990dc0234132ecba91f12b4b71ac6d = MAKE_MODULE_FRAME(codeobj_48990dc0234132ecba91f12b4b71ac6d, module___main__);
941 937
942     // Push the new frame as the currently active one, and we should be exclusively 938     // Push the new frame as the currently active one, and we should be exclusively
943     // owning it. 939     // owning it.
949         PyObject *tmp_assign_source_3; 945         PyObject *tmp_assign_source_3;
950         PyObject *tmp_name_value_1; 946         PyObject *tmp_name_value_1;
951         PyObject *tmp_globals_arg_value_1; 947         PyObject *tmp_globals_arg_value_1;
952         PyObject *tmp_locals_arg_value_1; 948         PyObject *tmp_locals_arg_value_1;
953         PyObject *tmp_fromlist_value_1; 949         PyObject *tmp_fromlist_value_1;
n 954         tmp_name_value_1 = mod_consts[6]; n 950         tmp_name_value_1 = mod_consts[5];
955         tmp_globals_arg_value_1 = (PyObject *)moduledict___main__; 951         tmp_globals_arg_value_1 = (PyObject *)moduledict___main__;
956         tmp_locals_arg_value_1 = Py_None; 952         tmp_locals_arg_value_1 = Py_None;
957         tmp_fromlist_value_1 = Py_None; 953         tmp_fromlist_value_1 = Py_None;
958         frame_48990dc0234132ecba91f12b4b71ac6d->m_frame.f_lineno = 4; 954         frame_48990dc0234132ecba91f12b4b71ac6d->m_frame.f_lineno = 4;
959         tmp_assign_source_3 = IMPORT_MODULE4(tstate, tmp_name_value_1, tmp_globals_arg_value_1, tmp_locals_arg_value_1, tmp_fromlist_value_1); 955         tmp_assign_source_3 = IMPORT_MODULE4(tstate, tmp_name_value_1, tmp_globals_arg_value_1, tmp_locals_arg_value_1, tmp_fromlist_value_1);
965 961
966             exception_lineno = 4; 962             exception_lineno = 4;
967 963
968             goto frame_exception_exit_1; 964             goto frame_exception_exit_1;
969         } 965         }
n 970         UPDATE_STRING_DICT1(moduledict___main__, (Nuitka_StringObject *)mod_consts[6], tmp_assign_source_3); n 966         UPDATE_STRING_DICT1(moduledict___main__, (Nuitka_StringObject *)mod_consts[5], tmp_assign_source_3);
971     } 967     }
972     { 968     {
973         PyObject *tmp_assign_source_4; 969         PyObject *tmp_assign_source_4;
974         tmp_assign_source_4 = Py_None; 970         tmp_assign_source_4 = Py_None;
975         UPDATE_STRING_DICT0(moduledict___main__, (Nuitka_StringObject *)mod_consts[0], tmp_assign_source_4); 971         UPDATE_STRING_DICT0(moduledict___main__, (Nuitka_StringObject *)mod_consts[0], tmp_assign_source_4);
978         PyObject *tmp_assign_source_5; 974         PyObject *tmp_assign_source_5;
979 975
980 976
981         tmp_assign_source_5 = MAKE_FUNCTION___main__$$$function__1_calledRepeatedly(); 977         tmp_assign_source_5 = MAKE_FUNCTION___main__$$$function__1_calledRepeatedly();
982 978
n 983         UPDATE_STRING_DICT1(moduledict___main__, (Nuitka_StringObject *)mod_consts[7], tmp_assign_source_5); n 979         UPDATE_STRING_DICT1(moduledict___main__, (Nuitka_StringObject *)mod_consts[6], tmp_assign_source_5);
984     } 980     }
985     { 981     {
986         PyObject *tmp_assign_source_6; 982         PyObject *tmp_assign_source_6;
987         PyObject *tmp_iter_arg_1; 983         PyObject *tmp_iter_arg_1;
988         PyObject *tmp_called_instance_1; 984         PyObject *tmp_called_instance_1;
n 989         tmp_called_instance_1 = GET_STRING_DICT_VALUE(moduledict___main__, (Nuitka_StringObject *)mod_consts[6]); n 985         tmp_called_instance_1 = GET_STRING_DICT_VALUE(moduledict___main__, (Nuitka_StringObject *)mod_consts[5]);
990 986
991         if (unlikely(tmp_called_instance_1 == NULL)) { 987         if (unlikely(tmp_called_instance_1 == NULL)) {
n 992             tmp_called_instance_1 = GET_MODULE_VARIABLE_VALUE_FALLBACK(tstate, mod_consts[6]); n 988             tmp_called_instance_1 = GET_MODULE_VARIABLE_VALUE_FALLBACK(tstate, mod_consts[5]);
993         } 989         }
994 990
995         assert(!(tmp_called_instance_1 == NULL)); 991         assert(!(tmp_called_instance_1 == NULL));
996         frame_48990dc0234132ecba91f12b4b71ac6d->m_frame.f_lineno = 26; 992         frame_48990dc0234132ecba91f12b4b71ac6d->m_frame.f_lineno = 26;
997         tmp_iter_arg_1 = CALL_METHOD_WITH_ARGS2( 993         tmp_iter_arg_1 = CALL_METHOD_WITH_ARGS2(
998             tstate, 994             tstate,
999             tmp_called_instance_1, 995             tmp_called_instance_1,
n 1000             mod_consts[8], n 996             mod_consts[7],
1001             &PyTuple_GET_ITEM(mod_consts[9], 0) 997             &PyTuple_GET_ITEM(mod_consts[8], 0)
1002         ); 998         );
1003 999
1004         if (tmp_iter_arg_1 == NULL) { 1000         if (tmp_iter_arg_1 == NULL) {
1005             assert(HAS_ERROR_OCCURRED(tstate)); 1001             assert(HAS_ERROR_OCCURRED(tstate));
1006 1002
1056     } 1052     }
1057     { 1053     {
1058         PyObject *tmp_assign_source_8; 1054         PyObject *tmp_assign_source_8;
1059         CHECK_OBJECT(tmp_for_loop_1__iter_value); 1055         CHECK_OBJECT(tmp_for_loop_1__iter_value);
1060         tmp_assign_source_8 = tmp_for_loop_1__iter_value; 1056         tmp_assign_source_8 = tmp_for_loop_1__iter_value;
n 1061         UPDATE_STRING_DICT0(moduledict___main__, (Nuitka_StringObject *)mod_consts[2], tmp_assign_source_8); n 1057         UPDATE_STRING_DICT0(moduledict___main__, (Nuitka_StringObject *)mod_consts[9], tmp_assign_source_8);
1062     } 1058     }
1063     { 1059     {
1064         PyObject *tmp_called_value_1; 1060         PyObject *tmp_called_value_1;
1065         PyObject *tmp_call_result_1; 1061         PyObject *tmp_call_result_1;
1066         PyObject *tmp_args_element_value_1; 1062         PyObject *tmp_args_element_value_1;
n 1067         tmp_called_value_1 = GET_STRING_DICT_VALUE(moduledict___main__, (Nuitka_StringObject *)mod_consts[7]); n 1063         tmp_called_value_1 = GET_STRING_DICT_VALUE(moduledict___main__, (Nuitka_StringObject *)mod_consts[6]);
1068 1064
1069         if (unlikely(tmp_called_value_1 == NULL)) { 1065         if (unlikely(tmp_called_value_1 == NULL)) {
n 1070             tmp_called_value_1 = GET_MODULE_VARIABLE_VALUE_FALLBACK(tstate, mod_consts[7]); n 1066             tmp_called_value_1 = GET_MODULE_VARIABLE_VALUE_FALLBACK(tstate, mod_consts[6]);
1071         } 1067         }
1072 1068
1073         if (tmp_called_value_1 == NULL) { 1069         if (tmp_called_value_1 == NULL) {
1074             assert(HAS_ERROR_OCCURRED(tstate)); 1070             assert(HAS_ERROR_OCCURRED(tstate));
1075 1071
1078 1074
1079             exception_lineno = 27; 1075             exception_lineno = 27;
1080 1076
1081             goto try_except_handler_1; 1077             goto try_except_handler_1;
1082         } 1078         }
n 1083         tmp_args_element_value_1 = GET_STRING_DICT_VALUE(moduledict___main__, (Nuitka_StringObject *)mod_consts[2]); n 1079         tmp_args_element_value_1 = GET_STRING_DICT_VALUE(moduledict___main__, (Nuitka_StringObject *)mod_consts[9]);
1084 1080
1085         if (unlikely(tmp_args_element_value_1 == NULL)) { 1081         if (unlikely(tmp_args_element_value_1 == NULL)) {
t 1086             tmp_args_element_value_1 = GET_MODULE_VARIABLE_VALUE_FALLBACK(tstate, mod_consts[2]); t 1082             tmp_args_element_value_1 = GET_MODULE_VARIABLE_VALUE_FALLBACK(tstate, mod_consts[9]);
1087         } 1083         }
1088 1084
1089         assert(!(tmp_args_element_value_1 == NULL)); 1085         assert(!(tmp_args_element_value_1 == NULL));
1090         frame_48990dc0234132ecba91f12b4b71ac6d->m_frame.f_lineno = 27; 1086         frame_48990dc0234132ecba91f12b4b71ac6d->m_frame.f_lineno = 27;
1091         tmp_call_result_1 = CALL_FUNCTION_WITH_SINGLE_ARG(tstate, tmp_called_value_1, tmp_args_element_value_1); 1087         tmp_call_result_1 = CALL_FUNCTION_WITH_SINGLE_ARG(tstate, tmp_called_value_1, tmp_args_element_value_1);