[Python-Dev] PEP 590: vectorcall without tp_call

Petr Viktorin encukou at gmail.com
Wed May 29 09:29:35 EDT 2019

On 5/29/19 2:25 PM, Jeroen Demeyer wrote:
> Hello,
> I have one implementation question about vectorcall which is not 
> specified in PEP 590: what should happen if a type implements vectorcall 
> (i.e. _Py_TPFLAGS_HAVE_VECTORCALL is set) but doesn't set tp_call (i.e. 
> tp_call == NULL)? I see the following possibilities:
> 1. Ignore this problem/assume that it won't happen. This would be bad, 
> since callable(obj) would be False even though obj() would succeed.
> 2. Raise SystemError.
> 3. Automatically set tp_call to PyVectorcall_Call.
> I would vote for 3 since it's the most user-friendly option. There is 
> also no way how it could be wrong: it ensures that tp_call and 
> vectorcall are consistent.

That sounds like a good idea for PyType_FromSpec.

For static types I either wouldn't bother at all, or only check in debug 
  builds and fail with Py_FatalError.

More information about the Python-Dev mailing list