Make the correct call specialization fail kind show up · Issue #99770 · python/cpython (original) (raw)

Skip to content

Provide feedback

Saved searches

Use saved searches to filter your results more quickly

Sign up

@penguin-wwy

Description

@penguin-wwy

The SPEC_FAIL_KIND is not displayed correctly due to not being adequately maintained.
e.g

| #ifdef Py_STATS | | | | | ----------------------------------------------------------- | ------------ | ------- | | | static int | | | | | builtin_call_fail_kind(int ml_flags) | | | | | { | | | | | switch (ml_flags & (METH_VARARGS | METH_FASTCALL | METH_NOARGS | METH_O | | | METH_KEYWORDS | METH_METHOD)) { | | | | | case METH_VARARGS: | | | | | return SPEC_FAIL_CALL_PYCFUNCTION; | | | | | case METH_VARARGS | METH_KEYWORDS: | | | | | return SPEC_FAIL_CALL_PYCFUNCTION_WITH_KEYWORDS; | | | | | case METH_FASTCALL | METH_KEYWORDS: | | | | | return SPEC_FAIL_CALL_PYCFUNCTION_FAST_WITH_KEYWORDS; | | | |

According to the context, METH_FASTCALL | METH_KEYWORDS flag does not cause specialization failure.
However, the method descr fail kind will also be shown as SPEC_FAIL_CALL_PYCFUNCTION, because builtin_call_fail_kind function is called incorrectly in the specialize_method_descriptor function.

I'd like to submit a PR to fix them and make them display correctly.

Linked PRs