diff options
author | Guido van Rossum <guido@python.org> | 2001-02-20 21:43:24 (GMT) |
---|---|---|
committer | Guido van Rossum <guido@python.org> | 2001-02-20 21:43:24 (GMT) |
commit | 85cd1d690cfd0bad9b6ee98578fadf2a7d8988e9 (patch) | |
tree | 8328e0e5e2edb9f8db5054b309cfaabec35706b6 | |
parent | 8b41116c2268ce867bfc550146f50f792951c678 (diff) | |
download | cpython-85cd1d690cfd0bad9b6ee98578fadf2a7d8988e9.zip cpython-85cd1d690cfd0bad9b6ee98578fadf2a7d8988e9.tar.gz cpython-85cd1d690cfd0bad9b6ee98578fadf2a7d8988e9.tar.bz2 |
The code in PyImport_Import() tried to save itself a bit of work and
save the __builtin__ module in a static variable. But this doesn't
work across Py_Finalise()/Py_Initialize()! It also doesn't work when
using multiple interpreter states created with PyInterpreterState_New().
So I'm ripping out this small optimization.
This was probably broken since PyImport_Import() was introduced in
1997! We really need a better test suite for multiple interpreter
states and repeatedly initializing.
This fixes the problems Barry reported in Demo/embed/loop.c.
-rw-r--r-- | Python/import.c | 20 |
1 files changed, 7 insertions, 13 deletions
diff --git a/Python/import.c b/Python/import.c index 71af3bd..b0069e4 100644 --- a/Python/import.c +++ b/Python/import.c @@ -1154,7 +1154,8 @@ check_case(char *buf, int len, int namelen, char *name) name, buf); return 0; } - if ( namelen > fss.name[0] || strncmp(name, (char *)fss.name+1, namelen) != 0 ) { + if (namelen > fss.name[0] || + strncmp(name, (char *)fss.name+1, namelen) != 0) { PyErr_Format(PyExc_NameError, "Case mismatch for module name %.100s\n(filename %.300s)", name, fss.name); @@ -1873,7 +1874,6 @@ PyImport_Import(PyObject *module_name) static PyObject *silly_list = NULL; static PyObject *builtins_str = NULL; static PyObject *import_str = NULL; - static PyObject *standard_builtins = NULL; PyObject *globals = NULL; PyObject *import = NULL; PyObject *builtins = NULL; @@ -1894,7 +1894,7 @@ PyImport_Import(PyObject *module_name) /* Get the builtins from current globals */ globals = PyEval_GetGlobals(); - if(globals != NULL) { + if (globals != NULL) { Py_INCREF(globals); builtins = PyObject_GetItem(globals, builtins_str); if (builtins == NULL) @@ -1904,16 +1904,10 @@ PyImport_Import(PyObject *module_name) /* No globals -- use standard builtins, and fake globals */ PyErr_Clear(); - if (standard_builtins == NULL) { - standard_builtins = - PyImport_ImportModuleEx("__builtin__", - NULL, NULL, NULL); - if (standard_builtins == NULL) - return NULL; - } - - builtins = standard_builtins; - Py_INCREF(builtins); + builtins = PyImport_ImportModuleEx("__builtin__", + NULL, NULL, NULL); + if (builtins == NULL) + return NULL; globals = Py_BuildValue("{OO}", builtins_str, builtins); if (globals == NULL) goto err; |