gh-112720: make it easier to subclass and modify dis.ArgResolver's jump arg resolution (#115564)

This commit is contained in:
Irit Katriel 2024-02-16 19:25:19 +00:00 committed by GitHub
parent f366e21504
commit 74e6f4b32f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 37 additions and 11 deletions

View file

@ -1986,6 +1986,22 @@ class InstructionTests(InstructionTestCase):
self.assertEqual(f(opcode.opmap["BINARY_OP"], 3, *args), (3, '<<'))
self.assertEqual(f(opcode.opmap["CALL_INTRINSIC_1"], 2, *args), (2, 'INTRINSIC_IMPORT_STAR'))
def test_custom_arg_resolver(self):
class MyArgResolver(dis.ArgResolver):
def offset_from_jump_arg(self, op, arg, offset):
return arg + 1
def get_label_for_offset(self, offset):
return 2 * offset
def f(opcode, oparg, offset, *init_args):
arg_resolver = MyArgResolver(*init_args)
return arg_resolver.get_argval_argrepr(opcode, oparg, offset)
offset = 42
self.assertEqual(f(opcode.opmap["JUMP_BACKWARD"], 1, offset), (2, 'to L4'))
self.assertEqual(f(opcode.opmap["SETUP_FINALLY"], 2, offset), (3, 'to L6'))
def get_instructions(self, code):
return dis._get_instructions_bytes(code)