Bug report
Bug description:
The comment here
| /* pto->kw is mutable, so need to check every time */ |
Indicates that it needs to be checked every time. However, once it removes vectorcall in
partial_vectorcall_fallback there is no mechanism to set it back.
deffunc(a, b, c=0):
returna-b-cp2=partial(func, 1, c=1)
In [13]: print(p2(2)) # -1vectorcallcall-2In [14]:
In [14]: print(p2(2)) # -1call-2In [15]: delp2.keywords['c']
In [16]: print(p2(2)) # -1call-1
I see 3 possibilities:
- Set additional flag in
partial_setvectorcall(pto->hasvcall) storing state whether vectorcall is supported. Then implement fallback in partial_call in the same manner as it looks now in partial_vectorcall - Re-setting vectorcall after
_PyObject_MakeTpCall in partial_vectorcall_fallback. So that partial_vectorcall will stay as a primary entry in all cases. This adds 4ns overhead compared to 1. - Leave it as it is, but remove confusion that this needs to be checked more than 1 time.
CPython versions tested on:
3.11
Operating systems tested on:
macOS
Linked PRs
Bug report
Bug description:
The comment here
cpython/Modules/_functoolsmodule.c
Line 221 in 100c7ab
Indicates that it needs to be checked every time. However, once it removes vectorcall in
partial_vectorcall_fallbackthere is no mechanism to set it back.I see 3 possibilities:
partial_setvectorcall(pto->hasvcall) storing state whethervectorcallis supported. Then implement fallback inpartial_callin the same manner as it looks now inpartial_vectorcall_PyObject_MakeTpCallinpartial_vectorcall_fallback. So thatpartial_vectorcallwill stay as a primary entry in all cases. This adds 4ns overhead compared to 1.CPython versions tested on:
3.11
Operating systems tested on:
macOS
Linked PRs
functools.partialvectorcall with keywords #124584