GH-93516: Store offset of first traceable instruction in code object (GH-93769)

This commit is contained in:
Mark Shannon 2022-06-14 11:09:30 +01:00 committed by GitHub
parent 2bf74753c1
commit 3cd1a5d3ec
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 53 additions and 52 deletions

View file

@ -20,6 +20,9 @@ from generate_global_objects import get_identifiers_and_strings
verbose = False
identifiers, strings = get_identifiers_and_strings()
# This must be kept in sync with opcode.py
RESUME = 151
def isprintable(b: bytes) -> bool:
return all(0x20 <= c < 0x7f for c in b)
@ -267,6 +270,10 @@ class Printer:
self.write(f".co_qualname = {co_qualname},")
self.write(f".co_linetable = {co_linetable},")
self.write(f".co_code_adaptive = {co_code_adaptive},")
for i, op in enumerate(code.co_code[::2]):
if op == RESUME:
self.write(f"._co_firsttraceable = {i},")
break
name_as_code = f"(PyCodeObject *)&{name}"
self.deallocs.append(f"_PyStaticCode_Dealloc({name_as_code});")
self.interns.append(f"_PyStaticCode_InternStrings({name_as_code})")