https://github.com/python/cpython/commit/8c9ef8f1f8fff3403572d50e77043c4bdc3aaf27
commit: 8c9ef8f1f8fff3403572d50e77043c4bdc3aaf27
branch: main
author: Irit Katriel <1055913+iritkatr...@users.noreply.github.com>
committer: iritkatriel <1055913+iritkatr...@users.noreply.github.com>
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 -- python-checkins@python.org
To unsubscribe send an email to python-checkins-le...@python.org
https://mail.python.org/mailman3/lists/python-checkins.python.org/
Member address: arch...@mail-archive.com

Reply via email to