mirror of
https://github.com/python/cpython.git
synced 2025-08-04 08:59:19 +00:00
bpo-47120: Replace the JUMP_ABSOLUTE opcode by the relative JUMP_BACKWARD (GH-32115)
This commit is contained in:
parent
b36d222110
commit
a00518d9ad
15 changed files with 147 additions and 113 deletions
|
@ -30,6 +30,7 @@ MAKE_FUNCTION_FLAGS = ('defaults', 'kwdefaults', 'annotations', 'closure')
|
|||
LOAD_CONST = opmap['LOAD_CONST']
|
||||
LOAD_GLOBAL = opmap['LOAD_GLOBAL']
|
||||
BINARY_OP = opmap['BINARY_OP']
|
||||
JUMP_BACKWARD = opmap['JUMP_BACKWARD']
|
||||
|
||||
CACHE = opmap["CACHE"]
|
||||
|
||||
|
@ -441,7 +442,8 @@ def _get_instructions_bytes(code, varname_from_oparg=None,
|
|||
argval = arg*2
|
||||
argrepr = "to " + repr(argval)
|
||||
elif op in hasjrel:
|
||||
argval = offset + 2 + arg*2
|
||||
signed_arg = -arg if op == JUMP_BACKWARD else arg
|
||||
argval = offset + 2 + signed_arg*2
|
||||
argrepr = "to " + repr(argval)
|
||||
elif op in haslocal or op in hasfree:
|
||||
argval, argrepr = _get_name_info(arg, varname_from_oparg)
|
||||
|
@ -566,6 +568,8 @@ def findlabels(code):
|
|||
for offset, op, arg in _unpack_opargs(code):
|
||||
if arg is not None:
|
||||
if op in hasjrel:
|
||||
if op == JUMP_BACKWARD:
|
||||
arg = -arg
|
||||
label = offset + 2 + arg*2
|
||||
elif op in hasjabs:
|
||||
label = arg*2
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue