| 
									
										
										
										
											2009-01-25 16:34:23 +00:00
										 |  |  | static void *opcode_targets[256] = { | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&TARGET_POP_TOP, | 
					
						
							|  |  |  |     &&TARGET_ROT_TWO, | 
					
						
							|  |  |  |     &&TARGET_ROT_THREE, | 
					
						
							|  |  |  |     &&TARGET_DUP_TOP, | 
					
						
							| 
									
										
										
										
											2010-09-04 18:43:52 +00:00
										 |  |  |     &&TARGET_DUP_TOP_TWO, | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&TARGET_NOP, | 
					
						
							|  |  |  |     &&TARGET_UNARY_POSITIVE, | 
					
						
							|  |  |  |     &&TARGET_UNARY_NEGATIVE, | 
					
						
							|  |  |  |     &&TARGET_UNARY_NOT, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&TARGET_UNARY_INVERT, | 
					
						
							| 
									
										
										
										
											2014-04-09 23:55:56 -04:00
										 |  |  |     &&TARGET_BINARY_MATRIX_MULTIPLY, | 
					
						
							|  |  |  |     &&TARGET_INPLACE_MATRIX_MULTIPLY, | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&TARGET_BINARY_POWER, | 
					
						
							|  |  |  |     &&TARGET_BINARY_MULTIPLY, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&TARGET_BINARY_MODULO, | 
					
						
							|  |  |  |     &&TARGET_BINARY_ADD, | 
					
						
							|  |  |  |     &&TARGET_BINARY_SUBTRACT, | 
					
						
							|  |  |  |     &&TARGET_BINARY_SUBSCR, | 
					
						
							|  |  |  |     &&TARGET_BINARY_FLOOR_DIVIDE, | 
					
						
							|  |  |  |     &&TARGET_BINARY_TRUE_DIVIDE, | 
					
						
							|  |  |  |     &&TARGET_INPLACE_FLOOR_DIVIDE, | 
					
						
							|  |  |  |     &&TARGET_INPLACE_TRUE_DIVIDE, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							| 
									
										
										
										
											2015-05-11 22:57:16 -04:00
										 |  |  |     &&TARGET_GET_AITER, | 
					
						
							|  |  |  |     &&TARGET_GET_ANEXT, | 
					
						
							|  |  |  |     &&TARGET_BEFORE_ASYNC_WITH, | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     &&_unknown_opcode, | 
					
						
							| 
									
										
										
										
											2015-05-28 14:40:08 -05:00
										 |  |  |     &&_unknown_opcode, | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     &&TARGET_INPLACE_ADD, | 
					
						
							|  |  |  |     &&TARGET_INPLACE_SUBTRACT, | 
					
						
							|  |  |  |     &&TARGET_INPLACE_MULTIPLY, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&TARGET_INPLACE_MODULO, | 
					
						
							|  |  |  |     &&TARGET_STORE_SUBSCR, | 
					
						
							|  |  |  |     &&TARGET_DELETE_SUBSCR, | 
					
						
							|  |  |  |     &&TARGET_BINARY_LSHIFT, | 
					
						
							|  |  |  |     &&TARGET_BINARY_RSHIFT, | 
					
						
							|  |  |  |     &&TARGET_BINARY_AND, | 
					
						
							|  |  |  |     &&TARGET_BINARY_XOR, | 
					
						
							|  |  |  |     &&TARGET_BINARY_OR, | 
					
						
							|  |  |  |     &&TARGET_INPLACE_POWER, | 
					
						
							|  |  |  |     &&TARGET_GET_ITER, | 
					
						
							| 
									
										
											  
											
												Issue #24400: Introduce a distinct type for 'async def' coroutines.
Summary of changes:
1. Coroutines now have a distinct, separate from generators
   type at the C level: PyGen_Type, and a new typedef PyCoroObject.
   PyCoroObject shares the initial segment of struct layout with
   PyGenObject, making it possible to reuse existing generators
   machinery.  The new type is exposed as 'types.CoroutineType'.
   As a consequence of having a new type, CO_GENERATOR flag is
   no longer applied to coroutines.
2. Having a separate type for coroutines made it possible to add
   an __await__ method to the type.  Although it is not used by the
   interpreter (see details on that below), it makes coroutines
   naturally (without using __instancecheck__) conform to
   collections.abc.Coroutine and collections.abc.Awaitable ABCs.
   [The __instancecheck__ is still used for generator-based
   coroutines, as we don't want to add __await__ for generators.]
3. Add new opcode: GET_YIELD_FROM_ITER.  The opcode is needed to
   allow passing native coroutines to the YIELD_FROM opcode.
   Before this change, 'yield from o' expression was compiled to:
      (o)
      GET_ITER
      LOAD_CONST
      YIELD_FROM
   Now, we use GET_YIELD_FROM_ITER instead of GET_ITER.
   The reason for adding a new opcode is that GET_ITER is used
   in some contexts (such as 'for .. in' loops) where passing
   a coroutine object is invalid.
4. Add two new introspection functions to the inspec module:
   getcoroutinestate(c) and getcoroutinelocals(c).
5. inspect.iscoroutine(o) is updated to test if 'o' is a native
   coroutine object.  Before this commit it used abc.Coroutine,
   and it was requested to update inspect.isgenerator(o) to use
   abc.Generator; it was decided, however, that inspect functions
   should really be tailored for checking for native types.
6. sys.set_coroutine_wrapper(w) API is updated to work with only
   native coroutines.  Since types.coroutine decorator supports
   any type of callables now, it would be confusing that it does
   not work for all types of coroutines.
7. Exceptions logic in generators C implementation was updated
   to raise clearer messages for coroutines:
   Before: TypeError("generator raised StopIteration")
   After: TypeError("coroutine raised StopIteration")
											
										 
											2015-06-22 12:19:30 -04:00
										 |  |  |     &&TARGET_GET_YIELD_FROM_ITER, | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     &&TARGET_PRINT_EXPR, | 
					
						
							|  |  |  |     &&TARGET_LOAD_BUILD_CLASS, | 
					
						
							| 
									
										
										
										
											2012-01-13 21:43:40 +10:00
										 |  |  |     &&TARGET_YIELD_FROM, | 
					
						
							| 
									
										
										
										
											2015-05-11 22:57:16 -04:00
										 |  |  |     &&TARGET_GET_AWAITABLE, | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&TARGET_INPLACE_LSHIFT, | 
					
						
							|  |  |  |     &&TARGET_INPLACE_RSHIFT, | 
					
						
							|  |  |  |     &&TARGET_INPLACE_AND, | 
					
						
							|  |  |  |     &&TARGET_INPLACE_XOR, | 
					
						
							|  |  |  |     &&TARGET_INPLACE_OR, | 
					
						
							|  |  |  |     &&TARGET_BREAK_LOOP, | 
					
						
							| 
									
										
										
										
											2015-05-11 22:57:16 -04:00
										 |  |  |     &&TARGET_WITH_CLEANUP_START, | 
					
						
							|  |  |  |     &&TARGET_WITH_CLEANUP_FINISH, | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     &&TARGET_RETURN_VALUE, | 
					
						
							|  |  |  |     &&TARGET_IMPORT_STAR, | 
					
						
							| 
									
										
										
										
											2016-09-08 20:50:03 -07:00
										 |  |  |     &&TARGET_SETUP_ANNOTATIONS, | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     &&TARGET_YIELD_VALUE, | 
					
						
							|  |  |  |     &&TARGET_POP_BLOCK, | 
					
						
							|  |  |  |     &&TARGET_END_FINALLY, | 
					
						
							|  |  |  |     &&TARGET_POP_EXCEPT, | 
					
						
							|  |  |  |     &&TARGET_STORE_NAME, | 
					
						
							|  |  |  |     &&TARGET_DELETE_NAME, | 
					
						
							|  |  |  |     &&TARGET_UNPACK_SEQUENCE, | 
					
						
							|  |  |  |     &&TARGET_FOR_ITER, | 
					
						
							|  |  |  |     &&TARGET_UNPACK_EX, | 
					
						
							|  |  |  |     &&TARGET_STORE_ATTR, | 
					
						
							|  |  |  |     &&TARGET_DELETE_ATTR, | 
					
						
							|  |  |  |     &&TARGET_STORE_GLOBAL, | 
					
						
							|  |  |  |     &&TARGET_DELETE_GLOBAL, | 
					
						
							| 
									
										
										
										
											2010-09-04 18:43:52 +00:00
										 |  |  |     &&_unknown_opcode, | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     &&TARGET_LOAD_CONST, | 
					
						
							|  |  |  |     &&TARGET_LOAD_NAME, | 
					
						
							|  |  |  |     &&TARGET_BUILD_TUPLE, | 
					
						
							|  |  |  |     &&TARGET_BUILD_LIST, | 
					
						
							|  |  |  |     &&TARGET_BUILD_SET, | 
					
						
							|  |  |  |     &&TARGET_BUILD_MAP, | 
					
						
							|  |  |  |     &&TARGET_LOAD_ATTR, | 
					
						
							|  |  |  |     &&TARGET_COMPARE_OP, | 
					
						
							|  |  |  |     &&TARGET_IMPORT_NAME, | 
					
						
							|  |  |  |     &&TARGET_IMPORT_FROM, | 
					
						
							|  |  |  |     &&TARGET_JUMP_FORWARD, | 
					
						
							|  |  |  |     &&TARGET_JUMP_IF_FALSE_OR_POP, | 
					
						
							|  |  |  |     &&TARGET_JUMP_IF_TRUE_OR_POP, | 
					
						
							|  |  |  |     &&TARGET_JUMP_ABSOLUTE, | 
					
						
							|  |  |  |     &&TARGET_POP_JUMP_IF_FALSE, | 
					
						
							|  |  |  |     &&TARGET_POP_JUMP_IF_TRUE, | 
					
						
							|  |  |  |     &&TARGET_LOAD_GLOBAL, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&TARGET_CONTINUE_LOOP, | 
					
						
							|  |  |  |     &&TARGET_SETUP_LOOP, | 
					
						
							|  |  |  |     &&TARGET_SETUP_EXCEPT, | 
					
						
							|  |  |  |     &&TARGET_SETUP_FINALLY, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&TARGET_LOAD_FAST, | 
					
						
							|  |  |  |     &&TARGET_STORE_FAST, | 
					
						
							|  |  |  |     &&TARGET_DELETE_FAST, | 
					
						
							| 
									
										
										
										
											2016-09-08 20:50:03 -07:00
										 |  |  |     &&TARGET_STORE_ANNOTATION, | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&TARGET_RAISE_VARARGS, | 
					
						
							|  |  |  |     &&TARGET_CALL_FUNCTION, | 
					
						
							|  |  |  |     &&TARGET_MAKE_FUNCTION, | 
					
						
							|  |  |  |     &&TARGET_BUILD_SLICE, | 
					
						
							| 
									
										
										
										
											2016-06-12 17:36:24 +03:00
										 |  |  |     &&_unknown_opcode, | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     &&TARGET_LOAD_CLOSURE, | 
					
						
							|  |  |  |     &&TARGET_LOAD_DEREF, | 
					
						
							|  |  |  |     &&TARGET_STORE_DEREF, | 
					
						
							| 
									
										
										
										
											2010-09-10 21:39:53 +00:00
										 |  |  |     &&TARGET_DELETE_DEREF, | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     &&_unknown_opcode, | 
					
						
							| 
									
										
										
										
											2016-09-09 10:17:08 -07:00
										 |  |  |     &&_unknown_opcode, | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     &&TARGET_CALL_FUNCTION_KW, | 
					
						
							| 
									
										
										
										
											2016-09-09 10:17:08 -07:00
										 |  |  |     &&TARGET_CALL_FUNCTION_EX, | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     &&TARGET_SETUP_WITH, | 
					
						
							|  |  |  |     &&TARGET_EXTENDED_ARG, | 
					
						
							|  |  |  |     &&TARGET_LIST_APPEND, | 
					
						
							|  |  |  |     &&TARGET_SET_ADD, | 
					
						
							|  |  |  |     &&TARGET_MAP_ADD, | 
					
						
							| 
									
										
										
										
											2013-04-30 09:41:40 -04:00
										 |  |  |     &&TARGET_LOAD_CLASSDEREF, | 
					
						
							| 
									
										
										
										
											2015-05-05 20:16:41 -04:00
										 |  |  |     &&TARGET_BUILD_LIST_UNPACK, | 
					
						
							|  |  |  |     &&TARGET_BUILD_MAP_UNPACK, | 
					
						
							|  |  |  |     &&TARGET_BUILD_MAP_UNPACK_WITH_CALL, | 
					
						
							|  |  |  |     &&TARGET_BUILD_TUPLE_UNPACK, | 
					
						
							|  |  |  |     &&TARGET_BUILD_SET_UNPACK, | 
					
						
							| 
									
										
										
										
											2015-05-11 22:57:16 -04:00
										 |  |  |     &&TARGET_SETUP_ASYNC_WITH, | 
					
						
							| 
									
										
										
										
											2015-11-03 12:45:05 -05:00
										 |  |  |     &&TARGET_FORMAT_VALUE, | 
					
						
							| 
									
										
										
										
											2016-06-12 00:39:41 +03:00
										 |  |  |     &&TARGET_BUILD_CONST_KEY_MAP, | 
					
						
							| 
									
										
										
										
											2016-09-06 22:07:53 +03:00
										 |  |  |     &&TARGET_BUILD_STRING, | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode, | 
					
						
							|  |  |  |     &&_unknown_opcode | 
					
						
							| 
									
										
										
										
											2009-01-25 16:34:23 +00:00
										 |  |  | }; |