@@ -3119,8 +3119,41 @@ _Py_Specialize_ContainsOp(_PyStackRef value_st, _Py_CODEUNIT *instr)
3119
3119
void
3120
3120
_Py_GatherStats_GetIter (_PyStackRef iterable )
3121
3121
{
3122
- PyObject * obj = PyStackRef_AsPyObjectBorrow (iterable );
3123
- int kind = _PySpecialization_ClassifyIterator (obj );
3122
+ PyTypeObject * tp = PyStackRef_TYPE (iterable );
3123
+ int kind = SPEC_FAIL_OTHER ;
3124
+ if (tp == & PyTuple_Type ) {
3125
+ kind = SPEC_FAIL_ITER_TUPLE ;
3126
+ }
3127
+ else if (tp == & PyList_Type ) {
3128
+ kind = SPEC_FAIL_ITER_LIST ;
3129
+ }
3130
+ else if (tp == & PyDict_Type ) {
3131
+ kind = SPEC_FAIL_ITER_DICT_KEYS ;
3132
+ }
3133
+ else if (tp == & PySet_Type ) {
3134
+ kind = SPEC_FAIL_ITER_SET ;
3135
+ }
3136
+ else if (tp == & PyBytes_Type ) {
3137
+ kind = SPEC_FAIL_ITER_BYTES ;
3138
+ }
3139
+ else if (tp == & PyEnum_Type ) {
3140
+ kind = SPEC_FAIL_ITER_ENUMERATE ;
3141
+ }
3142
+ else if (tp == & PyUnicode_Type ) {
3143
+ kind = SPEC_FAIL_ITER_STRING ;
3144
+ }
3145
+ else if (tp == & PyGen_Type ) {
3146
+ kind = SPEC_FAIL_ITER_GENERATOR ;
3147
+ }
3148
+ else if (tp == & PyCoro_Type ) {
3149
+ kind = SPEC_FAIL_ITER_COROUTINE ;
3150
+ }
3151
+ else if (tp == & PyAsyncGen_Type ) {
3152
+ kind = SPEC_FAIL_ITER_ASYNC_GENERATOR ;
3153
+ }
3154
+ else if (tp == & _PyAsyncGenASend_Type ) {
3155
+ kind = SPEC_FAIL_ITER_ASYNC_GENERATOR_SEND ;
3156
+ }
3124
3157
SPECIALIZATION_FAIL (GET_ITER , kind );
3125
3158
}
3126
3159
#endif
0 commit comments