bpo-45696: Deep-freeze selected modules (GH-29118)

This gains 10% or more in startup time for `python -c pass` on UNIX-ish systems.

The Makefile.pre.in generating code builds on Eric's work for bpo-45020, but the .c file generator is new.

Windows version TBD.
This commit is contained in:
Guido van Rossum 2021-11-10 18:01:53 -08:00 committed by GitHub
parent fc9b622819
commit 1cbaa505d0
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
16 changed files with 808 additions and 56 deletions

View file

@ -1262,6 +1262,7 @@ look_up_frozen(const char *name)
struct frozen_info {
PyObject *nameobj;
const char *data;
PyObject *(*get_code)(void);
Py_ssize_t size;
bool is_package;
bool is_alias;
@ -1295,6 +1296,7 @@ find_frozen(PyObject *nameobj, struct frozen_info *info)
if (info != NULL) {
info->nameobj = nameobj; // borrowed
info->data = (const char *)p->code;
info->get_code = p->get_code;
info->size = p->size < 0 ? -(p->size) : p->size;
info->is_package = p->size < 0 ? true : false;
info->origname = name;
@ -1316,6 +1318,11 @@ find_frozen(PyObject *nameobj, struct frozen_info *info)
static PyObject *
unmarshal_frozen_code(struct frozen_info *info)
{
if (info->get_code) {
PyObject *code = info->get_code();
assert(code != NULL);
return code;
}
PyObject *co = PyMarshal_ReadObjectFromString(info->data, info->size);
if (co == NULL) {
/* Does not contain executable code. */