bpo-46430: Intern strings in deep-frozen modules (GH-30683)

This commit is contained in:
Kumar Aditya 2022-02-09 22:22:42 +05:30 committed by GitHub
parent 128ab092ca
commit c0a5ebeb12
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 16 additions and 0 deletions

View file

@ -279,6 +279,8 @@ void _Py_Specialize_CompareOp(PyObject *lhs, PyObject *rhs, _Py_CODEUNIT *instr,
/* Deallocator function for static codeobjects used in deepfreeze.py */
void _PyStaticCode_Dealloc(PyCodeObject *co);
/* Function to intern strings of codeobjects */
void _PyStaticCode_InternStrings(PyCodeObject *co);
#ifdef Py_STATS

View file

@ -0,0 +1 @@
Intern strings in deep-frozen modules. Patch by Kumar Aditya.

View file

@ -1924,3 +1924,15 @@ _PyStaticCode_Dealloc(PyCodeObject *co)
co->co_weakreflist = NULL;
}
}
void
_PyStaticCode_InternStrings(PyCodeObject *co)
{
int res = intern_strings(co->co_names);
assert(res == 0);
res = intern_string_constants(co->co_consts, NULL);
assert(res == 0);
res = intern_strings(co->co_localsplusnames);
assert(res == 0);
(void)res;
}

View file

@ -279,6 +279,7 @@ def generate_code(self, name: str, code: types.CodeType) -> str:
self.write(f".co_cellvars = {co_cellvars},")
self.write(f".co_freevars = {co_freevars},")
self.deallocs.append(f"_PyStaticCode_Dealloc(&{name});")
self.patchups.append(f"_PyStaticCode_InternStrings(&{name});")
return f"& {name}.ob_base"
def generate_tuple(self, name: str, t: Tuple[object, ...]) -> str: