summaryrefslogtreecommitdiffstats
path: root/Include
diff options
context:
space:
mode:
authorIrit Katriel <1055913+iritkatriel@users.noreply.github.com>2023-11-03 10:01:36 (GMT)
committerGitHub <noreply@github.com>2023-11-03 10:01:36 (GMT)
commitd49aba5a7a3c695213810a9f82715809c6332df2 (patch)
treef949b9af90ff9d697ed2836efaea5b3b3e06e34c /Include
parent7810b6981ac663b77bc9ee9dc4b1960ec6845ea7 (diff)
downloadcpython-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.h7
-rw-r--r--Include/internal/pycore_opcode_metadata.h6
-rw-r--r--Include/opcode_ids.h150
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