@@ -436,27 +436,28 @@ _PyCode_Quicken(PyCodeObject *code)
436436#define SPEC_FAIL_COMPARE_OP_FLOAT_LONG 21
437437#define SPEC_FAIL_COMPARE_OP_LONG_FLOAT 22
438438
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
460461
461462// UNPACK_SEQUENCE
462463
@@ -2122,66 +2123,69 @@ int
21222123 _PySpecialization_ClassifyIterator (PyObject * iter )
21232124{
21242125 if (PyGen_CheckExact (iter )) {
2125- return SPEC_FAIL_FOR_ITER_GENERATOR ;
2126+ return SPEC_FAIL_ITER_GENERATOR ;
21262127 }
21272128 if (PyCoro_CheckExact (iter )) {
2128- return SPEC_FAIL_FOR_ITER_COROUTINE ;
2129+ return SPEC_FAIL_ITER_COROUTINE ;
21292130 }
21302131 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 ;
21322136 }
21332137 PyTypeObject * t = Py_TYPE (iter );
21342138 if (t == & PyListIter_Type ) {
2135- return SPEC_FAIL_FOR_ITER_LIST ;
2139+ return SPEC_FAIL_ITER_LIST ;
21362140 }
21372141 if (t == & PyTupleIter_Type ) {
2138- return SPEC_FAIL_FOR_ITER_TUPLE ;
2142+ return SPEC_FAIL_ITER_TUPLE ;
21392143 }
21402144 if (t == & PyDictIterKey_Type ) {
2141- return SPEC_FAIL_FOR_ITER_DICT_KEYS ;
2145+ return SPEC_FAIL_ITER_DICT_KEYS ;
21422146 }
21432147 if (t == & PyDictIterValue_Type ) {
2144- return SPEC_FAIL_FOR_ITER_DICT_VALUES ;
2148+ return SPEC_FAIL_ITER_DICT_VALUES ;
21452149 }
21462150 if (t == & PyDictIterItem_Type ) {
2147- return SPEC_FAIL_FOR_ITER_DICT_ITEMS ;
2151+ return SPEC_FAIL_ITER_DICT_ITEMS ;
21482152 }
21492153 if (t == & PySetIter_Type ) {
2150- return SPEC_FAIL_FOR_ITER_SET ;
2154+ return SPEC_FAIL_ITER_SET ;
21512155 }
21522156 if (t == & PyUnicodeIter_Type ) {
2153- return SPEC_FAIL_FOR_ITER_STRING ;
2157+ return SPEC_FAIL_ITER_STRING ;
21542158 }
21552159 if (t == & PyBytesIter_Type ) {
2156- return SPEC_FAIL_FOR_ITER_BYTES ;
2160+ return SPEC_FAIL_ITER_BYTES ;
21572161 }
21582162 if (t == & PyRangeIter_Type ) {
2159- return SPEC_FAIL_FOR_ITER_RANGE ;
2163+ return SPEC_FAIL_ITER_RANGE ;
21602164 }
21612165 if (t == & PyEnum_Type ) {
2162- return SPEC_FAIL_FOR_ITER_ENUMERATE ;
2166+ return SPEC_FAIL_ITER_ENUMERATE ;
21632167 }
21642168 if (t == & PyMap_Type ) {
2165- return SPEC_FAIL_FOR_ITER_MAP ;
2169+ return SPEC_FAIL_ITER_MAP ;
21662170 }
21672171 if (t == & PyZip_Type ) {
2168- return SPEC_FAIL_FOR_ITER_ZIP ;
2172+ return SPEC_FAIL_ITER_ZIP ;
21692173 }
21702174 if (t == & PySeqIter_Type ) {
2171- return SPEC_FAIL_FOR_ITER_SEQ_ITER ;
2175+ return SPEC_FAIL_ITER_SEQ_ITER ;
21722176 }
21732177 if (t == & PyListRevIter_Type ) {
2174- return SPEC_FAIL_FOR_ITER_REVERSED_LIST ;
2178+ return SPEC_FAIL_ITER_REVERSED_LIST ;
21752179 }
21762180 if (t == & _PyUnicodeASCIIIter_Type ) {
2177- return SPEC_FAIL_FOR_ITER_ASCII_STRING ;
2181+ return SPEC_FAIL_ITER_ASCII_STRING ;
21782182 }
21792183 const char * name = t -> tp_name ;
21802184 if (strncmp (name , "itertools" , 9 ) == 0 ) {
2181- return SPEC_FAIL_FOR_ITER_ITERTOOLS ;
2185+ return SPEC_FAIL_ITER_ITERTOOLS ;
21822186 }
21832187 if (strncmp (name , "callable_iterator" , 17 ) == 0 ) {
2184- return SPEC_FAIL_FOR_ITER_CALLABLE ;
2188+ return SPEC_FAIL_ITER_CALLABLE ;
21852189 }
21862190 return SPEC_FAIL_OTHER ;
21872191}
0 commit comments