bpo-36904: Optimize _PyStack_UnpackDict #14517
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.
Optimize, clean up and fix
_PyStack_UnpackDict
:_PyStack_UnpackDict
is made a static function insidecall.c
._PyStack_UnpackDict
, so_PyStack_UnpackDict
is now only used when there actually are keyword arguments. This speeds up the case of no keywords and it simplifies the code.PY_VECTORCALL_ARGUMENTS_OFFSET
. Tests indicate that_PyStack_UnpackDict
is responsible for about 60% of cases wheremethod_vectorcall
needs to do an allocation. With this change, these allocations are no longer needed._PyStack_UnpackDict_Free
.Py_ssize_t
instead ofsize_t
. In the old code, the overflow check could theoretically overflow (the right hand side could be negative).CC @encukou @methane
https://bugs.python.org/issue36904