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);
}
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);