[3.11] GH-93516: Backport GH-93769 (GH-94231)

* Store offset of first traceable instruction to avoid having to recompute it all the time when tracing.
This commit is contained in:
Mark Shannon 2022-06-28 16:30:22 +01:00 committed by GitHub
parent 50a2e36ce9
commit 3b4f5ed168
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 217 additions and 209 deletions

View file

@ -22,6 +22,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)
@ -284,6 +287,10 @@ class Printer:
self.write(f"._co_code = NULL,")
self.write("._co_linearray = NULL,")
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})")