summaryrefslogtreecommitdiffstats
path: root/Lib/dis.py
diff options
context:
space:
mode:
authorIrit Katriel <1055913+iritkatriel@users.noreply.github.com>2022-03-31 13:14:15 (GMT)
committerGitHub <noreply@github.com>2022-03-31 13:14:15 (GMT)
commita00518d9ad9a8f408a9699191019d75dd8406c32 (patch)
treecd66e7a9fd60f08e92fd56a183e1996623123da8 /Lib/dis.py
parentb36d222110d0d6d84dc8e973ca87d976c2423f5d (diff)
downloadcpython-a00518d9ad9a8f408a9699191019d75dd8406c32.zip
cpython-a00518d9ad9a8f408a9699191019d75dd8406c32.tar.gz
cpython-a00518d9ad9a8f408a9699191019d75dd8406c32.tar.bz2
bpo-47120: Replace the JUMP_ABSOLUTE opcode by the relative JUMP_BACKWARD (GH-32115)
Diffstat (limited to 'Lib/dis.py')
-rw-r--r--Lib/dis.py6
1 files changed, 5 insertions, 1 deletions
diff --git a/Lib/dis.py b/Lib/dis.py
index 3b7747b..d9936ce 100644
--- a/Lib/dis.py
+++ b/Lib/dis.py
@@ -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