mirror of
https://github.com/python/cpython.git
synced 2025-08-04 08:59:19 +00:00
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:
parent
fc9b622819
commit
1cbaa505d0
16 changed files with 808 additions and 56 deletions
|
@ -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. */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue