@@ -59,8 +59,22 @@ def main(opcode_py, outfile='Include/opcode.h'):
5959 hasjabs = opcode ['hasjabs' ]
6060 used = [ False ] * 256
6161 next_op = 1
62+
6263 for name , op in opmap .items ():
6364 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+
6478 with open (outfile , 'w' ) as fobj :
6579 fobj .write (header )
6680 for name in opname :
@@ -69,12 +83,9 @@ def main(opcode_py, outfile='Include/opcode.h'):
6983 if name == 'POP_EXCEPT' : # Special entry for HAVE_ARGUMENT
7084 fobj .write (DEFINE .format ("HAVE_ARGUMENT" , opcode ["HAVE_ARGUMENT" ]))
7185
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+
7889 fobj .write ("\n extern const uint8_t _PyOpcode_Caches[256];\n " )
7990 fobj .write ("\n extern const uint8_t _PyOpcode_Deopt[256];\n " )
8091 fobj .write ("\n #ifdef NEED_OPCODE_TABLES\n " )
@@ -111,8 +122,10 @@ def main(opcode_py, outfile='Include/opcode.h'):
111122 fobj .write ("\n " )
112123 fobj .write ("#ifdef Py_DEBUG\n " )
113124 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 ''' )
116129 fobj .write ("};\n " )
117130 fobj .write ("#endif\n " )
118131
0 commit comments