@@ -634,29 +634,30 @@ _PyImport_ClearModulesByIndex(PyInterpreterState *interp)
634
634
A. _imp_create_dynamic_impl() -> import_find_extension()
635
635
B. _imp_create_dynamic_impl() -> _PyImport_GetModInitFunc()
636
636
C. _PyImport_GetModInitFunc(): load <module init func>
637
- D. _imp_create_dynamic_impl() -> _PyImport_RunModInitFunc()
638
- E. _PyImport_RunModInitFunc(): call <module init func>
639
- F. <module init func> -> PyModule_Create() -> PyModule_Create2()
640
- -> PyModule_CreateInitialized()
641
- G. PyModule_CreateInitialized() -> PyModule_New()
642
- H. PyModule_CreateInitialized(): allocate mod->md_state
643
- I. PyModule_CreateInitialized() -> PyModule_AddFunctions()
644
- J. PyModule_CreateInitialized() -> PyModule_SetDocString()
645
- K. PyModule_CreateInitialized(): set mod->md_def
646
- L. <module init func>: initialize the module, etc.
647
- M. _PyImport_RunModInitFunc(): set def->m_base.m_init
648
- N. _imp_create_dynamic_impl()
649
- -> _PyImport_CheckSubinterpIncompatibleExtensionAllowed()
650
- O. _imp_create_dynamic_impl(): set __file__
651
- P. _imp_create_dynamic_impl() -> update_global_state_for_extension()
652
- Q. update_global_state_for_extension():
653
- copy __dict__ into def->m_base.m_copy
654
- R. update_global_state_for_extension():
655
- add it to _PyRuntime.imports.extensions
656
- S. _imp_create_dynamic_impl() -> finish_singlephase_extension()
657
- T. finish_singlephase_extension():
658
- add it to interp->imports.modules_by_index
659
- U. finish_singlephase_extension(): add it to sys.modules
637
+ D. _imp_create_dynamic_impl() -> import_run_extension()
638
+ E. import_run_extension() -> _PyImport_RunModInitFunc()
639
+ F. _PyImport_RunModInitFunc(): call <module init func>
640
+ G. <module init func> -> PyModule_Create() -> PyModule_Create2()
641
+ -> PyModule_CreateInitialized()
642
+ H. PyModule_CreateInitialized() -> PyModule_New()
643
+ I. PyModule_CreateInitialized(): allocate mod->md_state
644
+ J. PyModule_CreateInitialized() -> PyModule_AddFunctions()
645
+ K. PyModule_CreateInitialized() -> PyModule_SetDocString()
646
+ L. PyModule_CreateInitialized(): set mod->md_def
647
+ M. <module init func>: initialize the module, etc.
648
+ N. _PyImport_RunModInitFunc(): set def->m_base.m_init
649
+ O. import_run_extension()
650
+ -> _PyImport_CheckSubinterpIncompatibleExtensionAllowed()
651
+ P. import_run_extension(): set __file__
652
+ Q. import_run_extension() -> update_global_state_for_extension()
653
+ R. update_global_state_for_extension():
654
+ copy __dict__ into def->m_base.m_copy
655
+ S. update_global_state_for_extension():
656
+ add it to _PyRuntime.imports.extensions
657
+ T. import_run_extension() -> finish_singlephase_extension()
658
+ U. finish_singlephase_extension():
659
+ add it to interp->imports.modules_by_index
660
+ V. finish_singlephase_extension(): add it to sys.modules
660
661
661
662
Step (Q) is skipped for core modules (sys/builtins).
662
663
@@ -679,14 +680,14 @@ _PyImport_ClearModulesByIndex(PyInterpreterState *interp)
679
680
...for single-phase init modules, where m_size >= 0:
680
681
681
682
(6). not main interpreter and never loaded there - every time (not found in _PyRuntime.imports.extensions):
682
- A-O . (same as for m_size == -1)
683
- P-R . (skipped)
684
- S-U . (same as for m_size == -1)
683
+ A-P . (same as for m_size == -1)
684
+ Q-S . (skipped)
685
+ T-V . (same as for m_size == -1)
685
686
686
687
(6). main interpreter - first time (not found in _PyRuntime.imports.extensions):
687
- A-Q . (same as for m_size == -1)
688
- R . (skipped)
689
- S-U . (same as for m_size == -1)
688
+ A-R . (same as for m_size == -1)
689
+ S . (skipped)
690
+ T-V . (same as for m_size == -1)
690
691
691
692
(6). subsequent times (found in _PyRuntime.imports.extensions):
692
693
A. _imp_create_dynamic_impl() -> import_find_extension()
@@ -703,19 +704,21 @@ _PyImport_ClearModulesByIndex(PyInterpreterState *interp)
703
704
...for multi-phase init modules:
704
705
705
706
(6). every time:
706
- A. _imp_create_dynamic_impl() -> import_find_extension() (not found)
707
- B. _imp_create_dynamic_impl() -> _PyImport_LoadDynamicModuleWithSpec()
708
- C. _PyImport_LoadDynamicModuleWithSpec(): load module init func
709
- D. _PyImport_LoadDynamicModuleWithSpec(): call module init func
710
- E. _PyImport_LoadDynamicModuleWithSpec() -> PyModule_FromDefAndSpec()
711
- F. PyModule_FromDefAndSpec(): gather/check moduledef slots
712
- G. if there's a Py_mod_create slot:
707
+ A. _imp_create_dynamic_impl() -> import_find_extension() (not found)
708
+ B. _imp_create_dynamic_impl() -> _PyImport_GetModInitFunc()
709
+ C. _PyImport_GetModInitFunc(): load <module init func>
710
+ D. _imp_create_dynamic_impl() -> import_run_extension()
711
+ E. import_run_extension() -> _PyImport_RunModInitFunc()
712
+ F. _PyImport_RunModInitFunc(): call <module init func>
713
+ G. import_run_extension() -> PyModule_FromDefAndSpec()
714
+ H. PyModule_FromDefAndSpec(): gather/check moduledef slots
715
+ I. if there's a Py_mod_create slot:
713
716
1. PyModule_FromDefAndSpec(): call its function
714
- H . else:
717
+ J . else:
715
718
1. PyModule_FromDefAndSpec() -> PyModule_NewObject()
716
- I : PyModule_FromDefAndSpec(): set mod->md_def
717
- J . PyModule_FromDefAndSpec() -> _add_methods_to_object()
718
- K . PyModule_FromDefAndSpec() -> PyModule_SetDocString()
719
+ K : PyModule_FromDefAndSpec(): set mod->md_def
720
+ L . PyModule_FromDefAndSpec() -> _add_methods_to_object()
721
+ M . PyModule_FromDefAndSpec() -> PyModule_SetDocString()
719
722
720
723
(10). every time:
721
724
A. _imp_exec_dynamic_impl() -> exec_builtin_or_dynamic()
0 commit comments