[Python-checkins] gh-105481: split opcode_ids.h out of opcode.h so that it can be generated separately (#107866)

iritkatriel webhook-mailer at python.org
Fri Aug 11 12:42:05 EDT 2023


https://github.com/python/cpython/commit/caa41a4f1db0112690cf610bab7d9c6dce9ff1ce
commit: caa41a4f1db0112690cf610bab7d9c6dce9ff1ce
branch: main
author: Irit Katriel <1055913+iritkatriel at users.noreply.github.com>
committer: iritkatriel <1055913+iritkatriel at users.noreply.github.com>
date: 2023-08-11T17:42:01+01:00
summary:

gh-105481: split opcode_ids.h out of opcode.h so that it can be generated separately (#107866)

files:
A Include/opcode_ids.h
M .gitattributes
M Include/opcode.h
M Makefile.pre.in
M PCbuild/regen.targets
M Tools/build/generate_opcode_h.py

diff --git a/.gitattributes b/.gitattributes
index 1f2f8a4cd8735..4a072bc990f0f 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -75,6 +75,7 @@ Include/internal/pycore_opcode.h                    generated
 Include/internal/pycore_opcode_metadata.h           generated
 Include/internal/pycore_*_generated.h               generated
 Include/opcode.h                                    generated
+Include/opcode_ids.h                                generated
 Include/token.h                                     generated
 Lib/_opcode_metadata.py                             generated
 Lib/keyword.py                                      generated
diff --git a/Include/opcode.h b/Include/opcode.h
index b3d6cba63096c..e5c42d5a71828 100644
--- a/Include/opcode.h
+++ b/Include/opcode.h
@@ -6,227 +6,8 @@
 extern "C" {
 #endif
 
+#include "opcode_ids.h"
 
-/* Instruction opcodes for compiled code */
-#define CACHE                                    0
-#define POP_TOP                                  1
-#define PUSH_NULL                                2
-#define INTERPRETER_EXIT                         3
-#define END_FOR                                  4
-#define END_SEND                                 5
-#define TO_BOOL                                  6
-#define NOP                                      9
-#define UNARY_NEGATIVE                          11
-#define UNARY_NOT                               12
-#define UNARY_INVERT                            15
-#define EXIT_INIT_CHECK                         16
-#define RESERVED                                17
-#define MAKE_FUNCTION                           24
-#define BINARY_SUBSCR                           25
-#define BINARY_SLICE                            26
-#define STORE_SLICE                             27
-#define GET_LEN                                 30
-#define MATCH_MAPPING                           31
-#define MATCH_SEQUENCE                          32
-#define MATCH_KEYS                              33
-#define PUSH_EXC_INFO                           35
-#define CHECK_EXC_MATCH                         36
-#define CHECK_EG_MATCH                          37
-#define FORMAT_SIMPLE                           40
-#define FORMAT_WITH_SPEC                        41
-#define WITH_EXCEPT_START                       49
-#define GET_AITER                               50
-#define GET_ANEXT                               51
-#define BEFORE_ASYNC_WITH                       52
-#define BEFORE_WITH                             53
-#define END_ASYNC_FOR                           54
-#define CLEANUP_THROW                           55
-#define STORE_SUBSCR                            60
-#define DELETE_SUBSCR                           61
-#define GET_ITER                                68
-#define GET_YIELD_FROM_ITER                     69
-#define LOAD_BUILD_CLASS                        71
-#define LOAD_ASSERTION_ERROR                    74
-#define RETURN_GENERATOR                        75
-#define RETURN_VALUE                            83
-#define SETUP_ANNOTATIONS                       85
-#define LOAD_LOCALS                             87
-#define POP_EXCEPT                              89
-#define STORE_NAME                              90
-#define DELETE_NAME                             91
-#define UNPACK_SEQUENCE                         92
-#define FOR_ITER                                93
-#define UNPACK_EX                               94
-#define STORE_ATTR                              95
-#define DELETE_ATTR                             96
-#define STORE_GLOBAL                            97
-#define DELETE_GLOBAL                           98
-#define SWAP                                    99
-#define LOAD_CONST                             100
-#define LOAD_NAME                              101
-#define BUILD_TUPLE                            102
-#define BUILD_LIST                             103
-#define BUILD_SET                              104
-#define BUILD_MAP                              105
-#define LOAD_ATTR                              106
-#define COMPARE_OP                             107
-#define IMPORT_NAME                            108
-#define IMPORT_FROM                            109
-#define JUMP_FORWARD                           110
-#define POP_JUMP_IF_FALSE                      114
-#define POP_JUMP_IF_TRUE                       115
-#define LOAD_GLOBAL                            116
-#define IS_OP                                  117
-#define CONTAINS_OP                            118
-#define RERAISE                                119
-#define COPY                                   120
-#define RETURN_CONST                           121
-#define BINARY_OP                              122
-#define SEND                                   123
-#define LOAD_FAST                              124
-#define STORE_FAST                             125
-#define DELETE_FAST                            126
-#define LOAD_FAST_CHECK                        127
-#define POP_JUMP_IF_NOT_NONE                   128
-#define POP_JUMP_IF_NONE                       129
-#define RAISE_VARARGS                          130
-#define GET_AWAITABLE                          131
-#define BUILD_SLICE                            133
-#define JUMP_BACKWARD_NO_INTERRUPT             134
-#define MAKE_CELL                              135
-#define LOAD_DEREF                             137
-#define STORE_DEREF                            138
-#define DELETE_DEREF                           139
-#define JUMP_BACKWARD                          140
-#define LOAD_SUPER_ATTR                        141
-#define CALL_FUNCTION_EX                       142
-#define LOAD_FAST_AND_CLEAR                    143
-#define EXTENDED_ARG                           144
-#define LIST_APPEND                            145
-#define SET_ADD                                146
-#define MAP_ADD                                147
-#define COPY_FREE_VARS                         149
-#define YIELD_VALUE                            150
-#define RESUME                                 151
-#define MATCH_CLASS                            152
-#define BUILD_CONST_KEY_MAP                    156
-#define BUILD_STRING                           157
-#define CONVERT_VALUE                          158
-#define LIST_EXTEND                            162
-#define SET_UPDATE                             163
-#define DICT_MERGE                             164
-#define DICT_UPDATE                            165
-#define LOAD_FAST_LOAD_FAST                    168
-#define STORE_FAST_LOAD_FAST                   169
-#define STORE_FAST_STORE_FAST                  170
-#define CALL                                   171
-#define KW_NAMES                               172
-#define CALL_INTRINSIC_1                       173
-#define CALL_INTRINSIC_2                       174
-#define LOAD_FROM_DICT_OR_GLOBALS              175
-#define LOAD_FROM_DICT_OR_DEREF                176
-#define SET_FUNCTION_ATTRIBUTE                 177
-#define ENTER_EXECUTOR                         230
-#define MIN_INSTRUMENTED_OPCODE                237
-#define INSTRUMENTED_LOAD_SUPER_ATTR           237
-#define INSTRUMENTED_POP_JUMP_IF_NONE          238
-#define INSTRUMENTED_POP_JUMP_IF_NOT_NONE      239
-#define INSTRUMENTED_RESUME                    240
-#define INSTRUMENTED_CALL                      241
-#define INSTRUMENTED_RETURN_VALUE              242
-#define INSTRUMENTED_YIELD_VALUE               243
-#define INSTRUMENTED_CALL_FUNCTION_EX          244
-#define INSTRUMENTED_JUMP_FORWARD              245
-#define INSTRUMENTED_JUMP_BACKWARD             246
-#define INSTRUMENTED_RETURN_CONST              247
-#define INSTRUMENTED_FOR_ITER                  248
-#define INSTRUMENTED_POP_JUMP_IF_FALSE         249
-#define INSTRUMENTED_POP_JUMP_IF_TRUE          250
-#define INSTRUMENTED_END_FOR                   251
-#define INSTRUMENTED_END_SEND                  252
-#define INSTRUMENTED_INSTRUCTION               253
-#define INSTRUMENTED_LINE                      254
-#define SETUP_FINALLY                          256
-#define SETUP_CLEANUP                          257
-#define SETUP_WITH                             258
-#define POP_BLOCK                              259
-#define JUMP                                   260
-#define JUMP_NO_INTERRUPT                      261
-#define LOAD_METHOD                            262
-#define LOAD_SUPER_METHOD                      263
-#define LOAD_ZERO_SUPER_METHOD                 264
-#define LOAD_ZERO_SUPER_ATTR                   265
-#define STORE_FAST_MAYBE_NULL                  266
-#define LOAD_CLOSURE                           267
-#define TO_BOOL_ALWAYS_TRUE                      7
-#define TO_BOOL_BOOL                             8
-#define TO_BOOL_INT                             10
-#define TO_BOOL_LIST                            13
-#define TO_BOOL_NONE                            14
-#define TO_BOOL_STR                             18
-#define BINARY_OP_MULTIPLY_INT                  19
-#define BINARY_OP_ADD_INT                       20
-#define BINARY_OP_SUBTRACT_INT                  21
-#define BINARY_OP_MULTIPLY_FLOAT                22
-#define BINARY_OP_ADD_FLOAT                     23
-#define BINARY_OP_SUBTRACT_FLOAT                28
-#define BINARY_OP_ADD_UNICODE                   29
-#define BINARY_OP_INPLACE_ADD_UNICODE           34
-#define BINARY_SUBSCR_DICT                      38
-#define BINARY_SUBSCR_GETITEM                   39
-#define BINARY_SUBSCR_LIST_INT                  42
-#define BINARY_SUBSCR_STR_INT                   43
-#define BINARY_SUBSCR_TUPLE_INT                 44
-#define STORE_SUBSCR_DICT                       45
-#define STORE_SUBSCR_LIST_INT                   46
-#define SEND_GEN                                47
-#define UNPACK_SEQUENCE_TWO_TUPLE               48
-#define UNPACK_SEQUENCE_TUPLE                   56
-#define UNPACK_SEQUENCE_LIST                    57
-#define STORE_ATTR_INSTANCE_VALUE               58
-#define STORE_ATTR_SLOT                         59
-#define STORE_ATTR_WITH_HINT                    62
-#define LOAD_GLOBAL_MODULE                      63
-#define LOAD_GLOBAL_BUILTIN                     64
-#define LOAD_SUPER_ATTR_ATTR                    65
-#define LOAD_SUPER_ATTR_METHOD                  66
-#define LOAD_ATTR_INSTANCE_VALUE                67
-#define LOAD_ATTR_MODULE                        70
-#define LOAD_ATTR_WITH_HINT                     72
-#define LOAD_ATTR_SLOT                          73
-#define LOAD_ATTR_CLASS                         76
-#define LOAD_ATTR_PROPERTY                      77
-#define LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN       78
-#define LOAD_ATTR_METHOD_WITH_VALUES            79
-#define LOAD_ATTR_METHOD_NO_DICT                80
-#define LOAD_ATTR_METHOD_LAZY_DICT              81
-#define LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES     82
-#define LOAD_ATTR_NONDESCRIPTOR_NO_DICT         84
-#define COMPARE_OP_FLOAT                        86
-#define COMPARE_OP_INT                          88
-#define COMPARE_OP_STR                         111
-#define FOR_ITER_LIST                          112
-#define FOR_ITER_TUPLE                         113
-#define FOR_ITER_RANGE                         132
-#define FOR_ITER_GEN                           136
-#define CALL_BOUND_METHOD_EXACT_ARGS           148
-#define CALL_PY_EXACT_ARGS                     153
-#define CALL_PY_WITH_DEFAULTS                  154
-#define CALL_NO_KW_TYPE_1                      155
-#define CALL_NO_KW_STR_1                       159
-#define CALL_NO_KW_TUPLE_1                     160
-#define CALL_BUILTIN_CLASS                     161
-#define CALL_NO_KW_BUILTIN_O                   166
-#define CALL_NO_KW_BUILTIN_FAST                167
-#define CALL_BUILTIN_FAST_WITH_KEYWORDS        178
-#define CALL_NO_KW_LEN                         179
-#define CALL_NO_KW_ISINSTANCE                  180
-#define CALL_NO_KW_LIST_APPEND                 181
-#define CALL_NO_KW_METHOD_DESCRIPTOR_O         182
-#define CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS 183
-#define CALL_NO_KW_METHOD_DESCRIPTOR_NOARGS    184
-#define CALL_NO_KW_METHOD_DESCRIPTOR_FAST      185
-#define CALL_NO_KW_ALLOC_AND_ENTER_INIT        186
 
 #define NB_ADD                                   0
 #define NB_AND                                   1
diff --git a/Include/opcode_ids.h b/Include/opcode_ids.h
new file mode 100644
index 0000000000000..2d9d24cca4542
--- /dev/null
+++ b/Include/opcode_ids.h
@@ -0,0 +1,235 @@
+// Auto-generated by Tools/build/generate_opcode_h.py from Lib/opcode.py
+
+#ifndef Py_OPCODE_IDS_H
+#define Py_OPCODE_IDS_H
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* Instruction opcodes for compiled code */
+#define CACHE                                    0
+#define POP_TOP                                  1
+#define PUSH_NULL                                2
+#define INTERPRETER_EXIT                         3
+#define END_FOR                                  4
+#define END_SEND                                 5
+#define TO_BOOL                                  6
+#define NOP                                      9
+#define UNARY_NEGATIVE                          11
+#define UNARY_NOT                               12
+#define UNARY_INVERT                            15
+#define EXIT_INIT_CHECK                         16
+#define RESERVED                                17
+#define MAKE_FUNCTION                           24
+#define BINARY_SUBSCR                           25
+#define BINARY_SLICE                            26
+#define STORE_SLICE                             27
+#define GET_LEN                                 30
+#define MATCH_MAPPING                           31
+#define MATCH_SEQUENCE                          32
+#define MATCH_KEYS                              33
+#define PUSH_EXC_INFO                           35
+#define CHECK_EXC_MATCH                         36
+#define CHECK_EG_MATCH                          37
+#define FORMAT_SIMPLE                           40
+#define FORMAT_WITH_SPEC                        41
+#define WITH_EXCEPT_START                       49
+#define GET_AITER                               50
+#define GET_ANEXT                               51
+#define BEFORE_ASYNC_WITH                       52
+#define BEFORE_WITH                             53
+#define END_ASYNC_FOR                           54
+#define CLEANUP_THROW                           55
+#define STORE_SUBSCR                            60
+#define DELETE_SUBSCR                           61
+#define GET_ITER                                68
+#define GET_YIELD_FROM_ITER                     69
+#define LOAD_BUILD_CLASS                        71
+#define LOAD_ASSERTION_ERROR                    74
+#define RETURN_GENERATOR                        75
+#define RETURN_VALUE                            83
+#define SETUP_ANNOTATIONS                       85
+#define LOAD_LOCALS                             87
+#define POP_EXCEPT                              89
+#define STORE_NAME                              90
+#define DELETE_NAME                             91
+#define UNPACK_SEQUENCE                         92
+#define FOR_ITER                                93
+#define UNPACK_EX                               94
+#define STORE_ATTR                              95
+#define DELETE_ATTR                             96
+#define STORE_GLOBAL                            97
+#define DELETE_GLOBAL                           98
+#define SWAP                                    99
+#define LOAD_CONST                             100
+#define LOAD_NAME                              101
+#define BUILD_TUPLE                            102
+#define BUILD_LIST                             103
+#define BUILD_SET                              104
+#define BUILD_MAP                              105
+#define LOAD_ATTR                              106
+#define COMPARE_OP                             107
+#define IMPORT_NAME                            108
+#define IMPORT_FROM                            109
+#define JUMP_FORWARD                           110
+#define POP_JUMP_IF_FALSE                      114
+#define POP_JUMP_IF_TRUE                       115
+#define LOAD_GLOBAL                            116
+#define IS_OP                                  117
+#define CONTAINS_OP                            118
+#define RERAISE                                119
+#define COPY                                   120
+#define RETURN_CONST                           121
+#define BINARY_OP                              122
+#define SEND                                   123
+#define LOAD_FAST                              124
+#define STORE_FAST                             125
+#define DELETE_FAST                            126
+#define LOAD_FAST_CHECK                        127
+#define POP_JUMP_IF_NOT_NONE                   128
+#define POP_JUMP_IF_NONE                       129
+#define RAISE_VARARGS                          130
+#define GET_AWAITABLE                          131
+#define BUILD_SLICE                            133
+#define JUMP_BACKWARD_NO_INTERRUPT             134
+#define MAKE_CELL                              135
+#define LOAD_DEREF                             137
+#define STORE_DEREF                            138
+#define DELETE_DEREF                           139
+#define JUMP_BACKWARD                          140
+#define LOAD_SUPER_ATTR                        141
+#define CALL_FUNCTION_EX                       142
+#define LOAD_FAST_AND_CLEAR                    143
+#define EXTENDED_ARG                           144
+#define LIST_APPEND                            145
+#define SET_ADD                                146
+#define MAP_ADD                                147
+#define COPY_FREE_VARS                         149
+#define YIELD_VALUE                            150
+#define RESUME                                 151
+#define MATCH_CLASS                            152
+#define BUILD_CONST_KEY_MAP                    156
+#define BUILD_STRING                           157
+#define CONVERT_VALUE                          158
+#define LIST_EXTEND                            162
+#define SET_UPDATE                             163
+#define DICT_MERGE                             164
+#define DICT_UPDATE                            165
+#define LOAD_FAST_LOAD_FAST                    168
+#define STORE_FAST_LOAD_FAST                   169
+#define STORE_FAST_STORE_FAST                  170
+#define CALL                                   171
+#define KW_NAMES                               172
+#define CALL_INTRINSIC_1                       173
+#define CALL_INTRINSIC_2                       174
+#define LOAD_FROM_DICT_OR_GLOBALS              175
+#define LOAD_FROM_DICT_OR_DEREF                176
+#define SET_FUNCTION_ATTRIBUTE                 177
+#define ENTER_EXECUTOR                         230
+#define MIN_INSTRUMENTED_OPCODE                237
+#define INSTRUMENTED_LOAD_SUPER_ATTR           237
+#define INSTRUMENTED_POP_JUMP_IF_NONE          238
+#define INSTRUMENTED_POP_JUMP_IF_NOT_NONE      239
+#define INSTRUMENTED_RESUME                    240
+#define INSTRUMENTED_CALL                      241
+#define INSTRUMENTED_RETURN_VALUE              242
+#define INSTRUMENTED_YIELD_VALUE               243
+#define INSTRUMENTED_CALL_FUNCTION_EX          244
+#define INSTRUMENTED_JUMP_FORWARD              245
+#define INSTRUMENTED_JUMP_BACKWARD             246
+#define INSTRUMENTED_RETURN_CONST              247
+#define INSTRUMENTED_FOR_ITER                  248
+#define INSTRUMENTED_POP_JUMP_IF_FALSE         249
+#define INSTRUMENTED_POP_JUMP_IF_TRUE          250
+#define INSTRUMENTED_END_FOR                   251
+#define INSTRUMENTED_END_SEND                  252
+#define INSTRUMENTED_INSTRUCTION               253
+#define INSTRUMENTED_LINE                      254
+#define SETUP_FINALLY                          256
+#define SETUP_CLEANUP                          257
+#define SETUP_WITH                             258
+#define POP_BLOCK                              259
+#define JUMP                                   260
+#define JUMP_NO_INTERRUPT                      261
+#define LOAD_METHOD                            262
+#define LOAD_SUPER_METHOD                      263
+#define LOAD_ZERO_SUPER_METHOD                 264
+#define LOAD_ZERO_SUPER_ATTR                   265
+#define STORE_FAST_MAYBE_NULL                  266
+#define LOAD_CLOSURE                           267
+#define TO_BOOL_ALWAYS_TRUE                      7
+#define TO_BOOL_BOOL                             8
+#define TO_BOOL_INT                             10
+#define TO_BOOL_LIST                            13
+#define TO_BOOL_NONE                            14
+#define TO_BOOL_STR                             18
+#define BINARY_OP_MULTIPLY_INT                  19
+#define BINARY_OP_ADD_INT                       20
+#define BINARY_OP_SUBTRACT_INT                  21
+#define BINARY_OP_MULTIPLY_FLOAT                22
+#define BINARY_OP_ADD_FLOAT                     23
+#define BINARY_OP_SUBTRACT_FLOAT                28
+#define BINARY_OP_ADD_UNICODE                   29
+#define BINARY_OP_INPLACE_ADD_UNICODE           34
+#define BINARY_SUBSCR_DICT                      38
+#define BINARY_SUBSCR_GETITEM                   39
+#define BINARY_SUBSCR_LIST_INT                  42
+#define BINARY_SUBSCR_STR_INT                   43
+#define BINARY_SUBSCR_TUPLE_INT                 44
+#define STORE_SUBSCR_DICT                       45
+#define STORE_SUBSCR_LIST_INT                   46
+#define SEND_GEN                                47
+#define UNPACK_SEQUENCE_TWO_TUPLE               48
+#define UNPACK_SEQUENCE_TUPLE                   56
+#define UNPACK_SEQUENCE_LIST                    57
+#define STORE_ATTR_INSTANCE_VALUE               58
+#define STORE_ATTR_SLOT                         59
+#define STORE_ATTR_WITH_HINT                    62
+#define LOAD_GLOBAL_MODULE                      63
+#define LOAD_GLOBAL_BUILTIN                     64
+#define LOAD_SUPER_ATTR_ATTR                    65
+#define LOAD_SUPER_ATTR_METHOD                  66
+#define LOAD_ATTR_INSTANCE_VALUE                67
+#define LOAD_ATTR_MODULE                        70
+#define LOAD_ATTR_WITH_HINT                     72
+#define LOAD_ATTR_SLOT                          73
+#define LOAD_ATTR_CLASS                         76
+#define LOAD_ATTR_PROPERTY                      77
+#define LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN       78
+#define LOAD_ATTR_METHOD_WITH_VALUES            79
+#define LOAD_ATTR_METHOD_NO_DICT                80
+#define LOAD_ATTR_METHOD_LAZY_DICT              81
+#define LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES     82
+#define LOAD_ATTR_NONDESCRIPTOR_NO_DICT         84
+#define COMPARE_OP_FLOAT                        86
+#define COMPARE_OP_INT                          88
+#define COMPARE_OP_STR                         111
+#define FOR_ITER_LIST                          112
+#define FOR_ITER_TUPLE                         113
+#define FOR_ITER_RANGE                         132
+#define FOR_ITER_GEN                           136
+#define CALL_BOUND_METHOD_EXACT_ARGS           148
+#define CALL_PY_EXACT_ARGS                     153
+#define CALL_PY_WITH_DEFAULTS                  154
+#define CALL_NO_KW_TYPE_1                      155
+#define CALL_NO_KW_STR_1                       159
+#define CALL_NO_KW_TUPLE_1                     160
+#define CALL_BUILTIN_CLASS                     161
+#define CALL_NO_KW_BUILTIN_O                   166
+#define CALL_NO_KW_BUILTIN_FAST                167
+#define CALL_BUILTIN_FAST_WITH_KEYWORDS        178
+#define CALL_NO_KW_LEN                         179
+#define CALL_NO_KW_ISINSTANCE                  180
+#define CALL_NO_KW_LIST_APPEND                 181
+#define CALL_NO_KW_METHOD_DESCRIPTOR_O         182
+#define CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS 183
+#define CALL_NO_KW_METHOD_DESCRIPTOR_NOARGS    184
+#define CALL_NO_KW_METHOD_DESCRIPTOR_FAST      185
+#define CALL_NO_KW_ALLOC_AND_ENTER_INIT        186
+
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* !Py_OPCODE_IDS_H */
diff --git a/Makefile.pre.in b/Makefile.pre.in
index d8fdb34747011..52236f7924503 100644
--- a/Makefile.pre.in
+++ b/Makefile.pre.in
@@ -1431,9 +1431,11 @@ regen-opcode:
 	$(PYTHON_FOR_REGEN) $(srcdir)/Tools/build/generate_opcode_h.py \
 		$(srcdir)/Lib/opcode.py \
 		$(srcdir)/Lib/_opcode_metadata.py \
+		$(srcdir)/Include/opcode_ids.h.new \
 		$(srcdir)/Include/opcode.h.new \
                 $(srcdir)/Python/opcode_targets.h.new \
 		$(srcdir)/Include/internal/pycore_opcode.h.new
+	$(UPDATE_FILE) $(srcdir)/Include/opcode_ids.h $(srcdir)/Include/opcode_ids.h.new
 	$(UPDATE_FILE) $(srcdir)/Include/opcode.h $(srcdir)/Include/opcode.h.new
 	$(UPDATE_FILE) $(srcdir)/Python/opcode_targets.h $(srcdir)/Python/opcode_targets.h.new
 	$(UPDATE_FILE) $(srcdir)/Include/internal/pycore_opcode.h $(srcdir)/Include/internal/pycore_opcode.h.new
diff --git a/PCbuild/regen.targets b/PCbuild/regen.targets
index 99cfff5acc0ba..c1189c883b667 100644
--- a/PCbuild/regen.targets
+++ b/PCbuild/regen.targets
@@ -59,7 +59,7 @@
           Inputs="@(_OpcodeSources)" Outputs="@(_OpcodeOutputs)"
           DependsOnTargets="FindPythonForBuild">
     <Message Text="Regenerate @(_OpcodeOutputs->'%(Filename)%(Extension)',' ')" Importance="high" />
-    <Exec Command="$(PythonForBuild) Tools\build\generate_opcode_h.py Lib\opcode.py Lib\_opcode_metadata.py Include\opcode.h Python/opcode_targets.h Include\internal\pycore_opcode.h Include\internal\pycore_intrinsics.h"
+    <Exec Command="$(PythonForBuild) Tools\build\generate_opcode_h.py Lib\opcode.py Lib\_opcode_metadata.py Include\opcode_ids.h Include\opcode.h Python/opcode_targets.h Include\internal\pycore_opcode.h Include\internal\pycore_intrinsics.h"
           WorkingDirectory="$(PySourcePath)" />
   </Target>
 
diff --git a/Tools/build/generate_opcode_h.py b/Tools/build/generate_opcode_h.py
index 3a817326c94cb..67f4a2c2d5d76 100644
--- a/Tools/build/generate_opcode_h.py
+++ b/Tools/build/generate_opcode_h.py
@@ -6,7 +6,7 @@
 SCRIPT_NAME = "Tools/build/generate_opcode_h.py"
 PYTHON_OPCODE = "Lib/opcode.py"
 
-header = f"""
+opcode_h_header = f"""
 // Auto-generated by {SCRIPT_NAME} from {PYTHON_OPCODE}
 
 #ifndef Py_OPCODE_H
@@ -15,11 +15,11 @@
 extern "C" {{
 #endif
 
+#include "opcode_ids.h"
 
-/* Instruction opcodes for compiled code */
 """.lstrip()
 
-footer = """
+opcode_h_footer = """
 
 #ifdef __cplusplus
 }
@@ -27,6 +27,27 @@
 #endif /* !Py_OPCODE_H */
 """
 
+opcode_ids_h_header = f"""
+// Auto-generated by {SCRIPT_NAME} from {PYTHON_OPCODE}
+
+#ifndef Py_OPCODE_IDS_H
+#define Py_OPCODE_IDS_H
+#ifdef __cplusplus
+extern "C" {{
+#endif
+
+
+/* Instruction opcodes for compiled code */
+""".lstrip()
+
+opcode_ids_h_footer = """
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* !Py_OPCODE_IDS_H */
+"""
+
 internal_header = f"""
 // Auto-generated by {SCRIPT_NAME} from {PYTHON_OPCODE}
 
@@ -63,9 +84,10 @@ def get_python_module_dict(filename):
 
 def main(opcode_py,
          _opcode_metadata_py='Lib/_opcode_metadata.py',
-         outfile='Include/opcode.h',
+         opcode_ids_h='Include/opcode_ids.h',
+         opcode_h='Include/opcode.h',
          opcode_targets_h='Python/opcode_targets.h',
-         internaloutfile='Include/internal/pycore_opcode.h'):
+         internal_opcode_h='Include/internal/pycore_opcode.h'):
 
     _opcode_metadata = get_python_module_dict(_opcode_metadata_py)
 
@@ -91,9 +113,8 @@ def main(opcode_py,
         opname_including_specialized[next_op] = name
         used[next_op] = True
 
-    with open(outfile, 'w') as fobj, open(internaloutfile, 'w') as iobj:
-        fobj.write(header)
-        iobj.write(internal_header)
+    with open(opcode_ids_h, 'w') as fobj:
+        fobj.write(opcode_ids_h_header)
 
         for name in opname:
             if name in opmap:
@@ -107,6 +128,20 @@ def main(opcode_py,
         for name, op in specialized_opmap.items():
             fobj.write(DEFINE.format(name, op))
 
+        fobj.write(opcode_ids_h_footer)
+
+    with open(opcode_h, 'w') as fobj:
+        fobj.write(opcode_h_header)
+
+        fobj.write("\n")
+        for i, (op, _) in enumerate(opcode["_nb_ops"]):
+            fobj.write(DEFINE.format(op, i))
+
+        fobj.write(opcode_h_footer)
+
+    with open(internal_opcode_h, 'w') as iobj:
+        iobj.write(internal_header)
+
         iobj.write("\nextern const uint8_t _PyOpcode_Caches[256];\n")
         iobj.write("\nextern const uint8_t _PyOpcode_Deopt[256];\n")
         iobj.write("\n#ifdef NEED_OPCODE_TABLES\n")
@@ -129,10 +164,6 @@ def main(opcode_py,
         iobj.write("};\n")
         iobj.write("#endif   // NEED_OPCODE_TABLES\n")
 
-        fobj.write("\n")
-        for i, (op, _) in enumerate(opcode["_nb_ops"]):
-            fobj.write(DEFINE.format(op, i))
-
         iobj.write("\n")
         iobj.write(f"\nextern const char *const _PyOpcode_OpName[{NUM_OPCODES}];\n")
         iobj.write("\n#ifdef NEED_OPCODE_TABLES\n")
@@ -151,7 +182,6 @@ def main(opcode_py,
                 iobj.write(f"    case {i}: \\\n")
         iobj.write("        ;\n")
 
-        fobj.write(footer)
         iobj.write(internal_footer)
 
     with open(opcode_targets_h, "w") as f:
@@ -164,8 +194,9 @@ def main(opcode_py,
         f.write(",\n".join([f"    &&{s}" for s in targets]))
         f.write("\n};\n")
 
-    print(f"{outfile} regenerated from {opcode_py}")
+    print(f"{opcode_h} regenerated from {opcode_py}")
 
 
 if __name__ == '__main__':
-    main(sys.argv[1], sys.argv[2], sys.argv[3], sys.argv[4], sys.argv[5])
+    main(sys.argv[1], sys.argv[2], sys.argv[3], sys.argv[4],
+         sys.argv[5], sys.argv[6])



More information about the Python-checkins mailing list