Skip to content

Commit 1a36345

Browse files
committed
specify failure for method descriptor
1 parent 532aa4e commit 1a36345

File tree

1 file changed

+40
-17
lines changed

1 file changed

+40
-17
lines changed

Python/specialize.c

Lines changed: 40 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -396,19 +396,21 @@ _PyCode_Quicken(PyCodeObject *code)
396396
#define SPEC_FAIL_CALL_CMETHOD 12
397397
#define SPEC_FAIL_CALL_CFUNC_VARARGS 13
398398
#define SPEC_FAIL_CALL_CFUNC_VARARGS_KEYWORDS 14
399-
#define SPEC_FAIL_CALL_CFUNC_FASTCALL_KEYWORDS 15
400-
#define SPEC_FAIL_CALL_CFUNC_NOARGS 16
401-
#define SPEC_FAIL_CALL_BAD_CALL_FLAGS 17
402-
#define SPEC_FAIL_CALL_CFUNC_METHOD_FASTCALL_KEYWORDS 18
403-
#define SPEC_FAIL_CALL_PYTHON_CLASS 19
404-
#define SPEC_FAIL_CALL_PEP_523 20
405-
#define SPEC_FAIL_CALL_BOUND_METHOD 21
406-
#define SPEC_FAIL_CALL_STR 22
407-
#define SPEC_FAIL_CALL_CLASS_NO_VECTORCALL 23
408-
#define SPEC_FAIL_CALL_CLASS_MUTABLE 24
409-
#define SPEC_FAIL_CALL_KWNAMES 25
410-
#define SPEC_FAIL_CALL_METHOD_WRAPPER 26
411-
#define SPEC_FAIL_CALL_OPERATOR_WRAPPER 27
399+
#define SPEC_FAIL_CALL_CFUNC_NOARGS 15
400+
#define SPEC_FAIL_CALL_CFUNC_METHOD_FASTCALL_KEYWORDS 16
401+
#define SPEC_FAIL_CALL_METH_DESCR_VARARGS 17
402+
#define SPEC_FAIL_CALL_METH_DESCR_VARARGS_KEYWORDS 18
403+
#define SPEC_FAIL_CALL_METH_DESCR_METHOD_FASTCALL_KEYWORDS 19
404+
#define SPEC_FAIL_CALL_BAD_CALL_FLAGS 20
405+
#define SPEC_FAIL_CALL_PYTHON_CLASS 21
406+
#define SPEC_FAIL_CALL_PEP_523 22
407+
#define SPEC_FAIL_CALL_BOUND_METHOD 23
408+
#define SPEC_FAIL_CALL_STR 24
409+
#define SPEC_FAIL_CALL_CLASS_NO_VECTORCALL 25
410+
#define SPEC_FAIL_CALL_CLASS_MUTABLE 26
411+
#define SPEC_FAIL_CALL_KWNAMES 27
412+
#define SPEC_FAIL_CALL_METHOD_WRAPPER 28
413+
#define SPEC_FAIL_CALL_OPERATOR_WRAPPER 29
412414

413415
/* COMPARE_OP */
414416
#define SPEC_FAIL_COMPARE_OP_DIFFERENT_TYPES 12
@@ -1518,15 +1520,36 @@ builtin_call_fail_kind(int ml_flags)
15181520
return SPEC_FAIL_CALL_CFUNC_VARARGS;
15191521
case METH_VARARGS | METH_KEYWORDS:
15201522
return SPEC_FAIL_CALL_CFUNC_VARARGS_KEYWORDS;
1521-
case METH_FASTCALL | METH_KEYWORDS:
1522-
return SPEC_FAIL_CALL_CFUNC_FASTCALL_KEYWORDS;
15231523
case METH_NOARGS:
15241524
return SPEC_FAIL_CALL_CFUNC_NOARGS;
15251525
case METH_METHOD | METH_FASTCALL | METH_KEYWORDS:
15261526
return SPEC_FAIL_CALL_CFUNC_METHOD_FASTCALL_KEYWORDS;
15271527
/* These cases should be optimized, but return "other" just in case */
15281528
case METH_O:
15291529
case METH_FASTCALL:
1530+
case METH_FASTCALL | METH_KEYWORDS:
1531+
return SPEC_FAIL_OTHER;
1532+
default:
1533+
return SPEC_FAIL_CALL_BAD_CALL_FLAGS;
1534+
}
1535+
}
1536+
1537+
static int
1538+
meth_descr_call_fail_kind(int ml_flags)
1539+
{
1540+
switch (ml_flags & (METH_VARARGS | METH_FASTCALL | METH_NOARGS | METH_O |
1541+
METH_KEYWORDS | METH_METHOD)) {
1542+
case METH_VARARGS:
1543+
return SPEC_FAIL_CALL_METH_DESCR_VARARGS;
1544+
case METH_VARARGS | METH_KEYWORDS:
1545+
return SPEC_FAIL_CALL_METH_DESCR_VARARGS_KEYWORDS;
1546+
case METH_METHOD | METH_FASTCALL | METH_KEYWORDS:
1547+
return SPEC_FAIL_CALL_METH_DESCR_METHOD_FASTCALL_KEYWORDS;
1548+
/* These cases should be optimized, but return "other" just in case */
1549+
case METH_NOARGS:
1550+
case METH_O:
1551+
case METH_FASTCALL:
1552+
case METH_FASTCALL | METH_KEYWORDS:
15301553
return SPEC_FAIL_OTHER;
15311554
default:
15321555
return SPEC_FAIL_CALL_BAD_CALL_FLAGS;
@@ -1575,12 +1598,12 @@ specialize_method_descriptor(PyMethodDescrObject *descr, _Py_CODEUNIT *instr,
15751598
_py_set_opcode(instr, CALL_NO_KW_METHOD_DESCRIPTOR_FAST);
15761599
return 0;
15771600
}
1578-
case METH_FASTCALL|METH_KEYWORDS: {
1601+
case METH_FASTCALL | METH_KEYWORDS: {
15791602
_py_set_opcode(instr, CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS);
15801603
return 0;
15811604
}
15821605
}
1583-
SPECIALIZATION_FAIL(CALL, builtin_call_fail_kind(descr->d_method->ml_flags));
1606+
SPECIALIZATION_FAIL(CALL, meth_descr_call_fail_kind(descr->d_method->ml_flags));
15841607
return -1;
15851608
}
15861609

0 commit comments

Comments
 (0)