@@ -436,27 +436,28 @@ _PyCode_Quicken(PyCodeObject *code)
436
436
#define SPEC_FAIL_COMPARE_OP_FLOAT_LONG 21
437
437
#define SPEC_FAIL_COMPARE_OP_LONG_FLOAT 22
438
438
439
- /* FOR_ITER */
440
- #define SPEC_FAIL_FOR_ITER_GENERATOR 10
441
- #define SPEC_FAIL_FOR_ITER_COROUTINE 11
442
- #define SPEC_FAIL_FOR_ITER_ASYNC_GENERATOR 12
443
- #define SPEC_FAIL_FOR_ITER_LIST 13
444
- #define SPEC_FAIL_FOR_ITER_TUPLE 14
445
- #define SPEC_FAIL_FOR_ITER_SET 15
446
- #define SPEC_FAIL_FOR_ITER_STRING 16
447
- #define SPEC_FAIL_FOR_ITER_BYTES 17
448
- #define SPEC_FAIL_FOR_ITER_RANGE 18
449
- #define SPEC_FAIL_FOR_ITER_ITERTOOLS 19
450
- #define SPEC_FAIL_FOR_ITER_DICT_KEYS 20
451
- #define SPEC_FAIL_FOR_ITER_DICT_ITEMS 21
452
- #define SPEC_FAIL_FOR_ITER_DICT_VALUES 22
453
- #define SPEC_FAIL_FOR_ITER_ENUMERATE 23
454
- #define SPEC_FAIL_FOR_ITER_MAP 24
455
- #define SPEC_FAIL_FOR_ITER_ZIP 25
456
- #define SPEC_FAIL_FOR_ITER_SEQ_ITER 26
457
- #define SPEC_FAIL_FOR_ITER_REVERSED_LIST 27
458
- #define SPEC_FAIL_FOR_ITER_CALLABLE 28
459
- #define SPEC_FAIL_FOR_ITER_ASCII_STRING 29
439
+ /* FOR_ITER and SEND */
440
+ #define SPEC_FAIL_ITER_GENERATOR 10
441
+ #define SPEC_FAIL_ITER_COROUTINE 11
442
+ #define SPEC_FAIL_ITER_ASYNC_GENERATOR 12
443
+ #define SPEC_FAIL_ITER_LIST 13
444
+ #define SPEC_FAIL_ITER_TUPLE 14
445
+ #define SPEC_FAIL_ITER_SET 15
446
+ #define SPEC_FAIL_ITER_STRING 16
447
+ #define SPEC_FAIL_ITER_BYTES 17
448
+ #define SPEC_FAIL_ITER_RANGE 18
449
+ #define SPEC_FAIL_ITER_ITERTOOLS 19
450
+ #define SPEC_FAIL_ITER_DICT_KEYS 20
451
+ #define SPEC_FAIL_ITER_DICT_ITEMS 21
452
+ #define SPEC_FAIL_ITER_DICT_VALUES 22
453
+ #define SPEC_FAIL_ITER_ENUMERATE 23
454
+ #define SPEC_FAIL_ITER_MAP 24
455
+ #define SPEC_FAIL_ITER_ZIP 25
456
+ #define SPEC_FAIL_ITER_SEQ_ITER 26
457
+ #define SPEC_FAIL_ITER_REVERSED_LIST 27
458
+ #define SPEC_FAIL_ITER_CALLABLE 28
459
+ #define SPEC_FAIL_ITER_ASCII_STRING 29
460
+ #define SPEC_FAIL_ITER_ASYNC_GENERATOR_SEND 30
460
461
461
462
// UNPACK_SEQUENCE
462
463
@@ -2122,66 +2123,69 @@ int
2122
2123
_PySpecialization_ClassifyIterator (PyObject * iter )
2123
2124
{
2124
2125
if (PyGen_CheckExact (iter )) {
2125
- return SPEC_FAIL_FOR_ITER_GENERATOR ;
2126
+ return SPEC_FAIL_ITER_GENERATOR ;
2126
2127
}
2127
2128
if (PyCoro_CheckExact (iter )) {
2128
- return SPEC_FAIL_FOR_ITER_COROUTINE ;
2129
+ return SPEC_FAIL_ITER_COROUTINE ;
2129
2130
}
2130
2131
if (PyAsyncGen_CheckExact (iter )) {
2131
- return SPEC_FAIL_FOR_ITER_ASYNC_GENERATOR ;
2132
+ return SPEC_FAIL_ITER_ASYNC_GENERATOR ;
2133
+ }
2134
+ if (PyAsyncGenASend_CheckExact (iter )) {
2135
+ return SPEC_FAIL_ITER_ASYNC_GENERATOR_SEND ;
2132
2136
}
2133
2137
PyTypeObject * t = Py_TYPE (iter );
2134
2138
if (t == & PyListIter_Type ) {
2135
- return SPEC_FAIL_FOR_ITER_LIST ;
2139
+ return SPEC_FAIL_ITER_LIST ;
2136
2140
}
2137
2141
if (t == & PyTupleIter_Type ) {
2138
- return SPEC_FAIL_FOR_ITER_TUPLE ;
2142
+ return SPEC_FAIL_ITER_TUPLE ;
2139
2143
}
2140
2144
if (t == & PyDictIterKey_Type ) {
2141
- return SPEC_FAIL_FOR_ITER_DICT_KEYS ;
2145
+ return SPEC_FAIL_ITER_DICT_KEYS ;
2142
2146
}
2143
2147
if (t == & PyDictIterValue_Type ) {
2144
- return SPEC_FAIL_FOR_ITER_DICT_VALUES ;
2148
+ return SPEC_FAIL_ITER_DICT_VALUES ;
2145
2149
}
2146
2150
if (t == & PyDictIterItem_Type ) {
2147
- return SPEC_FAIL_FOR_ITER_DICT_ITEMS ;
2151
+ return SPEC_FAIL_ITER_DICT_ITEMS ;
2148
2152
}
2149
2153
if (t == & PySetIter_Type ) {
2150
- return SPEC_FAIL_FOR_ITER_SET ;
2154
+ return SPEC_FAIL_ITER_SET ;
2151
2155
}
2152
2156
if (t == & PyUnicodeIter_Type ) {
2153
- return SPEC_FAIL_FOR_ITER_STRING ;
2157
+ return SPEC_FAIL_ITER_STRING ;
2154
2158
}
2155
2159
if (t == & PyBytesIter_Type ) {
2156
- return SPEC_FAIL_FOR_ITER_BYTES ;
2160
+ return SPEC_FAIL_ITER_BYTES ;
2157
2161
}
2158
2162
if (t == & PyRangeIter_Type ) {
2159
- return SPEC_FAIL_FOR_ITER_RANGE ;
2163
+ return SPEC_FAIL_ITER_RANGE ;
2160
2164
}
2161
2165
if (t == & PyEnum_Type ) {
2162
- return SPEC_FAIL_FOR_ITER_ENUMERATE ;
2166
+ return SPEC_FAIL_ITER_ENUMERATE ;
2163
2167
}
2164
2168
if (t == & PyMap_Type ) {
2165
- return SPEC_FAIL_FOR_ITER_MAP ;
2169
+ return SPEC_FAIL_ITER_MAP ;
2166
2170
}
2167
2171
if (t == & PyZip_Type ) {
2168
- return SPEC_FAIL_FOR_ITER_ZIP ;
2172
+ return SPEC_FAIL_ITER_ZIP ;
2169
2173
}
2170
2174
if (t == & PySeqIter_Type ) {
2171
- return SPEC_FAIL_FOR_ITER_SEQ_ITER ;
2175
+ return SPEC_FAIL_ITER_SEQ_ITER ;
2172
2176
}
2173
2177
if (t == & PyListRevIter_Type ) {
2174
- return SPEC_FAIL_FOR_ITER_REVERSED_LIST ;
2178
+ return SPEC_FAIL_ITER_REVERSED_LIST ;
2175
2179
}
2176
2180
if (t == & _PyUnicodeASCIIIter_Type ) {
2177
- return SPEC_FAIL_FOR_ITER_ASCII_STRING ;
2181
+ return SPEC_FAIL_ITER_ASCII_STRING ;
2178
2182
}
2179
2183
const char * name = t -> tp_name ;
2180
2184
if (strncmp (name , "itertools" , 9 ) == 0 ) {
2181
- return SPEC_FAIL_FOR_ITER_ITERTOOLS ;
2185
+ return SPEC_FAIL_ITER_ITERTOOLS ;
2182
2186
}
2183
2187
if (strncmp (name , "callable_iterator" , 17 ) == 0 ) {
2184
- return SPEC_FAIL_FOR_ITER_CALLABLE ;
2188
+ return SPEC_FAIL_ITER_CALLABLE ;
2185
2189
}
2186
2190
return SPEC_FAIL_OTHER ;
2187
2191
}
0 commit comments