Open
Description
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_fallback
there is no mechanism to set it back.
def func(a, b, c=0):
return a - b - c
p2 = partial(func, 1, c=1)
In [13]: print(p2(2)) # -1
vectorcall
call
-2
In [14]:
In [14]: print(p2(2)) # -1
call
-2
In [15]: del p2.keywords['c']
In [16]: print(p2(2)) # -1
call
-1
I see 3 possibilities:
- Set additional flag in
partial_setvectorcall
(pto->hasvcall
) storing state whethervectorcall
is supported. Then implement fallback inpartial_call
in the same manner as it looks now inpartial_vectorcall
- Re-setting vectorcall after
_PyObject_MakeTpCall
inpartial_vectorcall_fallback
. So thatpartial_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