diff options
author | Irit Katriel <1055913+iritkatriel@users.noreply.github.com> | 2023-11-03 10:01:36 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-11-03 10:01:36 (GMT) |
commit | d49aba5a7a3c695213810a9f82715809c6332df2 (patch) | |
tree | f949b9af90ff9d697ed2836efaea5b3b3e06e34c /Include | |
parent | 7810b6981ac663b77bc9ee9dc4b1960ec6845ea7 (diff) | |
download | cpython-d49aba5a7a3c695213810a9f82715809c6332df2.zip cpython-d49aba5a7a3c695213810a9f82715809c6332df2.tar.gz cpython-d49aba5a7a3c695213810a9f82715809c6332df2.tar.bz2 |
gh-111354: Simplify _PyGen_yf by moving some of its work to the compiler and frame state (#111648)
Diffstat (limited to 'Include')
-rw-r--r-- | Include/internal/pycore_frame.h | 7 | ||||
-rw-r--r-- | Include/internal/pycore_opcode_metadata.h | 6 | ||||
-rw-r--r-- | Include/opcode_ids.h | 150 |
3 files changed, 83 insertions, 80 deletions
diff --git a/Include/internal/pycore_frame.h b/Include/internal/pycore_frame.h index ec97030..f95352f 100644 --- a/Include/internal/pycore_frame.h +++ b/Include/internal/pycore_frame.h @@ -36,13 +36,16 @@ extern PyFrameObject* _PyFrame_New_NoTrack(PyCodeObject *code); /* other API */ typedef enum _framestate { - FRAME_CREATED = -2, - FRAME_SUSPENDED = -1, + FRAME_CREATED = -3, + FRAME_SUSPENDED = -2, + FRAME_SUSPENDED_YIELD_FROM = -1, FRAME_EXECUTING = 0, FRAME_COMPLETED = 1, FRAME_CLEARED = 4 } PyFrameState; +#define FRAME_STATE_SUSPENDED(S) ((S) == FRAME_SUSPENDED || (S) == FRAME_SUSPENDED_YIELD_FROM) + enum _frameowner { FRAME_OWNED_BY_THREAD = 0, FRAME_OWNED_BY_GENERATOR = 1, diff --git a/Include/internal/pycore_opcode_metadata.h b/Include/internal/pycore_opcode_metadata.h index c99ccb8..ed38ed0 100644 --- a/Include/internal/pycore_opcode_metadata.h +++ b/Include/internal/pycore_opcode_metadata.h @@ -1525,8 +1525,8 @@ const struct opcode_metadata _PyOpcode_opcode_metadata[OPCODE_METADATA_SIZE] = { [_SEND] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_JUMP_FLAG | HAS_ERROR_FLAG }, [SEND] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_JUMP_FLAG | HAS_ERROR_FLAG }, [SEND_GEN] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_DEOPT_FLAG }, - [INSTRUMENTED_YIELD_VALUE] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG }, - [YIELD_VALUE] = { true, INSTR_FMT_IX, 0 }, + [INSTRUMENTED_YIELD_VALUE] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG }, + [YIELD_VALUE] = { true, INSTR_FMT_IB, HAS_ARG_FLAG }, [POP_EXCEPT] = { true, INSTR_FMT_IX, 0 }, [RERAISE] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG }, [END_ASYNC_FOR] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG }, @@ -2043,7 +2043,6 @@ const char *const _PyOpcode_OpName[268] = { [UNARY_NEGATIVE] = "UNARY_NEGATIVE", [UNARY_NOT] = "UNARY_NOT", [WITH_EXCEPT_START] = "WITH_EXCEPT_START", - [YIELD_VALUE] = "YIELD_VALUE", [BINARY_OP] = "BINARY_OP", [BUILD_CONST_KEY_MAP] = "BUILD_CONST_KEY_MAP", [BUILD_LIST] = "BUILD_LIST", @@ -2117,6 +2116,7 @@ const char *const _PyOpcode_OpName[268] = { [SWAP] = "SWAP", [UNPACK_EX] = "UNPACK_EX", [UNPACK_SEQUENCE] = "UNPACK_SEQUENCE", + [YIELD_VALUE] = "YIELD_VALUE", [BINARY_OP_ADD_FLOAT] = "BINARY_OP_ADD_FLOAT", [BINARY_OP_ADD_INT] = "BINARY_OP_ADD_INT", [BINARY_OP_ADD_UNICODE] = "BINARY_OP_ADD_UNICODE", diff --git a/Include/opcode_ids.h b/Include/opcode_ids.h index 3c23717..ba25bd4 100644 --- a/Include/opcode_ids.h +++ b/Include/opcode_ids.h @@ -55,81 +55,81 @@ extern "C" { #define UNARY_NEGATIVE 42 #define UNARY_NOT 43 #define WITH_EXCEPT_START 44 -#define YIELD_VALUE 45 -#define HAVE_ARGUMENT 46 -#define BINARY_OP 46 -#define BUILD_CONST_KEY_MAP 47 -#define BUILD_LIST 48 -#define BUILD_MAP 49 -#define BUILD_SET 50 -#define BUILD_SLICE 51 -#define BUILD_STRING 52 -#define BUILD_TUPLE 53 -#define CALL 54 -#define CALL_FUNCTION_EX 55 -#define CALL_INTRINSIC_1 56 -#define CALL_INTRINSIC_2 57 -#define CALL_KW 58 -#define COMPARE_OP 59 -#define CONTAINS_OP 60 -#define CONVERT_VALUE 61 -#define COPY 62 -#define COPY_FREE_VARS 63 -#define DELETE_ATTR 64 -#define DELETE_DEREF 65 -#define DELETE_FAST 66 -#define DELETE_GLOBAL 67 -#define DELETE_NAME 68 -#define DICT_MERGE 69 -#define DICT_UPDATE 70 -#define ENTER_EXECUTOR 71 -#define EXTENDED_ARG 72 -#define FOR_ITER 73 -#define GET_AWAITABLE 74 -#define IMPORT_FROM 75 -#define IMPORT_NAME 76 -#define IS_OP 77 -#define JUMP_BACKWARD 78 -#define JUMP_BACKWARD_NO_INTERRUPT 79 -#define JUMP_FORWARD 80 -#define LIST_APPEND 81 -#define LIST_EXTEND 82 -#define LOAD_ATTR 83 -#define LOAD_CONST 84 -#define LOAD_DEREF 85 -#define LOAD_FAST 86 -#define LOAD_FAST_AND_CLEAR 87 -#define LOAD_FAST_CHECK 88 -#define LOAD_FAST_LOAD_FAST 89 -#define LOAD_FROM_DICT_OR_DEREF 90 -#define LOAD_FROM_DICT_OR_GLOBALS 91 -#define LOAD_GLOBAL 92 -#define LOAD_NAME 93 -#define LOAD_SUPER_ATTR 94 -#define MAKE_CELL 95 -#define MAP_ADD 96 -#define MATCH_CLASS 97 -#define POP_JUMP_IF_FALSE 98 -#define POP_JUMP_IF_NONE 99 -#define POP_JUMP_IF_NOT_NONE 100 -#define POP_JUMP_IF_TRUE 101 -#define RAISE_VARARGS 102 -#define RERAISE 103 -#define RETURN_CONST 104 -#define SEND 105 -#define SET_ADD 106 -#define SET_FUNCTION_ATTRIBUTE 107 -#define SET_UPDATE 108 -#define STORE_ATTR 109 -#define STORE_DEREF 110 -#define STORE_FAST 111 -#define STORE_FAST_LOAD_FAST 112 -#define STORE_FAST_STORE_FAST 113 -#define STORE_GLOBAL 114 -#define STORE_NAME 115 -#define SWAP 116 -#define UNPACK_EX 117 -#define UNPACK_SEQUENCE 118 +#define HAVE_ARGUMENT 45 +#define BINARY_OP 45 +#define BUILD_CONST_KEY_MAP 46 +#define BUILD_LIST 47 +#define BUILD_MAP 48 +#define BUILD_SET 49 +#define BUILD_SLICE 50 +#define BUILD_STRING 51 +#define BUILD_TUPLE 52 +#define CALL 53 +#define CALL_FUNCTION_EX 54 +#define CALL_INTRINSIC_1 55 +#define CALL_INTRINSIC_2 56 +#define CALL_KW 57 +#define COMPARE_OP 58 +#define CONTAINS_OP 59 +#define CONVERT_VALUE 60 +#define COPY 61 +#define COPY_FREE_VARS 62 +#define DELETE_ATTR 63 +#define DELETE_DEREF 64 +#define DELETE_FAST 65 +#define DELETE_GLOBAL 66 +#define DELETE_NAME 67 +#define DICT_MERGE 68 +#define DICT_UPDATE 69 +#define ENTER_EXECUTOR 70 +#define EXTENDED_ARG 71 +#define FOR_ITER 72 +#define GET_AWAITABLE 73 +#define IMPORT_FROM 74 +#define IMPORT_NAME 75 +#define IS_OP 76 +#define JUMP_BACKWARD 77 +#define JUMP_BACKWARD_NO_INTERRUPT 78 +#define JUMP_FORWARD 79 +#define LIST_APPEND 80 +#define LIST_EXTEND 81 +#define LOAD_ATTR 82 +#define LOAD_CONST 83 +#define LOAD_DEREF 84 +#define LOAD_FAST 85 +#define LOAD_FAST_AND_CLEAR 86 +#define LOAD_FAST_CHECK 87 +#define LOAD_FAST_LOAD_FAST 88 +#define LOAD_FROM_DICT_OR_DEREF 89 +#define LOAD_FROM_DICT_OR_GLOBALS 90 +#define LOAD_GLOBAL 91 +#define LOAD_NAME 92 +#define LOAD_SUPER_ATTR 93 +#define MAKE_CELL 94 +#define MAP_ADD 95 +#define MATCH_CLASS 96 +#define POP_JUMP_IF_FALSE 97 +#define POP_JUMP_IF_NONE 98 +#define POP_JUMP_IF_NOT_NONE 99 +#define POP_JUMP_IF_TRUE 100 +#define RAISE_VARARGS 101 +#define RERAISE 102 +#define RETURN_CONST 103 +#define SEND 104 +#define SET_ADD 105 +#define SET_FUNCTION_ATTRIBUTE 106 +#define SET_UPDATE 107 +#define STORE_ATTR 108 +#define STORE_DEREF 109 +#define STORE_FAST 110 +#define STORE_FAST_LOAD_FAST 111 +#define STORE_FAST_STORE_FAST 112 +#define STORE_GLOBAL 113 +#define STORE_NAME 114 +#define SWAP 115 +#define UNPACK_EX 116 +#define UNPACK_SEQUENCE 117 +#define YIELD_VALUE 118 #define RESUME 149 #define BINARY_OP_ADD_FLOAT 150 #define BINARY_OP_ADD_INT 151 |