summaryrefslogtreecommitdiffstats
path: root/Python
diff options
context:
space:
mode:
Diffstat (limited to 'Python')
-rw-r--r--Python/specialize.c16
1 files changed, 12 insertions, 4 deletions
diff --git a/Python/specialize.c b/Python/specialize.c
index a1666cc..c6c5027 100644
--- a/Python/specialize.c
+++ b/Python/specialize.c
@@ -1302,8 +1302,12 @@ _Py_Specialize_BinarySubscr(
PyTypeObject *container_type = Py_TYPE(container);
if (container_type == &PyList_Type) {
if (PyLong_CheckExact(sub)) {
- _py_set_opcode(instr, BINARY_SUBSCR_LIST_INT);
- goto success;
+ if (Py_SIZE(sub) == 0 || Py_SIZE(sub) == 1) {
+ _py_set_opcode(instr, BINARY_SUBSCR_LIST_INT);
+ goto success;
+ }
+ SPECIALIZATION_FAIL(BINARY_SUBSCR, SPEC_FAIL_OUT_OF_RANGE);
+ goto fail;
}
SPECIALIZATION_FAIL(BINARY_SUBSCR,
PySlice_Check(sub) ? SPEC_FAIL_SUBSCR_LIST_SLICE : SPEC_FAIL_OTHER);
@@ -1311,8 +1315,12 @@ _Py_Specialize_BinarySubscr(
}
if (container_type == &PyTuple_Type) {
if (PyLong_CheckExact(sub)) {
- _py_set_opcode(instr, BINARY_SUBSCR_TUPLE_INT);
- goto success;
+ if (Py_SIZE(sub) == 0 || Py_SIZE(sub) == 1) {
+ _py_set_opcode(instr, BINARY_SUBSCR_TUPLE_INT);
+ goto success;
+ }
+ SPECIALIZATION_FAIL(BINARY_SUBSCR, SPEC_FAIL_OUT_OF_RANGE);
+ goto fail;
}
SPECIALIZATION_FAIL(BINARY_SUBSCR,
PySlice_Check(sub) ? SPEC_FAIL_SUBSCR_TUPLE_SLICE : SPEC_FAIL_OTHER);