Add "annotate" SET_FUNCTION_ATTRIBUTE bit to dis. (#124566)

This commit is contained in:
larryhastings 2024-09-25 17:01:45 -07:00 committed by GitHub
parent 4e829c0e6f
commit 4defb58d38
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 19 additions and 1 deletions

View File

@ -32,7 +32,7 @@ _have_code = (types.MethodType, types.FunctionType, types.CodeType,
CONVERT_VALUE = opmap['CONVERT_VALUE'] CONVERT_VALUE = opmap['CONVERT_VALUE']
SET_FUNCTION_ATTRIBUTE = opmap['SET_FUNCTION_ATTRIBUTE'] SET_FUNCTION_ATTRIBUTE = opmap['SET_FUNCTION_ATTRIBUTE']
FUNCTION_ATTR_FLAGS = ('defaults', 'kwdefaults', 'annotations', 'closure') FUNCTION_ATTR_FLAGS = ('defaults', 'kwdefaults', 'annotations', 'closure', 'annotate')
ENTER_EXECUTOR = opmap['ENTER_EXECUTOR'] ENTER_EXECUTOR = opmap['ENTER_EXECUTOR']
LOAD_CONST = opmap['LOAD_CONST'] LOAD_CONST = opmap['LOAD_CONST']

View File

@ -380,6 +380,23 @@ dis_annot_stmt_str = """\
RETURN_CONST 3 (None) RETURN_CONST 3 (None)
""" """
fn_with_annotate_str = """
def foo(a: int, b: str) -> str:
return a * b
"""
dis_fn_with_annotate_str = """\
0 RESUME 0
2 LOAD_CONST 0 (<code object __annotate__ at 0x..., file "<dis>", line 2>)
MAKE_FUNCTION
LOAD_CONST 1 (<code object foo at 0x..., file "<dis>", line 2>)
MAKE_FUNCTION
SET_FUNCTION_ATTRIBUTE 16 (annotate)
STORE_NAME 0 (foo)
RETURN_CONST 2 (None)
"""
compound_stmt_str = """\ compound_stmt_str = """\
x = 0 x = 0
while 1: while 1:
@ -1098,6 +1115,7 @@ class DisTests(DisTestBase):
self.do_disassembly_test(expr_str, dis_expr_str) self.do_disassembly_test(expr_str, dis_expr_str)
self.do_disassembly_test(simple_stmt_str, dis_simple_stmt_str) self.do_disassembly_test(simple_stmt_str, dis_simple_stmt_str)
self.do_disassembly_test(annot_stmt_str, dis_annot_stmt_str) self.do_disassembly_test(annot_stmt_str, dis_annot_stmt_str)
self.do_disassembly_test(fn_with_annotate_str, dis_fn_with_annotate_str)
self.do_disassembly_test(compound_stmt_str, dis_compound_stmt_str) self.do_disassembly_test(compound_stmt_str, dis_compound_stmt_str)
def test_disassemble_bytes(self): def test_disassemble_bytes(self):