@@ -645,33 +645,33 @@ _PyImport_ClearModulesByIndex(PyInterpreterState *interp)
645
645
K. PyModule_CreateInitialized() -> PyModule_SetDocString()
646
646
L. PyModule_CreateInitialized(): set mod->md_def
647
647
M. <module init func>: initialize the module, etc.
648
- N. _PyImport_RunModInitFunc(): set def->m_base.m_init
649
- O. import_run_extension()
648
+ N. import_run_extension()
650
649
-> _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():
650
+ O . import_run_extension(): set __file__
651
+ P . import_run_extension() -> update_global_state_for_extension()
652
+ Q . update_global_state_for_extension():
654
653
copy __dict__ into def->m_base.m_copy
655
- S . update_global_state_for_extension():
654
+ R . update_global_state_for_extension():
656
655
add it to _PyRuntime.imports.extensions
657
- T . import_run_extension() -> finish_singlephase_extension()
658
- U . finish_singlephase_extension():
656
+ S . import_run_extension() -> finish_singlephase_extension()
657
+ T . finish_singlephase_extension():
659
658
add it to interp->imports.modules_by_index
660
- V . finish_singlephase_extension(): add it to sys.modules
659
+ U . finish_singlephase_extension(): add it to sys.modules
661
660
662
661
Step (Q) is skipped for core modules (sys/builtins).
663
662
664
663
(6). subsequent times (found in _PyRuntime.imports.extensions):
665
664
A. _imp_create_dynamic_impl() -> import_find_extension()
666
- B. import_find_extension()
667
- -> _PyImport_CheckSubinterpIncompatibleExtensionAllowed()
668
- C. import_find_extension() -> import_add_module()
669
- D. if name in sys.modules: use that module
670
- E. else:
671
- 1. import_add_module() -> PyModule_NewObject()
672
- 2. import_add_module(): set it on sys.modules
673
- F. import_find_extension(): copy the "m_copy" dict into __dict__
674
- G. import_find_extension(): add to modules_by_index
665
+ B. import_find_extension() -> reload_singlephase_extension()
666
+ C. reload_singlephase_extension()
667
+ -> _PyImport_CheckSubinterpIncompatibleExtensionAllowed()
668
+ D. reload_singlephase_extension() -> import_add_module()
669
+ E. if name in sys.modules: use that module
670
+ F. else:
671
+ 1. import_add_module() -> PyModule_NewObject()
672
+ 2. import_add_module(): set it on sys.modules
673
+ G. reload_singlephase_extension(): copy the "m_copy" dict into __dict__
674
+ H. reload_singlephase_extension(): add to modules_by_index
675
675
676
676
(10). (every time):
677
677
A. noop
@@ -681,21 +681,23 @@ _PyImport_ClearModulesByIndex(PyInterpreterState *interp)
681
681
682
682
(6). not main interpreter and never loaded there - every time (not found in _PyRuntime.imports.extensions):
683
683
A-P. (same as for m_size == -1)
684
- Q-S. (skipped)
685
- T-V. (same as for m_size == -1)
684
+ Q. _PyImport_RunModInitFunc(): set def->m_base.m_init
685
+ R. (skipped)
686
+ S-U. (same as for m_size == -1)
686
687
687
688
(6). main interpreter - first time (not found in _PyRuntime.imports.extensions):
688
- A-R . (same as for m_size == -1)
689
- S. (skipped)
690
- T-V . (same as for m_size == -1)
689
+ A-P . (same as for m_size == -1)
690
+ Q. _PyImport_RunModInitFunc(): set def->m_base.m_init
691
+ R-U . (same as for m_size == -1)
691
692
692
693
(6). subsequent times (found in _PyRuntime.imports.extensions):
693
694
A. _imp_create_dynamic_impl() -> import_find_extension()
694
- B. import_find_extension()
695
- -> _PyImport_CheckSubinterpIncompatibleExtensionAllowed()
696
- C. import_find_extension(): call def->m_base.m_init (see above)
697
- D. import_find_extension(): add the module to sys.modules
698
- E. import_find_extension(): add to modules_by_index
695
+ B. import_find_extension() -> reload_singlephase_extension()
696
+ C. reload_singlephase_extension()
697
+ -> _PyImport_CheckSubinterpIncompatibleExtensionAllowed()
698
+ D. reload_singlephase_extension(): call def->m_base.m_init (see above)
699
+ E. reload_singlephase_extension(): add the module to sys.modules
700
+ F. reload_singlephase_extension(): add to modules_by_index
699
701
700
702
(10). every time:
701
703
A. noop
0 commit comments