Construct FunctionCreationClosure

Performance Diagrams

Construct FunctionCreationClosure 00200000020000004000000400000060000006000000800000080000001000000010000000120000001200000014000000140000001600000016000000180000001800000020000000200000002200000022000000CPython 2.7Nuitka (main)Nuitka (develop)Nuitka (factory)2399202588.95192307692307257.0CPython 2.73901711242.31730769230768463.928163469063Nuitka (main)3901696395.6826923076923463.92831796751693Nuitka (develop)3901696549.0480769230769463.92831796751693Nuitka (factory)Construct FunctionCreationClosureTicks Construct FunctionCreationClosure 0020000002000000400000040000006000000600000080000008000000100000001000000012000000120000001400000014000000160000001600000018000000180000002000000020000000220000002200000024000000240000002600000026000000CPython 3.8Nuitka (main)Nuitka (develop)Nuitka (factory)2620077288.95192307692307257.0CPython 3.84402272242.31730769230768462.5948852017972Nuitka (main)4402267395.6826923076923462.59493235983217Nuitka (develop)4402267549.0480769230769462.59493235983217Nuitka (factory)Construct FunctionCreationClosureTicks

Source Code with Construct

module_var = None

def calledRepeatedly(x):
    # Force a local frame for now
    module_var

# construct_begin
    def empty():
        return x

# construct_alternative





    return empty, x


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

print("OK.")

Source Code without Construct

module_var = None

def calledRepeatedly(x):
    # Force a local frame for now
    module_var

# construct_begin



# construct_alternative
    def empty():
        return module_var

# construct_end

    return empty, x


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

print("OK.")

Context Diff of Source Code


Construct
Baseline
23 def calledRepeatedly(x): 23 def calledRepeatedly(x):
24     # Force a local frame for now 24     # Force a local frame for now
25     module_var 25     module_var
26 26
27 # construct_begin 27 # construct_begin
n 28     def empty(): n
29         return x
30  
31 # construct_alternative
32 28
33 29
34 30
n n 31 # construct_alternative
32     def empty():
33         return module_var
35 34
t t 35 # construct_end
36 36
37     return empty, x 37     return empty, x
38 38
39 39
40 import itertools 40 import itertools

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[19]; n 36 static PyObject *mod_consts[18];
37 #ifndef __NUITKA_NO_ASSERT__ 37 #ifndef __NUITKA_NO_ASSERT__
n 38 static Py_hash_t mod_consts_hash[19]; n 38 static Py_hash_t mod_consts_hash[18];
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 < 19; i++) { n 53         for(int i = 0; i < 18; 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 < 19; i++) { n 73     for(int i = 0; i < 18; 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
79 79
80 // The module code objects. 80 // The module code objects.
81 static PyCodeObject *codeobj_19020927c67aed0c4f5591fd39568138; 81 static PyCodeObject *codeobj_19020927c67aed0c4f5591fd39568138;
82 static PyCodeObject *codeobj_eda615dddf470edab6d3000678a92106; 82 static PyCodeObject *codeobj_eda615dddf470edab6d3000678a92106;
n 83 static PyCodeObject *codeobj_5046f8725a575247b25b01af4f7d08dc; n 83 static PyCodeObject *codeobj_c9a2125a6166560f5c2436e1616c9f8c;
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[5]; CHECK_OBJECT(module_filename_obj); n 88     module_filename_obj = mod_consts[4]; CHECK_OBJECT(module_filename_obj);
89     codeobj_19020927c67aed0c4f5591fd39568138 = MAKE_CODEOBJECT(module_filename_obj, 1, CO_NOFREE, mod_consts[16], NULL, NULL, 0, 0, 0); 89     codeobj_19020927c67aed0c4f5591fd39568138 = MAKE_CODEOBJECT(module_filename_obj, 1, CO_NOFREE, mod_consts[16], NULL, NULL, 0, 0, 0);
n 90     codeobj_eda615dddf470edab6d3000678a92106 = MAKE_CODEOBJECT(module_filename_obj, 23, CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE, mod_consts[9], mod_consts[17], NULL, 1, 0, 0); n 90     codeobj_eda615dddf470edab6d3000678a92106 = MAKE_CODEOBJECT(module_filename_obj, 23, CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE, mod_consts[8], mod_consts[17], NULL, 1, 0, 0);
91     codeobj_5046f8725a575247b25b01af4f7d08dc = MAKE_CODEOBJECT(module_filename_obj, 28, CO_OPTIMIZED | CO_NEWLOCALS, mod_consts[1], mod_consts[18], mod_consts[18], 0, 0, 0); 91     codeobj_c9a2125a6166560f5c2436e1616c9f8c = MAKE_CODEOBJECT(module_filename_obj, 32, CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE, mod_consts[1], NULL, NULL, 0, 0, 0);
92 } 92 }
93 93
94 // The module function declarations. 94 // The module function declarations.
95 static PyObject *MAKE_FUNCTION___main__$$$function__1_calledRepeatedly(); 95 static PyObject *MAKE_FUNCTION___main__$$$function__1_calledRepeatedly();
96 96
97 97
n 98 static PyObject *MAKE_FUNCTION___main__$$$function__1_calledRepeatedly$$$function__1_empty(struct Nuitka_CellObject **closure); n 98 static PyObject *MAKE_FUNCTION___main__$$$function__1_calledRepeatedly$$$function__1_empty();
99 99
100 100
101 // The module function definitions. 101 // The module function definitions.
102 static PyObject *impl___main__$$$function__1_calledRepeatedly(struct Nuitka_FunctionObject const *self, PyObject **python_pars) { 102 static PyObject *impl___main__$$$function__1_calledRepeatedly(struct Nuitka_FunctionObject const *self, PyObject **python_pars) {
103     // Preserve error status for checks 103     // Preserve error status for checks
104 #ifndef __NUITKA_NO_ASSERT__ 104 #ifndef __NUITKA_NO_ASSERT__
105     NUITKA_MAY_BE_UNUSED bool had_error = ERROR_OCCURRED(); 105     NUITKA_MAY_BE_UNUSED bool had_error = ERROR_OCCURRED();
106 #endif 106 #endif
107 107
108     // Local variable declarations. 108     // Local variable declarations.
n 109     struct Nuitka_CellObject *par_x = Nuitka_Cell_New1(python_pars[0]); n 109     PyObject *par_x = python_pars[0];
110     PyObject *var_empty = NULL; 110     PyObject *var_empty = NULL;
111     struct Nuitka_FrameObject *frame_eda615dddf470edab6d3000678a92106; 111     struct Nuitka_FrameObject *frame_eda615dddf470edab6d3000678a92106;
112     NUITKA_MAY_BE_UNUSED char const *type_description_1 = NULL; 112     NUITKA_MAY_BE_UNUSED char const *type_description_1 = NULL;
113     NUITKA_MAY_BE_UNUSED nuitka_void tmp_unused; 113     NUITKA_MAY_BE_UNUSED nuitka_void tmp_unused;
114     PyObject *exception_type = NULL; 114     PyObject *exception_type = NULL;
164 164
165             FETCH_ERROR_OCCURRED(&exception_type, &exception_value, &exception_tb); 165             FETCH_ERROR_OCCURRED(&exception_type, &exception_value, &exception_tb);
166 166
167 167
168             exception_lineno = 25; 168             exception_lineno = 25;
n 169             type_description_1 = "co"; n 169             type_description_1 = "oo";
170             goto frame_exception_exit_1; 170             goto frame_exception_exit_1;
171         } 171         }
172     } 172     }
173 173
174 #if 0 174 #if 0
221     goto try_except_handler_1; 221     goto try_except_handler_1;
222 222
223     frame_no_exception_1:; 223     frame_no_exception_1:;
224     { 224     {
225         PyObject *tmp_assign_source_1; 225         PyObject *tmp_assign_source_1;
n 226         struct Nuitka_CellObject *tmp_closure_1[1]; n
227 226
n 228         tmp_closure_1[0] = par_x; n
229         Py_INCREF(tmp_closure_1[0]);
230 227
n 231         tmp_assign_source_1 = MAKE_FUNCTION___main__$$$function__1_calledRepeatedly$$$function__1_empty(tmp_closure_1); n 228         tmp_assign_source_1 = MAKE_FUNCTION___main__$$$function__1_calledRepeatedly$$$function__1_empty();
232 229
233         assert(var_empty == NULL); 230         assert(var_empty == NULL);
234         var_empty = tmp_assign_source_1; 231         var_empty = tmp_assign_source_1;
235     } 232     }
236     { 233     {
237         PyObject *tmp_tuple_element_1; 234         PyObject *tmp_tuple_element_1;
238         CHECK_OBJECT(var_empty); 235         CHECK_OBJECT(var_empty);
239         tmp_tuple_element_1 = var_empty; 236         tmp_tuple_element_1 = var_empty;
240         tmp_return_value = PyTuple_New(2); 237         tmp_return_value = PyTuple_New(2);
241         PyTuple_SET_ITEM0(tmp_return_value, 0, tmp_tuple_element_1); 238         PyTuple_SET_ITEM0(tmp_return_value, 0, tmp_tuple_element_1);
n 242         CHECK_OBJECT(Nuitka_Cell_GET(par_x)); n 239         CHECK_OBJECT(par_x);
243         tmp_tuple_element_1 = Nuitka_Cell_GET(par_x); 240         tmp_tuple_element_1 = par_x;
244         PyTuple_SET_ITEM0(tmp_return_value, 1, tmp_tuple_element_1); 241         PyTuple_SET_ITEM0(tmp_return_value, 1, tmp_tuple_element_1);
245         goto try_return_handler_1; 242         goto try_return_handler_1;
246     } 243     }
247     NUITKA_CANNOT_GET_HERE("tried codes exits in all cases"); 244     NUITKA_CANNOT_GET_HERE("tried codes exits in all cases");
248     return NULL; 245     return NULL;
300 #ifndef __NUITKA_NO_ASSERT__ 297 #ifndef __NUITKA_NO_ASSERT__
301     NUITKA_MAY_BE_UNUSED bool had_error = ERROR_OCCURRED(); 298     NUITKA_MAY_BE_UNUSED bool had_error = ERROR_OCCURRED();
302 #endif 299 #endif
303 300
304     // Local variable declarations. 301     // Local variable declarations.
n 305     struct Nuitka_FrameObject *frame_5046f8725a575247b25b01af4f7d08dc; n 302     struct Nuitka_FrameObject *frame_c9a2125a6166560f5c2436e1616c9f8c;
306     NUITKA_MAY_BE_UNUSED char const *type_description_1 = NULL; 303     NUITKA_MAY_BE_UNUSED char const *type_description_1 = NULL;
307     PyObject *tmp_return_value = NULL; 304     PyObject *tmp_return_value = NULL;
308     PyObject *exception_type = NULL; 305     PyObject *exception_type = NULL;
309     PyObject *exception_value = NULL; 306     PyObject *exception_value = NULL;
310     PyTracebackObject *exception_tb = NULL; 307     PyTracebackObject *exception_tb = NULL;
311     NUITKA_MAY_BE_UNUSED int exception_lineno = 0; 308     NUITKA_MAY_BE_UNUSED int exception_lineno = 0;
n 312     static struct Nuitka_FrameObject *cache_frame_5046f8725a575247b25b01af4f7d08dc = NULL; n 309     static struct Nuitka_FrameObject *cache_frame_c9a2125a6166560f5c2436e1616c9f8c = NULL;
313 310
314     // Actual function body. 311     // Actual function body.
n 315     if (isFrameUnusable(cache_frame_5046f8725a575247b25b01af4f7d08dc)) { n 312     if (isFrameUnusable(cache_frame_c9a2125a6166560f5c2436e1616c9f8c)) {
316         Py_XDECREF(cache_frame_5046f8725a575247b25b01af4f7d08dc); 313         Py_XDECREF(cache_frame_c9a2125a6166560f5c2436e1616c9f8c);
317 314
318 #if _DEBUG_REFCOUNTS 315 #if _DEBUG_REFCOUNTS
n 319         if (cache_frame_5046f8725a575247b25b01af4f7d08dc == NULL) { n 316         if (cache_frame_c9a2125a6166560f5c2436e1616c9f8c == NULL) {
320             count_active_frame_cache_instances += 1; 317             count_active_frame_cache_instances += 1;
321         } else { 318         } else {
322             count_released_frame_cache_instances += 1; 319             count_released_frame_cache_instances += 1;
323         } 320         }
324         count_allocated_frame_cache_instances += 1; 321         count_allocated_frame_cache_instances += 1;
325 #endif 322 #endif
n 326         cache_frame_5046f8725a575247b25b01af4f7d08dc = MAKE_FUNCTION_FRAME(codeobj_5046f8725a575247b25b01af4f7d08dc, module___main__, sizeof(void *)); n 323         cache_frame_c9a2125a6166560f5c2436e1616c9f8c = MAKE_FUNCTION_FRAME(codeobj_c9a2125a6166560f5c2436e1616c9f8c, module___main__, 0);
327 #if _DEBUG_REFCOUNTS 324 #if _DEBUG_REFCOUNTS
328     } else { 325     } else {
329         count_hit_frame_cache_instances += 1; 326         count_hit_frame_cache_instances += 1;
330 #endif 327 #endif
331     } 328     }
n 332     assert(cache_frame_5046f8725a575247b25b01af4f7d08dc->m_type_description == NULL); n 329     assert(cache_frame_c9a2125a6166560f5c2436e1616c9f8c->m_type_description == NULL);
333     frame_5046f8725a575247b25b01af4f7d08dc = cache_frame_5046f8725a575247b25b01af4f7d08dc; 330     frame_c9a2125a6166560f5c2436e1616c9f8c = cache_frame_c9a2125a6166560f5c2436e1616c9f8c;
334 331
335     // Push the new frame as the currently active one. 332     // Push the new frame as the currently active one.
n 336     pushFrameStack(frame_5046f8725a575247b25b01af4f7d08dc); n 333     pushFrameStack(frame_c9a2125a6166560f5c2436e1616c9f8c);
337 334
338     // Mark the frame object as in use, ref count 1 will be up for reuse. 335     // Mark the frame object as in use, ref count 1 will be up for reuse.
n 339     assert(Py_REFCNT(frame_5046f8725a575247b25b01af4f7d08dc) == 2); // Frame stack n 336     assert(Py_REFCNT(frame_c9a2125a6166560f5c2436e1616c9f8c) == 2); // Frame stack
340 337
341     // Framed code: 338     // Framed code:
n 342     if (Nuitka_Cell_GET(self->m_closure[0]) == NULL) { n 339     tmp_return_value = GET_STRING_DICT_VALUE(moduledict___main__, (Nuitka_StringObject *)mod_consts[0]);
343 340
n 344         FORMAT_UNBOUND_CLOSURE_ERROR(&exception_type, &exception_value, mod_consts[3]); n 341     if (unlikely(tmp_return_value == NULL)) {
345         exception_tb = NULL; 342         tmp_return_value = GET_MODULE_VARIABLE_VALUE_FALLBACK(mod_consts[0]);
343     }
344  
345     if (tmp_return_value == NULL) {
346         assert(ERROR_OCCURRED());
347  
346         NORMALIZE_EXCEPTION(&exception_type, &exception_value, &exception_tb); 348         FETCH_ERROR_OCCURRED(&exception_type, &exception_value, &exception_tb);
347         CHAIN_EXCEPTION(exception_value);
348 349
n n 350  
349         exception_lineno = 29; 351         exception_lineno = 33;
350         type_description_1 = "c"; 352  
351         goto frame_exception_exit_1; 353         goto frame_exception_exit_1;
352     } 354     }
n 353   n
354     tmp_return_value = Nuitka_Cell_GET(self->m_closure[0]);
355     Py_INCREF(tmp_return_value); 355     Py_INCREF(tmp_return_value);
356     goto frame_return_exit_1; 356     goto frame_return_exit_1;
357 357
358 #if 0 358 #if 0
n 359     RESTORE_FRAME_EXCEPTION(frame_5046f8725a575247b25b01af4f7d08dc); n 359     RESTORE_FRAME_EXCEPTION(frame_c9a2125a6166560f5c2436e1616c9f8c);
360 #endif 360 #endif
361 361
362     // Put the previous frame back on top. 362     // Put the previous frame back on top.
363     popFrameStack(); 363     popFrameStack();
364 364
365     goto frame_no_exception_1; 365     goto frame_no_exception_1;
366 366
367     frame_return_exit_1:; 367     frame_return_exit_1:;
368 #if 0 368 #if 0
n 369     RESTORE_FRAME_EXCEPTION(frame_5046f8725a575247b25b01af4f7d08dc); n 369     RESTORE_FRAME_EXCEPTION(frame_c9a2125a6166560f5c2436e1616c9f8c);
370 #endif 370 #endif
371 371
372     // Put the previous frame back on top. 372     // Put the previous frame back on top.
373     popFrameStack(); 373     popFrameStack();
374 374
375     goto function_return_exit; 375     goto function_return_exit;
376 376
377     frame_exception_exit_1:; 377     frame_exception_exit_1:;
378 378
379 #if 0 379 #if 0
n 380     RESTORE_FRAME_EXCEPTION(frame_5046f8725a575247b25b01af4f7d08dc); n 380     RESTORE_FRAME_EXCEPTION(frame_c9a2125a6166560f5c2436e1616c9f8c);
381 #endif 381 #endif
382 382
383     if (exception_tb == NULL) { 383     if (exception_tb == NULL) {
n 384         exception_tb = MAKE_TRACEBACK(frame_5046f8725a575247b25b01af4f7d08dc, exception_lineno); n 384         exception_tb = MAKE_TRACEBACK(frame_c9a2125a6166560f5c2436e1616c9f8c, exception_lineno);
385     } else if (exception_tb->tb_frame != &frame_5046f8725a575247b25b01af4f7d08dc->m_frame) { 385     } else if (exception_tb->tb_frame != &frame_c9a2125a6166560f5c2436e1616c9f8c->m_frame) {
386         exception_tb = ADD_TRACEBACK(exception_tb, frame_5046f8725a575247b25b01af4f7d08dc, exception_lineno); 386         exception_tb = ADD_TRACEBACK(exception_tb, frame_c9a2125a6166560f5c2436e1616c9f8c, exception_lineno);
387     } 387     }
388 388
389     // Attaches locals to frame if any. 389     // Attaches locals to frame if any.
390     Nuitka_Frame_AttachLocals( 390     Nuitka_Frame_AttachLocals(
n 391         frame_5046f8725a575247b25b01af4f7d08dc, n 391         frame_c9a2125a6166560f5c2436e1616c9f8c,
392         type_description_1, 392         type_description_1
393         self->m_closure[0]
394     ); 393     );
395 394
396 395
397     // Release cached frame if used for exception. 396     // Release cached frame if used for exception.
n 398     if (frame_5046f8725a575247b25b01af4f7d08dc == cache_frame_5046f8725a575247b25b01af4f7d08dc) { n 397     if (frame_c9a2125a6166560f5c2436e1616c9f8c == cache_frame_c9a2125a6166560f5c2436e1616c9f8c) {
399 #if _DEBUG_REFCOUNTS 398 #if _DEBUG_REFCOUNTS
400         count_active_frame_cache_instances -= 1; 399         count_active_frame_cache_instances -= 1;
401         count_released_frame_cache_instances += 1; 400         count_released_frame_cache_instances += 1;
402 #endif 401 #endif
403 402
n 404         Py_DECREF(cache_frame_5046f8725a575247b25b01af4f7d08dc); n 403         Py_DECREF(cache_frame_c9a2125a6166560f5c2436e1616c9f8c);
405         cache_frame_5046f8725a575247b25b01af4f7d08dc = NULL; 404         cache_frame_c9a2125a6166560f5c2436e1616c9f8c = NULL;
406     } 405     }
407 406
n 408     assertFrameObject(frame_5046f8725a575247b25b01af4f7d08dc); n 407     assertFrameObject(frame_c9a2125a6166560f5c2436e1616c9f8c);
409 408
410     // Put the previous frame back on top. 409     // Put the previous frame back on top.
411     popFrameStack(); 410     popFrameStack();
412 411
413     // Return the error. 412     // Return the error.
438 437
439 438
440 static PyObject *MAKE_FUNCTION___main__$$$function__1_calledRepeatedly() { 439 static PyObject *MAKE_FUNCTION___main__$$$function__1_calledRepeatedly() {
441     struct Nuitka_FunctionObject *result = Nuitka_Function_New( 440     struct Nuitka_FunctionObject *result = Nuitka_Function_New(
442         impl___main__$$$function__1_calledRepeatedly, 441         impl___main__$$$function__1_calledRepeatedly,
n 443         mod_consts[9], n 442         mod_consts[8],
444 #if PYTHON_VERSION >= 0x300 443 #if PYTHON_VERSION >= 0x300
445         NULL, 444         NULL,
446 #endif 445 #endif
447         codeobj_eda615dddf470edab6d3000678a92106, 446         codeobj_eda615dddf470edab6d3000678a92106,
448         NULL, 447         NULL,
460     return (PyObject *)result; 459     return (PyObject *)result;
461 } 460 }
462 461
463 462
464 463
n 465 static PyObject *MAKE_FUNCTION___main__$$$function__1_calledRepeatedly$$$function__1_empty(struct Nuitka_CellObject **closure) { n 464 static PyObject *MAKE_FUNCTION___main__$$$function__1_calledRepeatedly$$$function__1_empty() {
466     struct Nuitka_FunctionObject *result = Nuitka_Function_New( 465     struct Nuitka_FunctionObject *result = Nuitka_Function_New(
467         impl___main__$$$function__1_calledRepeatedly$$$function__1_empty, 466         impl___main__$$$function__1_calledRepeatedly$$$function__1_empty,
468         mod_consts[1], 467         mod_consts[1],
469 #if PYTHON_VERSION >= 0x300 468 #if PYTHON_VERSION >= 0x300
470         mod_consts[2], 469         mod_consts[2],
471 #endif 470 #endif
n 472         codeobj_5046f8725a575247b25b01af4f7d08dc, n 471         codeobj_c9a2125a6166560f5c2436e1616c9f8c,
473         NULL, 472         NULL,
474 #if PYTHON_VERSION >= 0x300 473 #if PYTHON_VERSION >= 0x300
475         NULL, 474         NULL,
476         NULL, 475         NULL,
477 #endif 476 #endif
478         module___main__, 477         module___main__,
479         NULL, 478         NULL,
n 480         closure, n 479         NULL,
481         1 480         0
482     ); 481     );
483 482
484 483
485     return (PyObject *)result; 484     return (PyObject *)result;
486 } 485 }
849 848
850     // Module code. 849     // Module code.
851     { 850     {
852         PyObject *tmp_assign_source_1; 851         PyObject *tmp_assign_source_1;
853         tmp_assign_source_1 = Py_None; 852         tmp_assign_source_1 = Py_None;
n 854         UPDATE_STRING_DICT0(moduledict___main__, (Nuitka_StringObject *)mod_consts[4], tmp_assign_source_1); n 853         UPDATE_STRING_DICT0(moduledict___main__, (Nuitka_StringObject *)mod_consts[3], tmp_assign_source_1);
855     } 854     }
856     { 855     {
857         PyObject *tmp_assign_source_2; 856         PyObject *tmp_assign_source_2;
n 858         tmp_assign_source_2 = mod_consts[5]; n 857         tmp_assign_source_2 = mod_consts[4];
859         UPDATE_STRING_DICT0(moduledict___main__, (Nuitka_StringObject *)mod_consts[6], tmp_assign_source_2); 858         UPDATE_STRING_DICT0(moduledict___main__, (Nuitka_StringObject *)mod_consts[5], tmp_assign_source_2);
860     } 859     }
861     { 860     {
862         PyObject *tmp_assign_source_3; 861         PyObject *tmp_assign_source_3;
863         tmp_assign_source_3 = Py_None; 862         tmp_assign_source_3 = Py_None;
n 864         UPDATE_STRING_DICT0(moduledict___main__, (Nuitka_StringObject *)mod_consts[7], tmp_assign_source_3); n 863         UPDATE_STRING_DICT0(moduledict___main__, (Nuitka_StringObject *)mod_consts[6], tmp_assign_source_3);
865     } 864     }
866     { 865     {
867         PyObject *tmp_assign_source_4; 866         PyObject *tmp_assign_source_4;
868         tmp_assign_source_4 = PyDict_New(); 867         tmp_assign_source_4 = PyDict_New();
n 869         UPDATE_STRING_DICT1(moduledict___main__, (Nuitka_StringObject *)mod_consts[8], tmp_assign_source_4); n 868         UPDATE_STRING_DICT1(moduledict___main__, (Nuitka_StringObject *)mod_consts[7], tmp_assign_source_4);
870     } 869     }
871     { 870     {
872         PyObject *tmp_assign_source_5; 871         PyObject *tmp_assign_source_5;
873         tmp_assign_source_5 = Py_None; 872         tmp_assign_source_5 = Py_None;
874         UPDATE_STRING_DICT0(moduledict___main__, (Nuitka_StringObject *)mod_consts[0], tmp_assign_source_5); 873         UPDATE_STRING_DICT0(moduledict___main__, (Nuitka_StringObject *)mod_consts[0], tmp_assign_source_5);
877         PyObject *tmp_assign_source_6; 876         PyObject *tmp_assign_source_6;
878 877
879 878
880         tmp_assign_source_6 = MAKE_FUNCTION___main__$$$function__1_calledRepeatedly(); 879         tmp_assign_source_6 = MAKE_FUNCTION___main__$$$function__1_calledRepeatedly();
881 880
n 882         UPDATE_STRING_DICT1(moduledict___main__, (Nuitka_StringObject *)mod_consts[9], tmp_assign_source_6); n 881         UPDATE_STRING_DICT1(moduledict___main__, (Nuitka_StringObject *)mod_consts[8], tmp_assign_source_6);
883     } 882     }
884     { 883     {
885         PyObject *tmp_assign_source_7; 884         PyObject *tmp_assign_source_7;
886         PyObject *tmp_name_value_1; 885         PyObject *tmp_name_value_1;
887         PyObject *tmp_globals_arg_value_1; 886         PyObject *tmp_globals_arg_value_1;
888         PyObject *tmp_locals_arg_value_1; 887         PyObject *tmp_locals_arg_value_1;
889         PyObject *tmp_fromlist_value_1; 888         PyObject *tmp_fromlist_value_1;
890         PyObject *tmp_level_value_1; 889         PyObject *tmp_level_value_1;
n 891         tmp_name_value_1 = mod_consts[10]; n 890         tmp_name_value_1 = mod_consts[9];
892         tmp_globals_arg_value_1 = (PyObject *)moduledict___main__; 891         tmp_globals_arg_value_1 = (PyObject *)moduledict___main__;
893         tmp_locals_arg_value_1 = Py_None; 892         tmp_locals_arg_value_1 = Py_None;
894         tmp_fromlist_value_1 = Py_None; 893         tmp_fromlist_value_1 = Py_None;
n 895         tmp_level_value_1 = mod_consts[11]; n 894         tmp_level_value_1 = mod_consts[10];
896         tmp_assign_source_7 = IMPORT_MODULE5(tmp_name_value_1, tmp_globals_arg_value_1, tmp_locals_arg_value_1, tmp_fromlist_value_1, tmp_level_value_1); 895         tmp_assign_source_7 = IMPORT_MODULE5(tmp_name_value_1, tmp_globals_arg_value_1, tmp_locals_arg_value_1, tmp_fromlist_value_1, tmp_level_value_1);
897         assert(!(tmp_assign_source_7 == NULL)); 896         assert(!(tmp_assign_source_7 == NULL));
n 898         UPDATE_STRING_DICT1(moduledict___main__, (Nuitka_StringObject *)mod_consts[10], tmp_assign_source_7); n 897         UPDATE_STRING_DICT1(moduledict___main__, (Nuitka_StringObject *)mod_consts[9], tmp_assign_source_7);
899     } 898     }
900     // Frame without reuse. 899     // Frame without reuse.
901     frame_19020927c67aed0c4f5591fd39568138 = MAKE_MODULE_FRAME(codeobj_19020927c67aed0c4f5591fd39568138, module___main__); 900     frame_19020927c67aed0c4f5591fd39568138 = MAKE_MODULE_FRAME(codeobj_19020927c67aed0c4f5591fd39568138, module___main__);
902 901
903     // Push the new frame as the currently active one, and we should be exclusively 902     // Push the new frame as the currently active one, and we should be exclusively
908     // Framed code: 907     // Framed code:
909     { 908     {
910         PyObject *tmp_assign_source_8; 909         PyObject *tmp_assign_source_8;
911         PyObject *tmp_iter_arg_1; 910         PyObject *tmp_iter_arg_1;
912         PyObject *tmp_called_instance_1; 911         PyObject *tmp_called_instance_1;
n 913         tmp_called_instance_1 = GET_STRING_DICT_VALUE(moduledict___main__, (Nuitka_StringObject *)mod_consts[10]); n 912         tmp_called_instance_1 = GET_STRING_DICT_VALUE(moduledict___main__, (Nuitka_StringObject *)mod_consts[9]);
914 913
915         if (unlikely(tmp_called_instance_1 == NULL)) { 914         if (unlikely(tmp_called_instance_1 == NULL)) {
n 916             tmp_called_instance_1 = GET_MODULE_VARIABLE_VALUE_FALLBACK(mod_consts[10]); n 915             tmp_called_instance_1 = GET_MODULE_VARIABLE_VALUE_FALLBACK(mod_consts[9]);
917         } 916         }
918 917
919         assert(!(tmp_called_instance_1 == NULL)); 918         assert(!(tmp_called_instance_1 == NULL));
920         frame_19020927c67aed0c4f5591fd39568138->m_frame.f_lineno = 41; 919         frame_19020927c67aed0c4f5591fd39568138->m_frame.f_lineno = 41;
921         tmp_iter_arg_1 = CALL_METHOD_WITH_ARGS2( 920         tmp_iter_arg_1 = CALL_METHOD_WITH_ARGS2(
922             tmp_called_instance_1, 921             tmp_called_instance_1,
n 923             mod_consts[12], n 922             mod_consts[11],
924             &PyTuple_GET_ITEM(mod_consts[13], 0) 923             &PyTuple_GET_ITEM(mod_consts[12], 0)
925         ); 924         );
926 925
927         if (tmp_iter_arg_1 == NULL) { 926         if (tmp_iter_arg_1 == NULL) {
928             assert(ERROR_OCCURRED()); 927             assert(ERROR_OCCURRED());
929 928
979     } 978     }
980     { 979     {
981         PyObject *tmp_assign_source_10; 980         PyObject *tmp_assign_source_10;
982         CHECK_OBJECT(tmp_for_loop_1__iter_value); 981         CHECK_OBJECT(tmp_for_loop_1__iter_value);
983         tmp_assign_source_10 = tmp_for_loop_1__iter_value; 982         tmp_assign_source_10 = tmp_for_loop_1__iter_value;
n 984         UPDATE_STRING_DICT0(moduledict___main__, (Nuitka_StringObject *)mod_consts[3], tmp_assign_source_10); n 983         UPDATE_STRING_DICT0(moduledict___main__, (Nuitka_StringObject *)mod_consts[13], tmp_assign_source_10);
985     } 984     }
986     { 985     {
987         PyObject *tmp_called_value_1; 986         PyObject *tmp_called_value_1;
988         PyObject *tmp_call_result_1; 987         PyObject *tmp_call_result_1;
989         PyObject *tmp_args_element_value_1; 988         PyObject *tmp_args_element_value_1;
n 990         tmp_called_value_1 = GET_STRING_DICT_VALUE(moduledict___main__, (Nuitka_StringObject *)mod_consts[9]); n 989         tmp_called_value_1 = GET_STRING_DICT_VALUE(moduledict___main__, (Nuitka_StringObject *)mod_consts[8]);
991 990
992         if (unlikely(tmp_called_value_1 == NULL)) { 991         if (unlikely(tmp_called_value_1 == NULL)) {
n 993             tmp_called_value_1 = GET_MODULE_VARIABLE_VALUE_FALLBACK(mod_consts[9]); n 992             tmp_called_value_1 = GET_MODULE_VARIABLE_VALUE_FALLBACK(mod_consts[8]);
994         } 993         }
995 994
996         if (tmp_called_value_1 == NULL) { 995         if (tmp_called_value_1 == NULL) {
997             assert(ERROR_OCCURRED()); 996             assert(ERROR_OCCURRED());
998 997
1001 1000
1002             exception_lineno = 42; 1001             exception_lineno = 42;
1003 1002
1004             goto try_except_handler_1; 1003             goto try_except_handler_1;
1005         } 1004         }
n 1006         tmp_args_element_value_1 = GET_STRING_DICT_VALUE(moduledict___main__, (Nuitka_StringObject *)mod_consts[3]); n 1005         tmp_args_element_value_1 = GET_STRING_DICT_VALUE(moduledict___main__, (Nuitka_StringObject *)mod_consts[13]);
1007 1006
1008         if (unlikely(tmp_args_element_value_1 == NULL)) { 1007         if (unlikely(tmp_args_element_value_1 == NULL)) {
t 1009             tmp_args_element_value_1 = GET_MODULE_VARIABLE_VALUE_FALLBACK(mod_consts[3]); t 1008             tmp_args_element_value_1 = GET_MODULE_VARIABLE_VALUE_FALLBACK(mod_consts[13]);
1010         } 1009         }
1011 1010
1012         assert(!(tmp_args_element_value_1 == NULL)); 1011         assert(!(tmp_args_element_value_1 == NULL));
1013         frame_19020927c67aed0c4f5591fd39568138->m_frame.f_lineno = 42; 1012         frame_19020927c67aed0c4f5591fd39568138->m_frame.f_lineno = 42;
1014         tmp_call_result_1 = CALL_FUNCTION_WITH_SINGLE_ARG(tmp_called_value_1, tmp_args_element_value_1); 1013         tmp_call_result_1 = CALL_FUNCTION_WITH_SINGLE_ARG(tmp_called_value_1, tmp_args_element_value_1);