mirror of
https://github.com/python/cpython.git
synced 2025-10-17 20:28:43 +00:00
Vladimir Marangozov' performance hack: copy f_builtins from ancestor
if the globals are the same. Also, when creating a dummy builtins dictionary, add "None" to it, just to be kind.
This commit is contained in:
parent
3da3fcef96
commit
bde6ff7984
1 changed files with 14 additions and 3 deletions
|
@ -164,9 +164,16 @@ PyFrame_New(tstate, code, globals, locals)
|
||||||
PyErr_BadInternalCall();
|
PyErr_BadInternalCall();
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
builtins = PyDict_GetItem(globals, builtin_object);
|
if (back == NULL || back->f_globals != globals) {
|
||||||
if (builtins != NULL && PyModule_Check(builtins))
|
builtins = PyDict_GetItem(globals, builtin_object);
|
||||||
builtins = PyModule_GetDict(builtins);
|
if (builtins != NULL && PyModule_Check(builtins))
|
||||||
|
builtins = PyModule_GetDict(builtins);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
/* If we share the globals, we share the builtins.
|
||||||
|
Save a lookup and a call. */
|
||||||
|
builtins = back->f_builtins;
|
||||||
|
}
|
||||||
if (builtins != NULL && !PyDict_Check(builtins))
|
if (builtins != NULL && !PyDict_Check(builtins))
|
||||||
builtins = NULL;
|
builtins = NULL;
|
||||||
if (free_list == NULL) {
|
if (free_list == NULL) {
|
||||||
|
@ -194,9 +201,13 @@ PyFrame_New(tstate, code, globals, locals)
|
||||||
_Py_NewReference(f);
|
_Py_NewReference(f);
|
||||||
}
|
}
|
||||||
if (builtins == NULL) {
|
if (builtins == NULL) {
|
||||||
|
/* No builtins! Make up a minimal one. */
|
||||||
builtins = PyDict_New();
|
builtins = PyDict_New();
|
||||||
if (builtins == NULL)
|
if (builtins == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
/* Give them 'None', at least. */
|
||||||
|
if (PyDict_SetItemString(builtins, "None", Py_None) < 0)
|
||||||
|
return NULL;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
Py_XINCREF(builtins);
|
Py_XINCREF(builtins);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue