@@ -59,8 +59,22 @@ def main(opcode_py, outfile='Include/opcode.h'):
59
59
hasjabs = opcode ['hasjabs' ]
60
60
used = [ False ] * 256
61
61
next_op = 1
62
+
62
63
for name , op in opmap .items ():
63
64
used [op ] = True
65
+
66
+ specialized_opmap = {}
67
+ opname_including_specialized = opname .copy ()
68
+ for name in opcode ['_specialized_instructions' ]:
69
+ while used [next_op ]:
70
+ next_op += 1
71
+ specialized_opmap [name ] = next_op
72
+ opname_including_specialized [next_op ] = name
73
+ used [next_op ] = True
74
+ specialized_opmap ['DO_TRACING' ] = 255
75
+ opname_including_specialized [255 ] = 'DO_TRACING'
76
+ used [255 ] = True
77
+
64
78
with open (outfile , 'w' ) as fobj :
65
79
fobj .write (header )
66
80
for name in opname :
@@ -69,12 +83,9 @@ def main(opcode_py, outfile='Include/opcode.h'):
69
83
if name == 'POP_EXCEPT' : # Special entry for HAVE_ARGUMENT
70
84
fobj .write (DEFINE .format ("HAVE_ARGUMENT" , opcode ["HAVE_ARGUMENT" ]))
71
85
72
- for name in opcode ['_specialized_instructions' ]:
73
- while used [next_op ]:
74
- next_op += 1
75
- fobj .write (DEFINE .format (name , next_op ))
76
- used [next_op ] = True
77
- fobj .write (DEFINE .format ('DO_TRACING' , 255 ))
86
+ for name , op in specialized_opmap .items ():
87
+ fobj .write (DEFINE .format (name , op ))
88
+
78
89
fobj .write ("\n extern const uint8_t _PyOpcode_Caches[256];\n " )
79
90
fobj .write ("\n extern const uint8_t _PyOpcode_Deopt[256];\n " )
80
91
fobj .write ("\n #ifdef NEED_OPCODE_TABLES\n " )
@@ -111,8 +122,10 @@ def main(opcode_py, outfile='Include/opcode.h'):
111
122
fobj .write ("\n " )
112
123
fobj .write ("#ifdef Py_DEBUG\n " )
113
124
fobj .write ("static const char *const _PyOpcode_OpName[256] = {\n " )
114
- for name in opmap :
115
- fobj .write (f''' [{ name } ] = "{ name } ",\n ''' )
125
+ for op , name in enumerate (opname_including_specialized ):
126
+ if name [0 ] != "<" :
127
+ op = name
128
+ fobj .write (f''' [{ op } ] = "{ name } ",\n ''' )
116
129
fobj .write ("};\n " )
117
130
fobj .write ("#endif\n " )
118
131
0 commit comments