https://github.com/python/cpython/commit/8c9ef8f1f8fff3403572d50e77043c4bdc3aaf27
commit: 8c9ef8f1f8fff3403572d50e77043c4bdc3aaf27
branch: main
author: Irit Katriel <[email protected]>
committer: iritkatriel <[email protected]>
date: 2025-04-08T08:50:51Z
summary:
gh-100239: more stats for BINARY_OP/SUBSCR specialization (#132230)
files:
M Include/cpython/pystats.h
M Python/specialize.c
diff --git a/Include/cpython/pystats.h b/Include/cpython/pystats.h
index f16391f8437ec1..7c1459bde8f1cf 100644
--- a/Include/cpython/pystats.h
+++ b/Include/cpython/pystats.h
@@ -31,7 +31,7 @@
#define PYSTATS_MAX_UOP_ID 512
-#define SPECIALIZATION_FAILURE_KINDS 44
+#define SPECIALIZATION_FAILURE_KINDS 50
/* Stats for determining who is calling PyEval_EvalFrame */
#define EVAL_CALL_TOTAL 0
diff --git a/Python/specialize.c b/Python/specialize.c
index f73f322f0c9725..498dcd3e483058 100644
--- a/Python/specialize.c
+++ b/Python/specialize.c
@@ -604,6 +604,12 @@ _PyCode_Quicken(_Py_CODEUNIT *instructions, Py_ssize_t
size, int enable_counters
#define SPEC_FAIL_BINARY_OP_SUBSCR_DEQUE 42
#define SPEC_FAIL_BINARY_OP_SUBSCR_ENUMDICT 43
#define SPEC_FAIL_BINARY_OP_SUBSCR_STACKSUMMARY 44
+#define SPEC_FAIL_BINARY_OP_SUBSCR_DEFAULTDICT 45
+#define SPEC_FAIL_BINARY_OP_SUBSCR_COUNTER 46
+#define SPEC_FAIL_BINARY_OP_SUBSCR_ORDEREDDICT 47
+#define SPEC_FAIL_BINARY_OP_SUBSCR_BYTES 48
+#define SPEC_FAIL_BINARY_OP_SUBSCR_STRUCTTIME 49
+#define SPEC_FAIL_BINARY_OP_SUBSCR_RANGE 50
/* Calls */
@@ -2370,6 +2376,14 @@ binary_op_fail_kind(int oparg, PyObject *lhs, PyObject
*rhs)
return SPEC_FAIL_BINARY_OP_SUBSCR_MAPPINGPROXY;
}
+ if (PyObject_TypeCheck(lhs, &PyBytes_Type)) {
+ return SPEC_FAIL_BINARY_OP_SUBSCR_BYTES;
+ }
+
+ if (PyObject_TypeCheck(lhs, &PyRange_Type)) {
+ return SPEC_FAIL_BINARY_OP_SUBSCR_RANGE;
+ }
+
if (strcmp(container_type->tp_name, "array.array") == 0) {
return SPEC_FAIL_BINARY_OP_SUBSCR_ARRAY;
}
@@ -2390,6 +2404,22 @@ binary_op_fail_kind(int oparg, PyObject *lhs, PyObject
*rhs)
return SPEC_FAIL_BINARY_OP_SUBSCR_STACKSUMMARY;
}
+ if (strcmp(container_type->tp_name, "collections.defaultdict") ==
0) {
+ return SPEC_FAIL_BINARY_OP_SUBSCR_DEFAULTDICT;
+ }
+
+ if (strcmp(container_type->tp_name, "Counter") == 0) {
+ return SPEC_FAIL_BINARY_OP_SUBSCR_COUNTER;
+ }
+
+ if (strcmp(container_type->tp_name, "collections.OrderedDict") ==
0) {
+ return SPEC_FAIL_BINARY_OP_SUBSCR_ORDEREDDICT;
+ }
+
+ if (strcmp(container_type->tp_name, "time.struct_time") == 0) {
+ return SPEC_FAIL_BINARY_OP_SUBSCR_STRUCTTIME;
+ }
+
if (PySlice_Check(rhs)) {
return SPEC_FAIL_BINARY_OP_SUBSCR_OTHER_SLICE;
}
_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-checkins.python.org/
Member address: [email protected]