summaryrefslogtreecommitdiffstats
path: root/Python/generated_cases.c.h
diff options
context:
space:
mode:
Diffstat (limited to 'Python/generated_cases.c.h')
-rw-r--r--Python/generated_cases.c.h24
1 files changed, 24 insertions, 0 deletions
diff --git a/Python/generated_cases.c.h b/Python/generated_cases.c.h
index 7250240..d7db8b0 100644
--- a/Python/generated_cases.c.h
+++ b/Python/generated_cases.c.h
@@ -685,6 +685,30 @@
DISPATCH();
}
+ TARGET(BINARY_SUBSCR_STR_INT) {
+ PyObject *sub;
+ PyObject *str;
+ PyObject *res;
+ sub = stack_pointer[-1];
+ str = stack_pointer[-2];
+ DEOPT_IF(!PyLong_CheckExact(sub), BINARY_SUBSCR);
+ DEOPT_IF(!PyUnicode_CheckExact(str), BINARY_SUBSCR);
+ DEOPT_IF(!_PyLong_IsNonNegativeCompact((PyLongObject *)sub), BINARY_SUBSCR);
+ Py_ssize_t index = ((PyLongObject*)sub)->long_value.ob_digit[0];
+ DEOPT_IF(PyUnicode_GET_LENGTH(str) <= index, BINARY_SUBSCR);
+ // Specialize for reading an ASCII character from any string:
+ Py_UCS4 c = PyUnicode_READ_CHAR(str, index);
+ DEOPT_IF(Py_ARRAY_LENGTH(_Py_SINGLETON(strings).ascii) <= c, BINARY_SUBSCR);
+ STAT_INC(BINARY_SUBSCR, hit);
+ res = (PyObject*)&_Py_SINGLETON(strings).ascii[c];
+ _Py_DECREF_SPECIALIZED(sub, (destructor)PyObject_Free);
+ Py_DECREF(str);
+ STACK_SHRINK(1);
+ stack_pointer[-1] = res;
+ next_instr += 1;
+ DISPATCH();
+ }
+
TARGET(BINARY_SUBSCR_TUPLE_INT) {
PyObject *sub;
PyObject *tuple;