Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork33.7k
Closed
Description
Bug report
Bug description:
The comment here
cpython/Modules/_functoolsmodule.c
Line 221 in100c7ab
| /* 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 whethervectorcallis supported. Then implement fallback inpartial_callin the same manner as it looks now inpartial_vectorcall - Re-setting vectorcall after
_PyObject_MakeTpCallinpartial_vectorcall_fallback. So thatpartial_vectorcallwill 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