mirror of
https://github.com/python/cpython.git
synced 2025-07-18 16:55:20 +00:00
bpo-45636: Merge all numeric operators (GH-29482)
This commit is contained in:
parent
1cbaa505d0
commit
9178f533ff
16 changed files with 613 additions and 1081 deletions
|
@ -12,7 +12,7 @@ extern "C" {
|
|||
#endif
|
||||
|
||||
|
||||
/* Instruction opcodes for compiled code */
|
||||
/* Instruction opcodes for compiled code */
|
||||
""".lstrip()
|
||||
|
||||
footer = """
|
||||
|
@ -28,6 +28,8 @@ footer = """
|
|||
#endif /* !Py_OPCODE_H */
|
||||
"""
|
||||
|
||||
DEFINE = "#define {:<31} {:>3}\n"
|
||||
|
||||
UINT32_MASK = (1<<32)-1
|
||||
|
||||
def write_int_array_from_ops(name, ops, out):
|
||||
|
@ -62,17 +64,16 @@ def main(opcode_py, outfile='Include/opcode.h'):
|
|||
fobj.write(header)
|
||||
for name in opcode['opname']:
|
||||
if name in opmap:
|
||||
fobj.write("#define %-23s %3s\n" % (name, opmap[name]))
|
||||
fobj.write(DEFINE.format(name, opmap[name]))
|
||||
if name == 'POP_EXCEPT': # Special entry for HAVE_ARGUMENT
|
||||
fobj.write("#define %-23s %3d\n" %
|
||||
('HAVE_ARGUMENT', opcode['HAVE_ARGUMENT']))
|
||||
fobj.write(DEFINE.format("HAVE_ARGUMENT", opcode["HAVE_ARGUMENT"]))
|
||||
|
||||
for name in opcode['_specialized_instructions']:
|
||||
while used[next_op]:
|
||||
next_op += 1
|
||||
fobj.write("#define %-23s %3s\n" % (name, next_op))
|
||||
fobj.write(DEFINE.format(name, next_op))
|
||||
used[next_op] = True
|
||||
fobj.write("#define DO_TRACING 255\n")
|
||||
fobj.write(DEFINE.format('DO_TRACING', 255))
|
||||
fobj.write("#ifdef NEED_OPCODE_JUMP_TABLES\n")
|
||||
write_int_array_from_ops("_PyOpcode_RelativeJump", opcode['hasjrel'], fobj)
|
||||
write_int_array_from_ops("_PyOpcode_Jump", opcode['hasjrel'] + opcode['hasjabs'], fobj)
|
||||
|
@ -84,10 +85,14 @@ def main(opcode_py, outfile='Include/opcode.h'):
|
|||
fobj.write(f"\n || ((op) == {op}) \\")
|
||||
fobj.write("\n )\n")
|
||||
|
||||
fobj.write("\n")
|
||||
for i, (op, _) in enumerate(opcode["_nb_ops"]):
|
||||
fobj.write(DEFINE.format(op, i))
|
||||
|
||||
fobj.write(footer)
|
||||
|
||||
|
||||
print("%s regenerated from %s" % (outfile, opcode_py))
|
||||
print(f"{outfile} regenerated from {opcode_py}")
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue