gh-117953: Split Up _PyImport_LoadDynamicModuleWithSpec() #118203
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
I've pulled this out of #118116.
Basically, I've turned most of
_PyImport_LoadDynamicModuleWithSpec()into two new functions (_PyImport_GetModInitFunc()and_PyImport_RunModInitFunc()) and moved the rest of it out into_imp_create_dynamic_impl(). There shouldn't be any changes in behavior.This change makes some future changes simpler. This is particularly relevant to potentially calling each module init function in the main interpreter first. Thus the critical part of the PR is the addition of
_PyImport_RunModInitFunc(), which is strictly focused on running the init func and validating the result. A later PR will take it a step farther by capturing error information rather than raising exceptions.FWIW, this change also helps readers by clarifying a bit more about what happens when an extension/builtin module is imported.